【发布时间】:2011-12-18 06:18:33
【问题描述】:
我想列出一些我认为我学到的东西,但不确定:
- VBO 是要走的路。它们是使用
glGenBuffers和glBufferData创建的。 - 为了获得最大的灵活性,最好使用
glVertexAttribPointer而不是glVertex、glNormal等将通用顶点属性传递给着色器。 -
glDrawElements可以与顶点缓冲区和索引缓冲区一起使用,以有效地渲染具有大量共享顶点的几何图形,例如景观网格。
假设到目前为止所有这些都是正确的,这是我的问题。我读过的所有关于现代 OpenGL 的教程都完全省略了glEnableClientState。但是 OpenGL 手册页说没有 glEnableClientState,glDrawElements 将无能为力:
http://www.opengl.org/sdk/docs/man/xhtml/glDrawElements.xml
关键段落是:“如果不启用GL_VERTEX_ARRAY,则不构造几何图元。”
这导致我提出以下问题:
- 在调用
glDrawElements之前,所有教程均未使用glEnableClientState。这是否意味着手册页错误或过时? -
如果您要使用
glVertexPointer,GL_VERTEX_ARRAY似乎是您启用的东西,同样您将使用GL_NORMAL_ARRAY和glNormalPointer,等等。但如果我不使用这些函数,而是使用带有glVertexAttribPointer的通用顶点属性,那么为什么需要启用GL_VERTEX_ARRAY?
【问题讨论】:
标签: opengl