我一直在使用glDrawElements
来绘制描述对象的三角形。但是,我正在尝试加载我在网上找到的一些OFF对象,我看到它描述了顶点的索引:
...
4 195 209 210 196
4 196 210 211 197
3 197 211 15
3 0 212 198
4 198 212 213 199
4 199 213 214 200
...
我的问题是,如何在3个顶点索引和4个索引(以及任何其他数量的索引)描述的绘图元素之间切换。目前我只能加载使用3个索引来描述顶点的OFF文件:
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO);
int size; glGetBufferParameteriv(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_SIZE, &size);
glDrawElements(GL_TRIANGLES, size/sizeof(GLushort), GL_UNSIGNED_SHORT, 0);
任何有关教程或任何相关内容的提示或参考/指示都可以帮助我概括一些事情?
答案 0 :(得分:1)
只要多边形是凸的,就可以很容易地对它们进行三角测量。一种方法是将每个多边形拆分为三角形,然后使用基本类型GL_TRIANGLES
进行绘制。对于具有n
个顶点的多边形,您将得到由顶点定义的n - 2
个三角形,其中包含以下基于0的索引:
0 1 2
0 2 3
0 3 4
...
0 n-2 n-1
对于您的示例,索引序列为:
195 209 210 195 210 196
196 210 211 196 211 197
197 211 15
0 212 198
198 212 213 198 213 199
199 213 214 199 214 200
更优雅的方法是使用基本类型GL_TRIANGLE_FAN
绘制每个多边形。三角形扇形的顶点顺序与多边形完全相同,因此您可以按顺序指定索引:
0 1 2 3 ... n-1
要分隔多边形,可以使用基元重启。启用它:
glPrimitiveRestartIndex(0xffff);
glEnable(GL_PRIMITIVE_RESTART);
然后在多边形之间插入重启索引。以你的例子:
195 209 210 196 0xffff
196 210 211 197 0xffff
197 211 15 0xffff
0 212 198 0xffff
198 212 213 199 0xffff
199 213 214 200
答案 1 :(得分:0)
数据集的第一个条目是四边形,可以使用顶点{1,2,3}和{1,3,4}(即{195,209,210}和{195,210,196}分割为2个三角形作为第一个条目)。对数据集中的每个四边形使用相同的方案。如果你得到反转tris,请尝试翻转顶点的顺序(例如{195,210,209}而不是{195,209,210})。