summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2017-12-17 12:04:35 -0300
committerJuan Linietsky <reduzio@gmail.com>2017-12-17 12:04:54 -0300
commitfa8a1fc4201dc4c16b5eef844dde17c5bba92dc8 (patch)
tree5245ed8307704a90dbbcb4480cd773028ef7e225
parentcacab4ba6204aa36ddbc85d55705ab82b45e7930 (diff)
Fixes how transform is applied to geometry in UV unwrap
-rw-r--r--editor/import/resource_importer_scene.cpp12
-rw-r--r--scene/resources/mesh.cpp7
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);
}