使用自动生成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
这个方法需要硬件支持OpenGL 1.4以上(所幸我的915gm还可以支持^^)
mipmap本身没问题了,然后我遇到了另一个问题:
原先使用的gluBuild2DMipmaps其实还有一个特殊功能,就是将非2次幂的纹理缩放到2次幂
结果现在在915gm上面跑的时候,非2次幂纹理都成了白色
在9600gt上面跑完全没有问题,看来这个是硬件支持的问题,寻找解决方案中……
原来以前的错误一直被gluBuild2DMipmaps函数给掩盖了
然后问题就开始了
首先是使用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函数给掩盖了
相关文章推荐
- 自动生成ID遇到的一些问题
- 使用POI生成Excel文件,可以自动调整excel列宽遇到的问题及解决
- 关于用c生成的dll在使用其他供应商的工具创建可执行模块时遇到的一些问题
- idea使用generator插件自动生成代码工具遇到的问题
- XILINX ISE 13.1 使用中遇到的一些问题和解决方法
- github 安装配置以及使用遇到的一些问题
- 使用designer-qt3设计界面,生成对应.h和.cpp文件时遇到的问题
- VS2010下使用STLport编译boost时遇到的一些问题
- 使用SVN进行版本控制时遇到的一些问题
- Sublime Text2 使用过程中遇到的一些问题
- 解决thinkphp配置中,项目目录不可写,目录无法自动生成! 请使用项目生成器或者手动生成项目目录~问题
- Ionic3学习笔记(十四)使用 videogular2 实现视频播放以及遇到的一些问题
- [项目过程中所遇到的各种问题记录]ORM篇——使用NHibernate配置对象实体的一些小问题 22
- 使用thymeleaf时遇到的一些问题
- 使用CMake生成sln项目和VS工程遇到的问题
- Freemarker第一次实际项目使用遇到的一些问题
- KVM虚拟机使用过程中遇到过的一些问题
- 使用thinkphp时遇到的一些问题
- .NET----使用母版页后,控件名称自动生成导致js无法正常操作.net控件的问题
- ubuntu16.04安装及刚使用时遇到的一些问题