- 22, Oct 2024
- #1
Я пытаюсь написать простой рендеринг треугольной сетки с помощью OpenGL.
#version 330 core layout (location = 0) in vec3 vertexPosition_modelspace; layout (location = 1) in vec3 vertexNormal_modelspace; layout (location = 2) in vec2 textureCoords_modelspace; uniform mat4 matModel; layout(std140) uniform Camera{ mat4 matView; mat4 matProjection; }; out vec2 textureCoords; void main(){ textureCoords = textureCoords_modelspace; gl_Position = matProjection * matView * matModel * vec4(vertexPosition_modelspace, 1.0); }
Это мой код, связанный с униформой. Я убедился в этом glUseProgram(program_) вызывается перед выполнением этого метода.
Также глм::mat4 действительно содержит правильные значения и программа_ имеет значение 3, поэтому оно кажется действительным.
Местоположение отображается как 0
Вот как я называю этот метод:
shader_->BindProgram();
shader_->SetUniformMatrix4("matModel", transformation);
texture_->BindTexture();
mesh_->Draw();
texture_->FreeTexture();
shader_->FreeProgram();
Теперь у меня есть простой вершинный шейдер.
void ShaderProgram::SetUniformMatrix4(std::string name, glm::mat4 matrix)
{
GLint location = glGetUniformLocation(program_, name.c_str());
if (location != -1)
{
glUniformMatrix4fv(location, 1, GL_FALSE, &matrix[0][0]);
}
}
Я ничего не вижу на экране, и это основная ошибка.
При отладке с помощью Nvidia-NSight я обнаружил, что все значения, кроме matModel установлены правильно. matModel содержит все нули, поэтому модель не рисуется.
Почему matModel всегда ноль, даже когда я пытаюсь установить форму?
#opengl #шейдер #c++