我试图做一个简单的3D引擎,但是我扯掉头发徘徊为什么我不能改变一点3d线的颜色。以下工作但始终呈现白色。我想把它画成绿色:
...
float color[4] = { 0.5f, 1.0f, 0.0f, 1.0f };
glUseProgram( shader.id );
//I ommitted the model matrix and stuff because it works fine
glUniformMatrix4fv( glGetUniformLocation( shader.id, "color" ), 1, GL_FALSE, color );
glBegin( GL_LINES );
glVertex3f( x, y, z );
glVertex3f( x, y+10, z );
glEnd();
...
顶点着色器:
#version 330
in vec3 vertexPosition_modelspace;
uniform mat4 mvp;
void main(){
vec4 v = vec4(vertexPosition_modelspace,1);
gl_Position = mvp*v;
}
片段着色器:
#version 330
uniform vec4 color = vec4(1.0,1.0,1.0,1.0);
out vec4 frag;
void main(){
frag = color;
}
我读了一些文件说有时制服会被优化掉并变得不可见,但事实并非如此,因为我使用制服来选择像素的颜色。 glGetUniform的返回值也是(0),它是有效的,因此它存在。那为什么搞砸了呢?我的司机死了吗?
唯一的其他相关或类似问题来自GLSL Shader will not render color from uniform variable以及我不理解的答案。他的意思是多个着色器?我只是使用一个着色器。
答案 0 :(得分:2)
您应该使用glUniformMatrix4fv
时使用glUniform4fv
(因为color
是vec4
,而不是mat4
)。
如果有疑问,请在有疑问时始终检查glGetError()
状态。更好的是,使用KHR_debug
扩展名。
并且在之前不要假设驱动程序中的错误,而不是检查代码中的所有内容:-)。这是非常罕见的情况。