如何解决制服无法正确加载到GLSL中,但硬编码值确实可以
我试图用投影矩阵乘以顶点,并用单位矩阵对其进行测试。 当我对身份进行硬编码时,生成的图像与预期的一样不变
#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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。