2016-07-20 8 views
1

私はOpenGLの初心者ですが、2つのVAOと1つのVBOを使用して2つの三角形を描画しようとしています。いくつかの研究の後で、VAO、VBO、必要なglew関数がどのように機能するかをよりよく理解するようになったとしても、私のプログラムが2つではなく1つの三角形を表示する理由はわかりません。誰かが助けることができますか?OpenGL:1つのVBO用の複数のVAO

... 

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); 
} 

... 

答えて

2

この関数呼び出しの最後のパラメータが正しくありません:あなたはそれを言っている

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

は9 バイトを追加することが、あなたのポイントは、

はこれを試してみてください浮かぶ以下のとおりです。

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (char*)NULL + 9 * sizeof(float)); 
関連する問題