I think I have my brain wrapped around meshes and materials as they relate to Gladius. Tonight, I aim to mess about with them to be sure.
The examples that come with Gladius are cubes:

If I understand things well, I ought to be able to convert that to a pyramid. A pyramid has a square base. In Cartesian coordinates, that could be (x, y) of (1, 0), (0, 1), (-1, 0), and (0, -1). The last point would be the tip of the pyramid, which is right in the middle (0,0), but with a z coordinate: (0, 0, 1).
So I convert the mesh proc definition to reflect that:
function proc( options ) {
options = options || {};
options.size = options.size || 1.0;
var point = options.size / 2.0;
var mesh =
{
points: [
[ point, 0, 0],
[ 0, point, 0],
[-point, 0, 0],
[ 0, -point, 0],
[ 0, 0, 2.5*point]
],
faces: [
[0, 1, 2, 3],
[0, 1, 4],
[1, 2, 4],
[2, 3, 4],
[3, 0, 4]
],
// ...
};
return mesh;
}The faces connect the points to form one square and four triangles. Loading the demo up in my browser, I find that I have, in fact, created a pyramid:
Interestingly, it has no bottom:

I reexamine my definition to make sure that I have not missed a point. I try re-ordering the faces and the points. To no avail.
What fixes this in the end is reversing the face definition for the square. Instead of
[0, 1, 2, 3], I use [3, 2, 1, 0]: var mesh =
{
// ...
faces: [
[3, 2, 1, 0],
[0, 1, 4],
[1, 2, 4],
[2, 3, 4],
[3, 0, 4]
],
// ...
};Yikes! That would seem to indicate that the rotation that the points in a faces definition decides the side that is the "face". That is, the face is the side from which the points are defined in a clockwise order. In the first case, I went from 0 through 3 which is a clockwise rotation from above:
In the second case, when I went from 3 through 0, the clockwise rotation would have been seen from below, defining the face:

That seems hard to remember.
Day #408
No comments:
Post a Comment