From 5aa4c1ce54ce165d49270802776e11595b7cdd77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tur=C3=A1nszki=20J=C3=A1nos?= Date: Mon, 30 Dec 2024 16:47:00 +0100 Subject: [PATCH] editor fix: mesh merging will retain tangents --- Editor/MeshWindow.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Editor/MeshWindow.cpp b/Editor/MeshWindow.cpp index 506c648d6..e918c46f0 100644 --- a/Editor/MeshWindow.cpp +++ b/Editor/MeshWindow.cpp @@ -364,6 +364,7 @@ void MeshWindow::Create(EditorComponent* _editor) ObjectComponent merged_object; MeshComponent merged_mesh; bool valid_normals = false; + bool valid_tangents = false; bool valid_uvset_0 = false; bool valid_uvset_1 = false; bool valid_atlas = false; @@ -453,6 +454,18 @@ void MeshWindow::Create(EditorComponent* _editor) XMStoreFloat3(&merged_mesh.vertex_normals.back(), XMVector3TransformNormal(XMLoadFloat3(&merged_mesh.vertex_normals.back()), W)); } + if (mesh->vertex_tangents.empty()) + { + merged_mesh.vertex_tangents.emplace_back(); + } + else + { + valid_tangents = true; + merged_mesh.vertex_tangents.push_back(mesh->vertex_tangents[i]); + XMFLOAT3* tan = (XMFLOAT3*)&merged_mesh.vertex_tangents.back(); + XMStoreFloat3(tan, XMVector3TransformNormal(XMLoadFloat3(tan), W)); + } + if (mesh->vertex_uvset_0.empty()) { merged_mesh.vertex_uvset_0.emplace_back(); @@ -576,6 +589,8 @@ void MeshWindow::Create(EditorComponent* _editor) { if (!valid_normals) merged_mesh.vertex_normals.clear(); + if (!valid_tangents) + merged_mesh.vertex_tangents.clear(); if (!valid_uvset_0) merged_mesh.vertex_uvset_0.clear(); if (!valid_uvset_1)