您的位置:首页 > 产品设计 > 产品经理

使用自动生成Mipmap时遇到的一些问题

2009-07-08 14:59 561 查看
给纹理添加一个局部更新的功能,在用OpenGL实现时候找到了glTexSubImage2D这个函数

然后问题就开始了

首先是使用glTexSubImage2D时候需要指定mipmap纹理层,而mipmap的生成我目前使用了gluBuild2DMipmaps函数,于是在我尝试修改多层mipmap时发现:居然每一层的修改使用的是绝对坐标,而不是相对坐标

举个例子,如果修改了(16,16)~(32,32)这个范围的像素,那么每当采用更小一级的mipmap时候,所修改的纹理就会向+x和+y方向移动并扩大一倍,这是由于mipmap本身的原理决定的。所以这种方法不能采用。

在gamedev上看到说2000年左右时候调用gluBuild2DMipmaps还可以,现在就不需要这样做了

http://www.opengl.org/wiki/Texture_Mapping#How_to_create_a_texture

在这个链接上提示了一种方法使用gpu生成mipmap

glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);


这个方法需要硬件支持OpenGL 1.4以上(所幸我的915gm还可以支持^^)

mipmap本身没问题了,然后我遇到了另一个问题:

原先使用的gluBuild2DMipmaps其实还有一个特殊功能,就是将非2次幂的纹理缩放到2次幂

结果现在在915gm上面跑的时候,非2次幂纹理都成了白色

在9600gt上面跑完全没有问题,看来这个是硬件支持的问题,寻找解决方案中……

原来以前的错误一直被gluBuild2DMipmaps函数给掩盖了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: