Flip triangles when the model should be mirrored.

This commit is contained in:
Viktor Kovacs 2021-04-25 19:52:33 +02:00
parent a9aebe77f4
commit 482a6958a7
2 changed files with 16 additions and 2 deletions

View File

@ -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);
}

View File

@ -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);