Почему треугольник не отображается? - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь нарисовать треугольник в GLFW:

//... init GLFW, compiling and linking shaders, init float array with vertices
//-- all success
GLuint VBO, VAO;
glGenBuffers(1, &VBO);
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexTriangle), vertexTriangle, GL_DYNAMIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);

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

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

//scene loop
while(!glfwWindowShouldClose(window))
{
    glClear(GL_COLOR_BUFFER_BIT);
    glUseProgram(shaderProgram);
    glDrawArrays(GL_TRIANGLES, 0, 3);
    glfwSwapBuffers(window);
    glfwPollEvents();
}

После запуска моей программы он не рисует треугольник.Рисует только пустой серый экран.

1 Ответ

0 голосов
/ 29 декабря 2018

Объект массива вершин должен быть связан при вызове отрисовки:

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

В вашем коде VAO не привязан в этой точке, потому что по умолчаниюобъект массива вершин (0) ограничен glBindVertexArray(0); прямо перед основным циклом.

Информация об атрибутах вершин хранится в объекте массива вершин.glDrawArrays использует информацию атрибута, хранящуюся в текущем связанном объекте массива вершин, для выполнения рисования.

См. Спецификация профиля ядра API OpenGL 4.6 - 10.3.Решетки VERTEX;страница 347

Текущий связанный объект массива вершин используется для всех команд, которые изменяют состояние массива вершин, таких как VertexAttribPointer и EnableVertexAttribArray;все команды, которые рисуются из массивов вершин, такие как DrawArrays и DrawElements;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...