制服无法正确加载到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);