【问题标题】:OpenGL - vertex shader color not being passed to fragment shaderOpenGL - 顶点着色器颜色未传递给片段着色器
【发布时间】:2015-04-26 17:00:34
【问题描述】:

我正在尝试将颜色从顶点着色器传递到片段着色器并将gl_FragColor 设置为该值。当我似乎这样做时,我制作的物体的颜色会以无法辨别的模式闪烁所有不同的颜色。但是,当我将片段着色器中的颜色设置为类似于 gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0) 的颜色时,颜色是完全白色的,没有闪烁。我将在下面发布我的着色器:

顶点着色器:

#version 130
//not using these for now
//uniform mat4 uniform_modelMatrix;
//uniform mat4 uniform_viewMatrix;     
//uniform mat4 uniform_projectionMatrix;

in vec3 in_Position;
in vec4 in_Color;

void main(void) 
{
    //Set Position to XYZW
    vec4 position = vec4(in_Position.xyz, 1.0);
    gl_Position = position;

    //Set Passed Color to white
    out_Color = vec4(1.0, 1.0, 1.0, 1.0);
}

片段着色器:

#version 130
in  vec4 pass_Color;

void main(void) 
{
    //Set Color to color from vertex shader - doesn't work
    gl_FragColor = pass_Color;

    //Set Color to white anyways - works
    //gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
} 

我不知道我是在顶点着色器中错误地传递了值,还是在片段着色器中没有正确接收它们。有人能看出哪里不对吗?

【问题讨论】:

    标签: opengl shader lwjgl


    【解决方案1】:

    所以我的伙伴帮了我,我在顶点着色器中有一个名为 out_Color 的 out 变量(我也刚刚意识到我没有正确复制)。但我在顶点着色器out vec4 out_Color 中有这个声明。我也有片段着色器in vec4 pass_Color。一旦我将名称都更改为pass_Color,程序就会完美运行。

    因此,为了将来使用,如果您在着色器之间传递信息,请确保这些变量的名称相同。

    【讨论】:

      猜你喜欢
      • 2014-06-27
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多