diff options
author | Juan Linietsky <reduzio@gmail.com> | 2017-12-17 12:04:35 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2017-12-17 12:04:54 -0300 |
commit | fa8a1fc4201dc4c16b5eef844dde17c5bba92dc8 (patch) | |
tree | 5245ed8307704a90dbbcb4480cd773028ef7e225 | |
parent | cacab4ba6204aa36ddbc85d55705ab82b45e7930 (diff) |
Fixes how transform is applied to geometry in UV unwrap
-rw-r--r-- | editor/import/resource_importer_scene.cpp | 12 | ||||
-rw-r--r-- | scene/resources/mesh.cpp | 7 |
2 files changed, 10 insertions, 9 deletions
diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp index 74f23cd052..77820bf6a0 100644 --- a/editor/import/resource_importer_scene.cpp +++ b/editor/import/resource_importer_scene.cpp @@ -849,15 +849,15 @@ void ResourceImporterScene::_find_meshes(Node *p_node, Map<Ref<ArrayMesh>, Trans if (mesh.is_valid() && !meshes.has(mesh)) { Spatial *s = mi; - while (s->get_parent_spatial()) { + Transform transform; + while (s) { + transform = transform * s->get_transform(); s = s->get_parent_spatial(); } - if (s == mi) { - meshes[mesh] = s->get_transform(); - } else { - meshes[mesh] = s->get_transform() * mi->get_relative_transform(s); - } + meshes[mesh] = transform; + + print_line("mesh transform: " + meshes[mesh]); } } for (int i = 0; i < p_node->get_child_count(); i++) { diff --git a/scene/resources/mesh.cpp b/scene/resources/mesh.cpp index bb33962be6..bf5f7bf039 100644 --- a/scene/resources/mesh.cpp +++ b/scene/resources/mesh.cpp @@ -1111,13 +1111,14 @@ Error ArrayMesh::lightmap_unwrap(const Transform &p_base_transform, float p_texe for (int j = 0; j < vc; j++) { Vector3 v = p_base_transform.xform(r[j]); + Vector3 n = p_base_transform.basis.xform(rn[j]).normalized(); vertices[(j + vertex_ofs) * 3 + 0] = v.x; vertices[(j + vertex_ofs) * 3 + 1] = v.y; vertices[(j + vertex_ofs) * 3 + 2] = v.z; - normals[(j + vertex_ofs) * 3 + 0] = rn[j].x; - normals[(j + vertex_ofs) * 3 + 1] = rn[j].y; - normals[(j + vertex_ofs) * 3 + 2] = rn[j].z; + normals[(j + vertex_ofs) * 3 + 0] = n.x; + normals[(j + vertex_ofs) * 3 + 1] = n.y; + normals[(j + vertex_ofs) * 3 + 2] = n.z; uv_index[j + vertex_ofs] = Pair<int, int>(i, j); } |