代码之家  ›  专栏  ›  技术社区  ›  DavidG

具有交错缓冲区的openGL元素

  •  3
  • DavidG  · 技术社区  · 17 年前

    到目前为止,我只使用了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)的Inidice的线性列表?如果后者为真,如何使用不同的纹理坐标或法线渲染相同的顶点?

    我想这个问题也可以重新表述为:如果我有3个单独的索引列表(POS,NOR,TEX),其中后2个不能重新排列以与前2个共享同一个索引列表,那么呈现它的最佳方式是什么。

    2 回复  |  直到 16 年前
        1
  •  5
  •   shoosh    17 年前

    glArrayElement(3)
    您可以使用指定的指针,因为实际上,最终访问的列表中的位置是从列表开始的指针偏移量加上您指定的索引。如果列表之间的偏移量为常量,则此选项非常有用。如果列表只是一个随机排列,那么这种对每个顶点的播放可能会像使用普通的旧列表一样昂贵 glVertex3fv() , glNormal3fv() glTexCoord3fv()

    推荐文章