Bounding box calculation test.

This commit is contained in:
Viktor Kovacs 2021-05-15 11:57:00 +02:00
parent e7c42dd067
commit 4ee5eb6040
3 changed files with 50 additions and 20 deletions

View File

@ -51,24 +51,6 @@ OV.FlipMeshTrianglesOrientation = function (mesh)
}
};
OV.GetMeshBoundingBox = function (mesh)
{
let min = new OV.Coord3D (Infinity, Infinity, Infinity);
let max = new OV.Coord3D (-Infinity, -Infinity, -Infinity);
for (let i = 0; i < mesh.VertexCount (); i++) {
let vertex = mesh.GetVertex (i);
min.x = Math.min (min.x, vertex.x);
min.y = Math.min (min.y, vertex.y);
min.z = Math.min (min.z, vertex.z);
max.x = Math.max (max.x, vertex.x);
max.y = Math.max (max.y, vertex.y);
max.z = Math.max (max.z, vertex.z);
}
return [min, max];
};
OV.IsModelEmpty = function (model)
{
for (let i = 0; i < model.MeshCount (); i++) {
@ -220,3 +202,23 @@ OV.EnumerateModelTrianglesWithNormals = function (model, onTriangle)
}
}
};
OV.GetMeshBoundingBox = function (mesh)
{
let box = new OV.Box3D (
new OV.Coord3D (Infinity, Infinity, Infinity),
new OV.Coord3D (-Infinity, -Infinity, -Infinity)
);
for (let i = 0; i < mesh.VertexCount (); i++) {
let vertex = mesh.GetVertex (i);
box.min.x = Math.min (box.min.x, vertex.x);
box.min.y = Math.min (box.min.y, vertex.y);
box.min.z = Math.min (box.min.z, vertex.z);
box.max.x = Math.max (box.max.x, vertex.x);
box.max.y = Math.max (box.max.y, vertex.y);
box.max.z = Math.max (box.max.z, vertex.z);
}
return box;
};

View File

@ -79,6 +79,34 @@ describe ('Model Utils', function () {
});
});
it ('Bounding Box', function () {
var model = new OV.Model ();
var mesh1 = new OV.Mesh ();
mesh1.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
mesh1.AddVertex (new OV.Coord3D (1.0, 0.0, 0.0));
mesh1.AddVertex (new OV.Coord3D (1.0, 1.0, 0.0));
mesh1.AddTriangle (new OV.Triangle (0, 1, 2));
model.AddMesh (mesh1);
var mesh2 = new OV.Mesh ();
mesh2.AddVertex (new OV.Coord3D (0.0, 0.0, 1.0));
mesh2.AddVertex (new OV.Coord3D (1.0, 0.0, 1.0));
mesh2.AddVertex (new OV.Coord3D (1.0, 1.0, 1.0));
mesh2.AddTriangle (new OV.Triangle (0, 1, 2));
model.AddMesh (mesh2);
OV.FinalizeModel (model, function () { return new OV.Material (); });
let mesh1Bounds = OV.GetMeshBoundingBox (model.GetMesh (0));
assert (OV.CoordIsEqual3D (mesh1Bounds.min, new OV.Coord3D (0.0, 0.0, 0.0)));
assert (OV.CoordIsEqual3D (mesh1Bounds.max, new OV.Coord3D (1.0, 1.0, 0.0)));
let mesh2Bounds = OV.GetMeshBoundingBox (model.GetMesh (1));
assert (OV.CoordIsEqual3D (mesh2Bounds.min, new OV.Coord3D (0.0, 0.0, 1.0)));
assert (OV.CoordIsEqual3D (mesh2Bounds.max, new OV.Coord3D (1.0, 1.0, 1.0)));
});
it ('Mesh Volume Calculation', function () {
function GetTriangleArea (v0, v1, v2)
{

View File

@ -127,8 +127,8 @@ module.exports =
uvCount : mesh.TextureUVCount (),
triangleCount : mesh.TriangleCount (),
boundingBox : {
min : [boundingBox[0].x, boundingBox[0].y, boundingBox[0].z],
max : [boundingBox[1].x, boundingBox[1].y, boundingBox[1].z]
min : [boundingBox.min.x, boundingBox.min.y, boundingBox.min.z],
max : [boundingBox.max.x, boundingBox.max.y, boundingBox.max.z]
}
};
obj.meshes.push (meshObj);