我尝试做的是在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()在着色器程序之间切换,但这不是诀窍。任何人都可以帮助我,或解释需要哪些额外信息来帮助我?