OpenGL 3.3의 창에 두 개의 삼각형을 그리려합니다. 나는 윈도우 시스템에 GLFW 라이브러리를 사용하고 있습니다.두 개의 VBO가 포함 된 하나의 VAO 렌더링
내가 이해, 나는이 두 VBOs를 포함 이 VBOs (각 삼각형 하나) 및 하나 VAO가 있어야에서. 그게 내가 한 짓이야.
그러나이 두 VBO를 렌더링하기 위해 어떤 호출을해야하는지 알 수 없습니다. 사실, 내가하는 일은 첫 번째 VBO (첫 번째 삼각형) 만 그려집니다.. 두 번째는 결코 나타나지 않습니다.
int main()
{
GLFWwindow *window = setupWindow();
GLfloat triangle1Vertices[] = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f
};
GLfloat triangle2Vertices[] = {
0.f, -0.5f, 0.0f,
0.8f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f
};
GLuint vao, vbo[2];
glGenVertexArrays(1, &vao);
glGenBuffers(2, vbo);
glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(triangle1Vertices), triangle1Vertices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vbo[1]);
glBufferData(GL_ARRAY_BUFFER, sizeof(triangle2Vertices), triangle2Vertices, GL_STATIC_DRAW);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0);
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
while (!glfwWindowShouldClose(window))
{
glfwPollEvents();
glClearColor(0.3f, 0.3f, 0.5f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glBindBuffer(GL_ARRAY_BUFFER, vbo[1]);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (GLvoid*)0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glBindVertexArray(0);
glfwSwapBuffers(window);
}
glDeleteVertexArrays(1, &vao);
glDeleteBuffers(2, vbo);
glfwTerminate();
return 0;
}
분명히 뭔가가 빠졌습니다.
은'glVertexAttribPointer' 렌더링 루프에서 매우 의심스러운. VAO 사용의 요점은 파이프 라인의 입력을 한 번만 설정 한 다음'bind vao;를 수행하는 것입니다. 무승부; 다른 바오와 묶으 라. 그려라. 그럼에도 불구하고 속성을 다시 설정하는 이유는 무엇입니까 (그럼에도 불구하고 동일한 버퍼/형식으로)? – peppe
둘째, 버텍스 쉐이더는 어떻게 생겼습니까? 어떤 위치에 입력이 필요합니까? 그리고 쉐이더는 그리기를 원하는 삼각형에 따라 다른 위치가 아닌 한 위치에서 오는 속성을 처리해야한다는 것을 어떻게 알 수 있습니까? – peppe