У меня есть простая программа OpenGL, и я пытаюсь нарисовать экземплярный массив, который хранится в вершинном шейдере.Я использую два следующих шейдера для рендеринга:
Вершинный шейдер:
#version 330 core
uniform mat4 MVP;
const int VertexCount = 4;
const vec2 Position[VertexCount] = vec2[](
vec2(-100.0f, -100.0f),
vec2( -100.0f, 100.0f),
vec2( 100.0f, -100.0f),
vec2(100.0f, 100.0f));
void main()
{
gl_Position = MVP * vec4(Position[gl_VertexID], 0.0, 1.0);
}
Фрагментный шейдер:
#version 330 core
#define FRAG_COLOR 0
layout(location = FRAG_COLOR, index = 0) out vec4 Color;
void main()
{
Color = vec4(0, 1, 0, 1); //let it will be green.
}
После того, как я скомпилировал и проверил эти шейдеры, ясоздайте объект массива вершин и нарисуйте его, как треугольные полосы:
glUseProgram(programHandle); //handle is checked and valid.
glBindVertexArray(vao);
glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 4, 1);
В окне просмотра окна установлен размер окна, подобный glViewport (0, 0, 800, 600).Я передаю MVP простую орфографическую матрицу с кодом:
glUniformMatrix4fv(handle, 1, GL_FALSE, (GLfloat*)&matrix); //handle is checked and valid
, где матрица была инициализирована:
Matrix::CreateOrthographicOffCenter(-200, 200, -200, 200, 1.0f, -1.0f, &matrix);
...
void Matrix::CreateOrthographicOffCenter(float left, float right, float bottom, float top, float zNearPlane, float zFarPlane, Matrix* matrix)
{
memset(matrix, 0, sizeof(Matrix));
matrix->M11 = 2.0f / (right - left);
matrix->M14 = (-right - left) / (right - left);
matrix->M22 = 2.0f / (top - bottom);
matrix->M24 = (-top - bottom) / (top - bottom);
matrix->M33 = 1.0f / (zFarPlane - zNearPlane);
matrix->M34 = (-zNearPlane) / (zFarPlane - zNearPlane);
matrix->M44 = 1.0f;
}
Проблема в том, что на моем экране нет треугольных полос.Я пытался нарисовать вершину без матрицы MVP (gl_Position = vec4 (Position [gl_VertexID], 0.0, 1.0)), но также ничего не получил.Как определить, где проблема?