【问题标题】:Opengl GSL glUniform4fv for color not working用于颜色的 Opengl GSL glUniform4fv 不起作用
【发布时间】:2014-03-29 01:10:18
【问题描述】:

我正在尝试做一个简单的 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,我不明白的答案。他是什么意思多个着色器?我只使用一个着色器。

【问题讨论】:

    标签: c++ opengl shader gsl


    【解决方案1】:

    你在应该使用glUniform4fv时使用glUniformMatrix4fv(因为colorvec4,而不是mat4)。

    如果有疑问,请务必检查glGetError() 状态。更好的是,使用KHR_debug 扩展名。

    并且不要假设驱动程序中的错误之前而不是检查代码中的所有内容:-)。这是极其罕见的情况。

    【讨论】:

    • 全能的上帝。我太笨了,我什至没有看到“矩阵”关键字的区别。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多