R. Melville
R. Melville

Reputation: 11

Determine vertex winding (for backface culling) in JavaFX and Point3D

I'm in the process of displaying j3d GeometryArrays as combined TriangularMeshes in JavaFX. I know the GeometryArrays I am receiving are TriangleStripArrays, and the order allows me to build the correct faces and display the meshes in the scene.

However, I am at a loss on how to determine the vertex winding order based on the TriangleStripArray alone. The faces currently have no correct notion of backface culling, leaving me a complete TriangleMesh that appears distorted from any given angle. By changing the CullFaceMode from BACK to NONE, and by plotting the vertices in the scene, I can tell that all faces are being correctly mapped, just culling inconsistently.

I have two methods which build a TriangleMesh from any given triangular face containing 3 vertices, one for CW winding and one for CCW.

Essentially:

float[] points = {v1.x, v1.y, v1.z, v2.x, v2.y, v2.z, v3.x, v3.y, v3.z};
float[] texCoords = {1, 1, 1, 0, 0, 1};
int[] faces = new int[]{0, 0, 1, 1, 2, 2};

vs

float[] points = {v2.x, v2.y, v2.z, v1.x, v1.y, v1.z, v3.x, v3.y, v3.z};
float[] texCoords = {1, 0, 1, 1, 0, 1};
int[] faces = new int[]{0, 0, 1, 1, 2, 2};

My question is, how can I determine the vertex winding order, and which method should be used per face, based on the TriangleStripArray alone? (TexCoordinates are being supplied, but not used)

Thanks in advance! - R. Melville

Upvotes: 1

Views: 430

Answers (1)

mipa
mipa

Reputation: 10640

This can be solved by computing the cross product of the vectors (b-a) x (c-y) if a,b and c are the vertices of your triangles.

Our frinds from Math-Stackoverflow have a more detailed explanation :-) why-does-cross-product-tell-us-about-clockwise-or-anti-clockwise-rotation

Upvotes: 1

Related Questions