ModelHandle/source/model/generator.js
2021-05-23 18:05:53 +02:00

75 lines
1.9 KiB
JavaScript

OV.GeneratorParams = class
{
constructor ()
{
this.material = null;
this.transformation = null;
}
};
OV.Generator = class
{
constructor (params)
{
this.params = params || new OV.GeneratorParams ();
this.mesh = new OV.Mesh ();
}
GetMesh ()
{
return this.mesh;
}
AddVertex (x, y, z)
{
let coord = new OV.Coord3D (x, y, z);
if (this.params.transformation !== null) {
coord = this.params.transformation.TransformCoord3D (coord);
}
return this.mesh.AddVertex (coord);
}
AddTriangle (v0, v1, v2)
{
let triangle = new OV.Triangle (v0, v1, v2);
if (this.params.material !== null) {
triangle.SetMaterial (this.params.material);
}
return this.mesh.AddTriangle (triangle);
}
AddConvexPolygon (vertices)
{
for (let vertexIndex = 0; vertexIndex < vertices.length - 2; vertexIndex++) {
this.AddTriangle (
vertices[0],
vertices[vertexIndex + 1],
vertices[vertexIndex + 2]
);
}
}
};
OV.GenerateCuboid = function (genParams, xSize, ySize, zSize)
{
let generator = new OV.Generator (genParams);
generator.AddVertex (0.0, 0.0, 0.0);
generator.AddVertex (xSize, 0.0, 0.0);
generator.AddVertex (xSize, ySize, 0.0);
generator.AddVertex (0.0, ySize, 0.0);
generator.AddVertex (0.0, 0.0, zSize);
generator.AddVertex (xSize, 0.0, zSize);
generator.AddVertex (xSize, ySize, zSize);
generator.AddVertex (0.0, ySize, zSize);
generator.AddConvexPolygon ([0, 3, 2, 1]);
generator.AddConvexPolygon ([0, 1, 5, 4]);
generator.AddConvexPolygon ([1, 2, 6, 5]);
generator.AddConvexPolygon ([2, 3, 7, 6]);
generator.AddConvexPolygon ([3, 0, 4, 7]);
generator.AddConvexPolygon ([4, 5, 6, 7]);
return generator.GetMesh ();
};