2010-06-11 85 views
0
glBindTexture(GL_TEXTURE_2D, texidx); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 512, 512, 0, GL_RGBA, GL_FLOAT, texdata); 

如果texidx == 0一切完美,但如果texidx != 0,或使用glGenTexture(&texidx,1)產生,最終的表現說明只是純色(最後glColor)而不是質感。我一直在調試超過一天(glGetError顯示沒有問題)並且正在用盡想法。有什麼想法嗎?我可以根據需要發佈更多代碼。OpenGL的工作不

設置代碼:

glEnable (GL_BLEND); 
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

glEnable(GL_TEXTURE_2D); 
glShadeModel(GL_SMOOTH); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 

glDisable(GL_LIGHTING); 

glClearColor(0.5,0.5,0.5,0); 
glClearDepth(1); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glDisable(GL_COLOR_MATERIAL); 

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 

回答

2

TexID不能爲零,這是默認的紋理或意味着沒有質感。

問題是,默認的OpenGL縮小過濾器使用mipmap,但一個常見的錯誤不提供它們,將MIN/MAG過濾器更改爲可用的東西,如GL_LINEAR或GL_NEAREST,並且紋理將起作用。

的更多信息(和其他常見的錯誤)在http://www.opengl.org/wiki/Common_Mistakes#Creating_a_Texture

+0

嘿馬蒂亞斯討論,這是一個非常好的問題,但在這種情況下是沒有問題的,因爲我使用GL_NEAREST。我已經在上面添加了我的設置代碼以幫助澄清。 如上所述,奇怪的TexId = 0是唯一正確適用於我的情況。 – Meekohi 2010-06-11 12:02:47

+0

啊哈,但是我需要爲每個紋理(杜)設置過濾器。 確保運行後問題得到修復 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); IMMEDIATELY在綁定紋理後,並且在glTexImage2D()之前。 :: sigh ::如果openGL在這種情況下有一些合理的行爲,或者至少會引發一個錯誤,它會不會很好? – Meekohi 2010-06-11 12:11:23

+1

詳見:http://www.opengl.org/wiki/Common_Mistakes#Creating_a_Texture_.232.2C_glTexEnvi – Meekohi 2010-06-11 12:11:44