2010-06-11 84 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