Flip triangles when the model should be mirrored.
This commit is contained in:
parent
a9aebe77f4
commit
482a6958a7
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user