0

我正在将 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.梅尔维尔

4

1 回答 1

0

如果 a、b 和 c 是三角形的顶点,则可以通过计算向量 (ba) x (cy) 的叉积来解决此问题。

我们来自 Math-Stackoverflow 的朋友有更详细的解释 :-) 为什么 - 交叉产品 - 告诉我们 - 关于 - 顺时针 - 或 - 逆时针 - 旋转

于 2017-02-28T20:48:11.160 回答