问题描述
我试图用投影矩阵乘以顶点,并用单位矩阵对其进行测试。 当我对身份进行硬编码时,生成的图像与预期的一样不变
#version 330 core
layout(location = 0) in vec position;
void main() {
gl_Position = glm::mat4(1.0f) * vec4(position,1.0f);
}
但是,当我将单位矩阵均匀地加载时,顶点消失了。
glm::mat4 model = glm::mat4(1.0f);
gluint ID = glGetUniformlocation(shaderProgram.ID,"model");
gluniformMatrix4fv(ID,1,GL_FALSE,&model[0][0]);
和着色器:
#version 330 core
layout(location = 0) in vec position;
uniform mat4 model;
void main() {
gl_Position = model * vec4(position,1.0f);
}
为什么会发生这种情况,我该如何解决?
解决方法
两个顶点着色器中都有编译错误。
两个顶点着色器均出现错误:
在 GLSL 中数据类型vec
不存在。数据类型的名称为vec3
:
layout(location = 0) in vec position;
layout(location = 0) in vec3 position;
第一个顶点着色器中的错误:
glm::mat4(1.0f)
是C ++。在GLSL中,它是mat4(1.0)
:
gl_Position = glm::mat4(1.0f) * vec4(position,1.0f);
gl_Position = mat4(1.0) * vec4(position,1.0);