2017-05-26 6 views
0

私は別々のVAOとVBOを使って2つの三角形を描画しようとしていますが、実行中はレンダリングされる三角形は1つだけです。以下は私のコードスニペットです。私はどこがうんざりしているのかわからない。異なるVAOとVBOを持つ複数の三角形を描く

私はglfwとglewを使用しています。

..... 
//initialization and creating shader program 
..... 
GLfloat vertices[] = { 
    -0.9f, -0.5f, 0.0f, // Left 
    -0.0f, -0.5f, 0.0f, // Right 
    -0.45f, 0.5f, 0.0f, // Top 
}; 

GLfloat vertices2[] = { 
    0.0f, -0.5f, 0.0f, // Left 
    0.9f, -0.5f, 0.0f, // Right 
    0.45f, 0.5f, 0.0f // Top 
}; 


GLuint VBO1, VAO1, EBO; 
glGenVertexArrays(1, &VAO1); 
glGenBuffers(1, &VBO1); 
glGenBuffers(1, &EBO); 

GLuint VBO2, VAO2; 
glGenBuffers(1, &VAO2); 
glGenBuffers(1, &VBO2); 

glBindVertexArray(VAO1); 
glBindBuffer(GL_ARRAY_BUFFER, VBO1); 
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); 

//glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); 
//glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); 

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)nullptr); 
glEnableVertexAttribArray(0); 

//glBindBuffer(GL_ARRAY_BUFFER, 0); 
glBindVertexArray(0); 



glBindVertexArray(VAO1); 
glBindBuffer(GL_ARRAY_BUFFER, VBO2); 
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices2), vertices2, GL_STATIC_DRAW); 

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)nullptr); 
glEnableVertexAttribArray(0); 

//glBindBuffer(GL_ARRAY_BUFFER, 0); 
glBindVertexArray(0); 

while (!glfwWindowShouldClose(window)) 
{ 
    glfwPollEvents(); 


    glClearColor(0.2f, 0.3f, 0.3f, 1.0f); 

    glClear(GL_COLOR_BUFFER_BIT); 

    glUseProgram(ShaderProgramID); 

    glBindVertexArray(VAO1); 
    glDrawArrays(GL_TRIANGLES, 0, 3); 
    //glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); 
    //glBindVertexArray(0); 

    glBindVertexArray(VAO2); 
    glDrawArrays(GL_TRIANGLES, 0, 3); 
    //glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); 
    //glBindVertexArray(0); 

    glfwSwapBuffers(window); 
} 
glDeleteVertexArrays(1, &VAO1); 
glDeleteVertexArrays(1, &VAO2); 

glDeleteBuffers(1, &VBO1); 
glDeleteBuffers(1, &VBO2); 

glfwTerminate(); 
... 

Iは、以下のような配列としてVAOsとVBOsを作成し、それに応じてコード上記のコードを変更した場合、私は三角形の両方を参照しているが。なぜそういうことが分かりませんか?

GLuint VAO[2], VBO[2]; 
+2

'VAO1'を2回バインドしますが、2回目はおそらく' glBindVertexArray(VAO2); 'になります。 –

答えて

2
GLuint VBO2, VAO2; 
glGenBuffers(1, &VAO2); 

... 

glBindVertexArray(VAO2); 

あなたは、バッファ、ないVAOとしてVAO2を初期化してきました。

+1

また、VAO2へのバインドは起こっていないことに注意してください。代わりに、OPは 'VAO1'を2回(おそらくタイプミス)バインドしています。 –

+0

はいこれが問題を解決しました。 2つのマイナーなタイプミスとたくさんの髪が引っ張られた。ありがとうございました。 :) –

関連する問題