2012-09-17 62 views
0

考慮以下幾點:。GLSL紋理將不起作用

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-)調用>開始(,_shader-> SetUniform,_shader-> SetUniformImm,_vbo.GetDeclaration()激活和_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是白色的,因此它不會亂用紋理顏色和TEXCOORD0是有效的,因爲我已經在OutFragColor設定R和B如TexCoord0的S和T調試它的值。

+1

記得[設定縮小過濾器(http://www.opengl.org/wiki/Common_Mistakes#Creating_a_Texture)爲你的紋理?你是否對着色器編譯和鏈接進行錯誤檢查? – Tim

+0

天啊!我以更「美麗」的方式重寫了紋理加載,並忘記設置它們。-_- 謝謝 – greenboxal

+0

小心,在您說它在即時模式下工作正常後,我幾乎刪除了我的評論> _>很高興幫助。 – Tim

回答

4

(記賬發帖答案)

問題提問者忘記了設置過濾器縮小爲他的質地,因此質地是不完整的,不顯示。

需要調用glTexParameteri(GL_TEXTURE_2D, GL_MIN_FILTER, GL_LINEAR);(或GL_NEAREST)