次のことを考慮してください。
virtual void Draw()
{
_texture->Bind(0);
_shader->Begin();
_shader->SetUniform("WVPMatrix", _mvp);
_shader->SetUniform("InColor", _color);
_shader->SetUniformImm("InTexture", 0);
_vbo.GetDeclaration().Activate();
_vbo.Render(GL_QUADS, _ibo, 4);
_shader->End();
}
void Texture2D::Bind(int index)
{
if (index != -1)
{
glActiveTexture(GL_TEXTURE0 + index);
}
glBindTexture(GL_TEXTURE_2D, _textureID);
}
_shader-> Begin()、_ shader-> SetUniform、_shader-> SetUniformImm、_vbo.GetDeclaration()。Activateおよび_vbo.Renderの呼び出しは、フラグメントシェーダーを設定して静的な色(または色)をレンダリングするかのように機能しますユニフォームを通して)それはうまくレンダリングされます。
今、私はtexture2dをレンダリングしようとしています(それはうまくロードされました、私は即時モードでテストしました)、そして私は黒い画面を取得します、なぜですか?
バーテックス:
#version 330
layout(location = 0) in vec3 VertexPosition;
layout(location = 1) in vec2 VertexTexCoord;
uniform mat4 WVPMatrix;
out vec2 TexCoord0;
void main()
{
TexCoord0 = VertexTexCoord;
gl_Position = WVPMatrix * vec4(VertexPosition, 1);
}
断片:
#version 330
in vec2 TexCoord0;
uniform sampler2D InTexture;
uniform vec4 InColor;
out vec4 OutFragColor;
void main()
{
OutFragColor = texture(InTexture, TexCoord0) * InColor;
}
PS:InColorは白なので、テクスチャの色を乱すことはありません。OutFragColorのRとBをTexCoord0のSとTとして設定して値をデバッグしているので、TexCoord0は有効です。