我将实现一个非常基本的渲染模块现在是时候改变使用VBO将原语呈现为现代方法的旧方法了,到目前为止,我了解它是如何工作的,但是我无法让PoC工作。
加载基本模型(三角形)时不会生成opengl错误(glBindVertexArray是glBindVertexArrayAPPLE的宏):

    float pos[] = {
    -1.0f, -1.0f,-5.0f,
    -1.0f, 1.0f, -5.0f,
    1.0f,1.0f,-5.0f,
    };

printf("%d %d", map_VAO, map_VBO);
checkGLError();
glGenVertexArrays(1, &map_VAO);

checkGLError();
glGenBuffers(1, &map_VBO);

printf("%d %d", map_VAO, map_VBO); // here with 4.1 map_VAO is 0

checkGLError();
glEnableClientState(GL_VERTEX_ARRAY);

glBindVertexArrays(map_VAO);
glBindBuffer(GL_ARRAY_BUFFER, map_VBO);
glBufferData(GL_ARRAY_BUFFER, 9 * sizeof(float), &pos[0], GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArrays(0);

glDisableClientState(GL_VERTEX_ARRAY);

return 0;

在主回路中(绘图部分):
// .. clear buffers load identity etc...

glColor3f(0.33f,0.0f,0.0f);

glEnableClientState(GL_VERTEX_ARRAY);

glBindBuffer(GL_ARRAY_BUFFER, map_VBO);
glBindVertexArrayAPPLE(map_VAO);
glEnableVertexAttribArray(0);

glDrawArrays(GL_TRIANGLES, 0, 3);

glBindBuffer(GL_ARRAY_BUFFER, 0 );
glBindVertexArrayAPPLE(0);

glDisableClientState(GL_VERTEX_ARRAY);

新绘图部件:(删除不必要的clientstate和绑定)
glColor3f(0.33f,0.0f,0.0f);

glBindVertexArrayAPPLE(map_VAO);

glDrawArrays(GL_TRIANGLES, 0, 3);

但什么也没显示出来我曾尝试更改配置文件和OpenGL版本,但出现了其他问题。
我可以用老方法画一个简单的三角形:
glBegin(GL_TRIANGLES);
glVertex3f( -1.0f, -1.0f, -5.0f);
glVertex3f( -1.0f, 1.0f, -5.0f);
glVertex3f(  1.0f, 1.0f,-5.0f);
glEnd();

我做错什么了?,有一些激活与VBO和VAO有关?
附加问题:为什么当我使用开放式gl 4.1核心配置文件时,我无法获得genVertexArray的VAO名称(上面写着无效操作)

最佳答案

有几件事:
glEnableClientState已弃用。glEnableClientState用于告诉OpenGL您正在使用一个顶点数组来实现不再使用的固定函数功能,因此调用此函数是没有用的(可能会导致奇怪的结果)。
glEnableVertexAttribArray(0);无需在绘图功能中再次启用它启用第0个顶点属性存储在VAO中。
glBindBuffer(GL_ARRAY_BUFFER, map_VBO);此外,无需在绘图函数中调用此函数glVertexAttribPointer在配置VAO时存储VBO绑定。
所以,删除glEnable/Disable-ClientState函数,记住只需要在您的案例中绑定VAO我认为你犯错误的原因是第一点。第2点和第3点只是为了改进代码;)

关于c - 基本顶点缓冲区示例不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27367489/

10-12 16:11