Проблемы с настройкой матриц в OpenGL 3.2

Я использую GLM для управления своими матрицами, но сталкиваюсь с некоторыми проблемами, которые не имеют смысла для меня. Когда я устанавливаю матрицу проекции на что-либо, кроме матрицы тождеств, я не вижу квадрата, который пытаюсь нарисовать. Если это личность, это будет работать. Что-то похожее происходит с моей матрицей вида. Если я попытаюсь перевести через -1 или +1, квадрат исчезнет, ​​иначе он, похоже, не даст никаких результатов.

Нет ошибок OpenGL, ошибок компоновщика / компилятора GLSL, и glGetUniformLocation возвращает правильное местоположение. Также шейдерная программа используется правильно.

Также я протестировал шейдер, чтобы убедиться, что он получает правильные значения, передаваемые каждой из матриц (изменяя цвет квадрата, если значение верное).

Вот как я настроил матрицу проекции:

projectionMatrix = glm::perspective(60.0f, (float)windowWidth / (float)windowHeight, 0.1f, 100.0f);

И вот моя функция рисования:

void OpenGLContext::render(void) {
glViewport(0, 0, windowWidth, windowHeight); // Set the viewport size to fill the window
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); // Clear required buffers

//Set up matrices
viewMatrix  = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -5.0f));
modelMatrix = glm::scale(glm::mat4(1.0f), glm::vec3(.5f));

shader->bind();

int projectionMatrixLocation = glGetUniformLocation(shader->id(), "projectionMatrix");
int viewMatrixLocation = glGetUniformLocation(shader->id(), "viewMatrix");
int modelMatrixLocation = glGetUniformLocation(shader->id(), "modelMatrix");

glUniformMatrix4fv(projectionMatrixLocation, 1, GL_FALSE, &projectionMatrix[0][0]);
glUniformMatrix4fv(viewMatrixLocation, 1, GL_FALSE, &viewMatrix[0][0]);
glUniformMatrix4fv(modelMatrixLocation, 1, GL_FALSE, &modelMatrix[0][0]);

glBindVertexArray(vaoID[0]);
glDrawArrays(GL_TRIANGLES, 0, 6);
glBindVertexArray(0);

shader->unbind();

SwapBuffers(hdc);

}

Вот шейдер.верт

#version 150 core

uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;

in vec3 in_Position;
in vec3 in_Color;
out vec3 pass_Color;

void main(void)
{
gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_Position, 1.0);
pass_Color = in_Color;
}

Вот шейдер.фраг

#version 150 core

uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;

in vec3 pass_Color;
out vec4 out_Color;

void main(void)
{
out_Color = vec4(pass_Color, 1.0);
}

Извините, забыл о том, что я рисую:

void OpenGLContext::createSquare(void)
{
float* vertices = new float[18];

vertices[0] = -0.5; vertices[1] = -0.5; vertices[2] = 0.0; // Bottom left corner
vertices[3] = -0.5; vertices[4] = 0.5; vertices[5] = 0.0; // Top left corner
vertices[6] = 0.5; vertices[7] = 0.5; vertices[8] = 0.0; // Top Right corner

vertices[9] = 0.5; vertices[10] = -0.5; vertices[11] = 0.0; // Bottom right corner
vertices[12] = -0.5; vertices[13] = -0.5; vertices[14] = 0.0; // Bottom left corner
vertices[15] = 0.5; vertices[16] = 0.5; vertices[17] = 0.0; // Top Right corner

glGenVertexArrays(1, &vaoID[0]);
glBindVertexArray(vaoID[0]);

glGenBuffers(1, vboID);
glBindBuffer(GL_ARRAY_BUFFER, vboID[0]);
glBufferData(GL_ARRAY_BUFFER, 18 * sizeof(GLfloat), vertices, GL_STATIC_DRAW);

glVertexAttribPointer((GLuint) 0, 3, GL_FLOAT, GL_FALSE, 0, 0);

glEnableVertexAttribArray(0); // Disable our Vertex Array Object
glBindVertexArray(0);

delete [] vertices;
}

Установка таких матриц приводит к тому, что на экране ничего не рисуется. Как я уже сказал, если я установлю проекцию и просмотр матриц на идентичность, это будет работать. Масштабирование на modelMatrix, кажется, всегда работает также.

-1

Решение

На позиции 1 нет атрибута (in_Color). Если вы просто оставили этот вопрос вне этого вопроса, то проблема в локациях, которые вы не определяете в шейдерах. Я никогда не проверял это без части местоположения, но я считать это необходимо, по крайней мере, для нескольких значений: вы должны использовать, например, layout(location = 0) in in_Position,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]