C++ 碎片着色器不';使用纹理时不显示颜色

C++ 碎片着色器不';使用纹理时不显示颜色,c++,opengl,glsl,C++,Opengl,Glsl,我试图做的是在openGL中显示一个对象,它是一个带纹理的kinect网格。由于我需要能够在kinect网格中选择一个体积,因此我创建了一个长方体。为了查看更改长方体时发生的情况,我还希望以白色显示长方体 为了做到这一点,我使用了2个顶点和片段着色器。对于kinect网格,我有一个基于纹理输出颜色的顶点和片段着色器 #version 430 layout(location = 0) in vec3 VertexPosition; layout(location = 1) in vec3 Ver

我试图做的是在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);
}
"

对于长方体,我有一个顶点和片段着色器,其中输出颜色为vec4(1.0,1.0,1.0,1.0)

"

如果使用如图所示的kinect网格的片段着色器,我只会看到kinect网格,但看不到长方体

当我使用
FragColor=vec4(颜色,1.0)时因此不是纹理颜色,我确实看到了框


在我的代码中,我使用glUseProgram()在着色器程序之间切换,但这并没有起作用。谁能帮我一下,或者解释一下需要哪些额外的信息来帮助我吗?

尝试使用
纹理
而不是
纹理2D
我最初使用的,会得到相同的结果。嗯,好的,你能试着在渲染kinect网格之前将代码发布到绑定相关纹理的地方吗?(此外,您可以尝试通过
FragColor=vec4(TexCoord,0.0f,1.0f)
可视化纹理坐标,以查看它们是否为黑色(如果颜色始终为黑色,则表示纹理坐标设置不正确)最好在纹理槽0中有关于
Tex1
的代码,如何上传纹理数据,如何设置纹理样本参数等等[如@Joeyedwd所说]。另一方面,也许你可以尝试如下调整Tex1的纹理参数:
glTexParameteri(GL\u texture\u 2D,GL\u texture\u MAG\u FILTER,GL\u LINEAR)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
,因为有时过滤器设置错误或保留默认值可能会导致类似问题。
#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 );
}
#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);
}