片段着色器在使用纹理时不显示颜色

时间:2014-12-19 11:07:41

标签: c++ opengl glsl

我尝试做的是在openGL中显示一个纹理kinect网格物体。因为我需要能够在kinect网格中选择一个体积,所以我创建了一个盒子。为了看看更换盒子时会发生什么,我还想显示一个白色的盒子。

为了做到这一点,我使用2个顶点和片段着色器。对于kinect网格,我有一个顶点和片段着色器,它根据纹理输出颜色。

#version 430

layout(location = 0) in vec3 VertexPosition;
layout(location = 1) in vec3 VertexColor;
layout(location = 2) in vec2 TextureCoord;

out vec3 Color;
out vec2 TexCoord;

uniform mat4 model, view, proj;

void main()
{
    // Texture coodinates to fragment shader
    TexCoord = TextureCoord;

    // Color to fragment shader
    Color = VertexColor;

    // Position to fragment shader
    gl_Position = proj * view * model * vec4(VertexPosition,1.0);
}

#version 430

in vec3 Color;
in vec2 TexCoord;

out vec4 FragColor;

layout (binding=0) uniform sampler2D Tex1;

void main() 
{
    //FragColor = vec4(Color, 1.0);
    FragColor = texture2D( Tex1, TexCoord );
}

对于盒子,我有一个顶点和片段着色器,其输出颜色为vec4(1.0,1.0,1.0,1.0)。

#version 430

layout(location = 0) in vec3 VertexPosition;

uniform mat4 model, view, proj;

void main()
{
    gl_Position = proj * view * model * vec4(VertexPosition,1.0);
}

#version 430

out vec4 FragColor;

void main() 
{
    FragColor = vec4(1.0,1.0,1.0,1.0);
}

如果我使用kinect网格的片段着色器,如图所示,我只看到kinect网格,但看不到框。

当我使用FragColor=vec4(Color,1.0);而不是纹理颜色时,我确实看到了这个框。

在我的代码中,我使用glUseProgram()在着色器程序之间切换,但这不是诀窍。任何人都可以帮助我,或解释需要哪些额外信息来帮助我?

0 个答案:

没有答案