0

次のことを考慮してください。

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は有効です。

4

1 に答える 1

5

(簿記の回答を投稿する)

質問者は、テクスチャに縮小フィルターを設定するのを忘れたため、テクスチャが完全ではなく、表示されません。

呼び出す必要がありますglTexParameteri(GL_TEXTURE_2D, GL_MIN_FILTER, GL_LINEAR);(またはGL_NEAREST)

于 2012-09-17T23:08:30.323 に答える