From 482a6958a758fbe3427a09d652c5511a4a799efc Mon Sep 17 00:00:00 2001 From: Viktor Kovacs Date: Sun, 25 Apr 2021 19:52:33 +0200 Subject: [PATCH] Flip triangles when the model should be mirrored. --- source/import/importer3ds.js | 8 ++++++-- source/model/modelutils.js | 10 ++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/source/import/importer3ds.js b/source/import/importer3ds.js index 2ea3236..aa9ffae 100644 --- a/source/import/importer3ds.js +++ b/source/import/importer3ds.js @@ -504,8 +504,10 @@ OV.Importer3ds = class extends OV.ImporterBase nodeMatrix = GetNodeTransformation (nodeHierarchy, node); } + let mesh = model.GetMesh (currentMeshIndex); let determinant = meshMatrix.Determinant (); - if (OV.IsNegative (determinant)) { + let mirrorByX = OV.IsNegative (determinant); + if (mirrorByX) { // Mirror by x coordinates let scaleMatrix = new OV.Matrix ().CreateScale (-1.0, 1.0, 1.0); meshMatrix = scaleMatrix.MultiplyMatrix (meshMatrix); @@ -524,7 +526,9 @@ OV.Importer3ds = class extends OV.ImporterBase matrix = invMeshMatrix.MultiplyMatrix (matrix); let transformation = new OV.Transformation (matrix); - let mesh = model.GetMesh (currentMeshIndex); + if (mirrorByX) { + OV.FlipMeshTrianglesOrientation (mesh); + } OV.TransformMesh (mesh, transformation); } diff --git a/source/model/modelutils.js b/source/model/modelutils.js index 9e6a137..1d9f09a 100644 --- a/source/model/modelutils.js +++ b/source/model/modelutils.js @@ -41,6 +41,16 @@ OV.TransformMesh = function (mesh, transformation) } }; +OV.FlipMeshTrianglesOrientation = function (mesh) +{ + for (let i = 0; i < mesh.TriangleCount (); i++) { + let triangle = mesh.GetTriangle (i); + let tmp = triangle.v1; + triangle.v1 = triangle.v2; + triangle.v2 = tmp; + } +}; + OV.GetMeshBoundingBox = function (mesh) { let min = new OV.Coord3D (Infinity, Infinity, Infinity);