我的游戏通常使用GL_TEXTURE_RECTANGLE_EXT来绘制2D纹理。但是,由于并非所有硬件都支持此功能,因此我尝试使GL_TEXTURE_2D正常工作。最初大多数图像都显示为纯白色,直到我开始调用
glTexParameteri(caps->extension, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(caps->extension, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
每个图像绘制一次,而不是每帧一次。 (使用RECTANGLE_EXT,我可以每帧一次,它可以正常工作。)
好的,现在图像显示出来了。但问题是,一旦第一次绘制纹理,它们就会绘制为纯白色。然后,他们画得恰到好处。这会在第一次绘制任何图像时产生大量的白色闪烁,并且当图像被重复使用时,这会自行解决。有什么想法会导致这种情况吗?
此时我也有“2的幂”四舍五入,因此所有纹理在首次创建时都会四舍五入为最接近的2次幂。
答案 0 :(得分:1)
有人在SDL论坛上回答了这个问题。 “默认情况下,OpenGL会启用mipmapping,除非你明确告诉它在glTexParameteri()中使用GL_LINEAR或GL_NEAREST,这就是为什么它将是白色的,直到你将它设置为其他情况。” (即正在使用mipmap,但它们没有设置。)
另一张海报上写道:“从技术上讲,OpenGL期望(默认情况下)你上传所有的mipmap,比如在每个纹理上调用gluBuild2DMipmaps(甚至是2D UI艺术)或你自己的mipmapping例程(我的选择,比glu32.dll快得多)至少在Windows上,但当然人们甚至不希望在这些纹理上进行mipmapping(或者浪费了33%的额外内存),所以只需更改glTexParameter设置就会更加优雅。“
答案 1 :(得分:0)
表示只有在绘制第一帧后才设置工作所需的某些状态。看看NeHe纹理教程以及如何正确完成它。