我正在尝试将 VBO 与元素数组缓冲区一起用于我的三角形,如下所示:
glBindBuffer(GL_ARRAY_BUFFER, g_Buffer[0]);
glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0));
glNormalPointer(GL_FLOAT, 0, BUFFER_OFFSET(Model->GetNbVertex()*3*sizeof(float)));
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_Buffer[1]);
glDrawElements(GL_TRIANGLES, Model->GetNbTriangle()*3, GL_UNSIGNED_INT, BUFFER_OFFSET(0));
但我想使用一些纹理坐标,但我的文本坐标isn't心甘情愿地
“索引”
一个三角形有 3 个文本坐标。
我有 N 个顶点和 M 个三角形,所以我有 3M 文本坐标,并且not3N 文本坐标。所以我不能使用 glTexCoordPointer 因为他期望一个顶点只有一个文本坐标,而这不是我的情况。
我想保持顶点的索引,以免占用 GPU 内存。
有一种方法可以对某些元素(例如顶点)使用三角形索引,而不是其他元素(例如我的文本坐标)? (我使用的是GLSL)
让我为您澄清以下内容
一个三角形有 3 个文本坐标。我有 N 个顶点和 M 个三角形,所以我有 3M 文本坐标,而不是 3N 文本坐标。
一个三角形有3个vertices。顶点是由多个属性组成的向量;这是一个常见的误解,认为顶点只是位置!顶点实际上是它所包含的所有属性的整体组合。如果两个顶点仅在一项属性上不同,则它们是不同的顶点。
在你的情况下,属性是
因此,当您说您有 M 个三角形时,这意味着您有 3N 个顶点 - 除了一些三角形共享顶点的极端情况,这意味着它们共享所有属性。
或者换句话说:您始终拥有与顶点一样多的纹理坐标,因为纹理坐标是顶点的一部分。
Update
某些网格格式将顶点属性分成独立索引的属性列表,例如位置、法线、纹理坐标。通常这些列表是从面孔索引的。如果要绘制此类网格数据结构的内容,您首先必须将其扩展为单个索引的顶点列表。通常的方法是迭代网格的所有面,并使用索引元组作为新替换索引列表的键。然后,对于遇到的每个键,将属性从各个属性列表收集到由替换索引索引的单个顶点中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)