将OBJ文件中的四面体转换为三角形?
乍一看,似乎很明显……只要找到4个索引,就在每个面上制作2个三角形,对吗?
含义如下:
v 1.000000 1.000000 0.000000v -1.000000 1.000000 -0.000000
v 1.000000 -1.000000 0.000000
v -1.000000 -1.000000 -0.000000
f -4 -3 -2 -1
进而需要将…转换为以下内容:
v 1.000000 1.000000 0.000000v -1.000000 1.000000 -0.000000
v 1.000000 -1.000000 0.000000
v -1.000000 -1.000000 -0.000000
f -4 -3 -2
f -2 -3 -1
当然,此特定示例将正确呈现。
但是,并非所有情况都像将面分为两个面一样简单(根据上述示例,第一个面包含原始面的前三个顶点,第二个面包含最后3个顶点)。以以下多维数据集为例:
v 0.000000 1.000000 1.000000v 0.000000 0.000000 1.000000
v 1.000000 0.000000 1.000000
v 1.000000 1.000000 1.000000
v 0.000000 1.000000 0.000000
v 0.000000 0.000000 0.000000
v 1.000000 0.000000 0.000000
v 1.000000 1.000000 0.000000
f 1 2 3 4
f 8 7 6 5
f 4 3 7 8
f 5 1 4 8
f 5 6 2 1
f 2 6 7 3
这些面不能以前面的示例相同的方式进行分割…因此,我需要某种方式来了解如何将四边形面分割为两个三角形面,同时为第二张面使用 正确的 索引…
请注意,我没有使用固定功能管道,因此,不能选择使用GL_QUADS。我的渲染引擎几乎只能使用GL_TRIANGLES。
回答:
如果您有4个索引,例如:
0 1 2 3
分成两个三角形将是第一个带有三个索引,一个带有第三个,第三个和第四个索引。在此示例中:
0 1 20 2 3
让我们尝试一些ASCII艺术来说明这一点:
3-------2| /|
| / |
| / |
|/ |
0-------1
在这里,您将看到0 1 2 3
四边形,0 1 2
第一个三角形(右下)和0 2 3
第二个三角形(左上)。
更一般而言,对于具有n
顶点的面,将生成三角形:
0 (i) (i + 1) [for i in 1..(n - 2)]
如果您不坚持使用单独的三角形,则还可以使用GL_TRIANGLE_FAN
仍在核心OpenGL中的图元。这样,您可以使用原始索引序列使用三角扇绘制任何凸多边形。因此,0
1 2 3在这种情况下,具有顶点序列的三角形扇形结构描述了四边形,并且很容易将其推广到具有4个以上顶点的面。
编辑:由于您似乎仍然有问题,让我们看看这如何应用于您帖子中的示例。我将列出每个面的四边形的原始索引序列,以及拆分四边形后的两个三角形的索引序列。
f 1 2 3 4 --> (1 2 3) (1 3 4)f 8 7 6 5 --> (8 7 6) (8 6 5)
f 4 3 7 8 --> (4 3 7) (4 7 8)
f 5 1 4 8 --> (5 1 4) (5 4 8)
f 5 6 2 1 --> (5 6 2) (5 2 1)
f 2 6 7 3 --> (2 6 7) (2 7 3)
当我绘制立方体时,这对我来说似乎是正确的。请记住从索引中减去1,因为它们是从1开始的索引,并且几乎可以肯定需要从0开始的索引。
以上是 将OBJ文件中的四面体转换为三角形? 的全部内容, 来源链接: utcz.com/qa/419099.html