Обратите внимание, как моя программа рисует один треугольник, но вместо этого я пытаюсь выразить в коде рисование квадрата.Мой tri_indicies
индексный буферный объект, я считаю, правильно упорядочивает эти элементы так, что должен быть нарисован квадрат, но при выполнении программы порядок рисования, определенный мной в tri_indicies
, не отражается в окне.Не уверен, коренится ли ошибка в tri_indicies
, несмотря на то, что мои изменения в порядке элементов не влияют на мой обработанный вывод, я хочу верить, что это здесь, но, скорее всего, это где-то еще.
Моя программа использует абстракцииособенно VertexBuffer, VertexArray и IndexBuffer, все подробно описано ниже.
const int buffer_object_size = 8;
const int index_buffer_object_size = 6;
float tri_verticies[buffer_object_size] = {
-0.7f, -0.7f, // 0
0.7f, -0.7f, // 1
0.7f, 0.7f, // 2
-0.7f, 0.7f // 3
};
unsigned int tri_indicies[index_buffer_object_size] = {
0, 1, 2,
2, 3, 0
};
VertexArray vertexArray;
VertexBuffer vertexBuffer(tri_verticies, buffer_object_size * sizeof(float)); // no call vertexBuffer.bind() constructor does it
VertexBufferLayout vertexBufferLayout;
vertexBufferLayout.push<float>(3);
vertexArray.add_buffer(vertexBuffer, vertexBufferLayout);
IndexBuffer indexBuffer(tri_indicies, index_buffer_object_size);
ShaderManager shaderManager;
ShaderSource shaderSource = shaderManager.parse_shader("BasicUniform.shader"); // ensure debug working dir is relative to $(ProjectDir)
unsigned int shader = shaderManager.create_shader(shaderSource.vertex_source, shaderSource.fragment_source);
MyGLCall(glUseProgram(shader));
Позже в основном у меня есть цикл, который должен рисовать мой квадрат на экране и постепенно исчезать из значения синего цвета между 1.0f
и0.0f
.
while (!glfwWindowShouldClose(window))
{
MyGLCall(glClear(GL_COLOR_BUFFER_BIT));
vertexArray.bind();
indexBuffer.bind();
MyGLCall(glDrawElements(GL_TRIANGLES, index_buffer_object_size, GL_UNSIGNED_INT, nullptr)); // nullptr since we bind buffers using glGenBuffers
if (blue > 1.0f) {
increment_color = -0.05f;
}
else if (blue < 0.0f) {
increment_color = 0.05f;
}
blue += increment_color;
glfwSwapBuffers(window);
glfwPollEvents();
}