gpt4 book ai didi

c++ - 带有交错缓冲区的 openGL glDrawElements

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:49:35 25 4
gpt4 key购买 nike

到目前为止,我只使用了 glDrawArrays,并且想转而使用索引缓冲区和索引三角形。我正在用纹理坐标、法线和顶点坐标绘制一个有点复杂的对象。所有这些数据都收集到一个交错的顶点缓冲区中,并使用类似于(假设所有 serup 已正确完成)的调用进行绘制:

glVertexPointer( 3, GL_FLOAT, 22, (char*)m_vertexData );
glNormalPointer( GL_SHORT, 22, (char*)m_vertexData+(12) );
glTexCoordPointer( 2, GL_SHORT, 22, (char*)m_vertexData+(18) );
glDrawElements(GL_TRIANGLES, m_numTriangles, GL_UNSIGNED_SHORT, m_indexData );

这是否允许 m_indexData 也与我的法线和纹理坐标的索引以及标准位置索引数组交错?或者它是否假定适用于整个顶点格式(POS、NOR、TEX)的单个线性索引列表?如果后者为真,那么如何渲染具有不同纹理坐标或法线的相同顶点?

我想这个问题也可以改写为:如果我有 3 个单独的索引列表(POS、NOR、TEX),其中后两个不能重新排列以与第一个共享相同的索引列表,那么最好的方法是什么渲染那个。

最佳答案

不同的列表不能有不同的索引。当您指定 glArrayElement(3) 时,OpenGL 将获取每个列表的第三个元素。
您可以做的是使用您指定的指针,因为实际上列表中最终访问的位置是指针从列表开头的偏移量加上您指定的索引。如果您在列表之间有一个恒定的偏移量,这将很有用。如果列表只是一个随机排列,那么这种针对每个顶点的游戏可能会像使用普通的旧 glVertex3fv()glNormal3fv()glTexCoord3fv()

关于c++ - 带有交错缓冲区的 openGL glDrawElements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/618829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com