我正在将 j3d GeometryArrays 显示为 JavaFX 中的组合三角网格。我知道我收到的 GeometryArrays 是 TriangleStripArrays,顺序允许我构建正确的面并在场景中显示网格。
但是,我不知道如何仅基于 TriangleStripArray 确定顶点缠绕顺序。这些面目前没有正确的背面剔除概念,给我留下了一个完整的三角形网格,从任何给定的角度来看都是扭曲的。通过将 CullFaceMode 从 BACK 更改为 NONE,并通过绘制场景中的顶点,我可以看出所有面都被正确映射,只是剔除不一致。
我有两种方法可以从任何给定的包含 3 个顶点的三角形面构建一个 TriangleMesh,一种用于 CW 绕组,一种用于 CCW。
本质上:
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};
对比
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};
我的问题是,如何仅根据 TriangleStripArray 确定顶点缠绕顺序,以及每个面应使用哪种方法?(提供了 TexCoordinates,但未使用)
提前致谢!- R.梅尔维尔