c++ - OpenGL : multiple VAOs for one VBO

标签 c++ opengl vbo vao

我是 OpenGL 的新手,我正在尝试使用两个 VAO 和一个 VBO 绘制两个三角形。即使经过一些研究,我对 VAO、VBO 以及所需的 glew 函数如何工作有了更好的了解,我仍然不知道为什么我的程序只显示一个三角形而不是两个。有人可以帮忙吗?

...

GLfloat points[] = {
    0.5f, 0.5f, 0.0f, //First Triangle
    -0.5f, 0.5f, 0.0f,
    0.5f, -0.5f, 0.0f,

    0.0f, 0.0f, 0.0f, //Second Triangle
    -1.0f, 0.0f, 0.0f,
    0.0f, -1.0f, 0.0f
};

GLuint vbo;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

GLuint vao1;
glGenVertexArrays(1, &vao1);
glBindVertexArray(vao1);        
    glBindBuffer(GL_ARRAY_BUFFER, vbo);         
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);   
        glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);

GLuint vao2;
glGenVertexArrays(1, &vao2);
glBindVertexArray(vao2);
    glBindBuffer(GL_ARRAY_BUFFER, vbo);         
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (char*)NULL + 9);    
        glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);

...

while (!glfwWindowShouldClose(window))
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glUseProgram(shader_program);

        glBindVertexArray(vao1);
            glDrawArrays(GL_TRIANGLES, 0, 3);
        glBindVertexArray(0);           

        glBindVertexArray(vao2);
            glDrawArrays(GL_TRIANGLES, 0, 3);
        glBindVertexArray(0);

    glUseProgram(0);

    glfwPollEvents();
    glfwSwapBuffers(window);
}

...

最佳答案

此函数调用的最后一个参数不正确:

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (char*)NULL + 9); 

你告诉它添加 9 个字节,但你的点是 float

试试这个:

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (char*)NULL + 9 * sizeof(float)); 

关于c++ - OpenGL : multiple VAOs for one VBO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38486070/

相关文章:

c++ - 从 int[] 转换为 list<int> : Any better way

c++ - 为什么基于 Dear ImGui 的渲染器这么慢?

python - 带索引的 pyOpenGL VBO

c++ - OpenGL 是否可以同时激活两个 VAO?

c++ - glDrawElements 抛出 GL_INVALID_VALUE 错误

c++ - 你能分配一个与 make_shared 等效的数组吗?

C++ - 如何提取字符串中的有效字符串?

c++ - 为什么 make_pair<int,int> 在 C++ 11 中失败?

c++ - vector 正在丢失 mat4 信息

OpenGL 渲染到多个纹理,结果为白色