2016-06-08 105 views
-1

當嘗試在片段着色器中使用紋理時,紋理只是全黑。我覺得有一些缺失,但我看過的一切似乎都沒問題。這裏是我的代碼使用質地:片段着色器中的OpenGL紋理黑

GLuint shaderProg = compileShaderPair(vsource, fsource); 
GLint texSampler = glGetUniformLocation(shaderProg, "tex"); 
glUniform1i(texSampler, 0); 
glUseProgram(shaderProg); 
... 
GLuint tex; 
glActiveTexture(GL_TEXTURE0); 
glGenTextures(1, &tex); 
glBindTexture(GL_TEXTURE_2D, tex); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
int width, height, components; 
unsigned char* img = stbi_load("texture.jpg", &width, &height, &components, 3); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, img); 
glGenerateMipmap(GL_TEXTURE_2D); 

頂點着色器:

#version 330 
in vec3 pos; 
in vec2 uv; 
out vec2 texcoord; 
void main() { 
    texcoord = uv; 
    gl_Position = vec4(pos, 1.0) 
} 

片段着色器:

#version 330 
in vec2 texcoord; 
out vec4 outColor; 
uniform sampler2D tex; 
void main() { 
    outColor = vec4(texture(tex, texcoord).rgb, 1.0); 
} 

我已經驗證了紋理加載,且紋理座標精細。

編輯:它在RenderDoc中進行調試時工作正常,但當它本身運行時,它不起作用。

+0

嘗試outcolor = texture(tex,texcoord); –

+0

你是如何準確檢查紋理座標的? – 246tNt

+0

另外,請把你的頂點着色器。 – 246tNt

回答

0

糟糕!調試時,我忘記了Visual Studio與工作目錄的混淆,而stb_image在嘗試加載映像時未拋出任何錯誤。在Visual Studio之外運行它,它工作正常。

0

當使用GL_RGB作爲internalFormat,精度留給實現,更好的使用GL_RGBA8

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, img); 

不知道這是你的問題,但值得無論如何mentionning和「意見」是小了點編寫代碼。

+0

沒有幫助,但我保持了改變。 – rytone

相關問題