OpenGL 中贴长宽不为2的幂的纹理的方法(李传中)
来源:互联网 发布:php从入门到精通电子版 编辑:程序博客网 时间:2024/06/06 02:01
首先我们获取图像的宽度w 和高度h:
BITMAP BM;
HBITMAP hBmp=(HBITMAP)LoadImage (NULL," 木材.bmp",
IMAGE_BITMAP,0,0,LR_LOADFROMFILE |
LR_CREATEDIBSECTION);
GetObject(hBmp, s izeof(BM), &BM);
w=BM.bmWidth;
h=BM.bmHeight;
其次,为了提高图像的逼真度,我们寻找和w 和h 最接近的整数w1 和h1,而w1 和h1 均为2 的幂。
int m=(int)log((double)w)/log(2.0);
int h=(int)log((double)h)/log(2.0);
int w1=(int)pow(2.0,(double)w);
int h1=(int)pow(2.0,(double)h);
显然上述方法求出的w1 和h1 分别小于w 和h。对于上面的图片,求出w1 和h1 的值为64,这个值不是最好的结果,因为和120 最接近的2 的幂应该是128。为此,我们需要修正w1和h1 的值:
int w2=2*w1; if(w2-w<w-w1) w1=w2;
int h2=2*h1; if(h2-h<h-h1) h1=h2;
最后,用w1 和h1 放缩纹理图像。
GLubyte* pImage = new GLubyte [w*h*
(BM.bmWidthBytes /s izeof(GL_UNSIGNED_BYTE))];
gluScaleImage(GL_BGR_EXT, BM.bmWidth, BM.bmHeight,
GL_UNSIGNED_BYTE, BM.bmBits , w1, h1,
GL_UNSIGNED_BYTE, pImage);
对于新的纹理图像pImage, 我们就可以使用函数
glTexImage2D()指定为纹理图像。
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0,
GL_BGR_EXT, GL_UNSIGNED_BYTE, pImage);
delete []pImage;
- OpenGL 中贴长宽不为2的幂的纹理的方法(李传中)
- OpenGL 中贴长宽不为2的幂的纹理的方法(李传中)
- iPhone OpenGL ES加载纹理的方法
- OPENGL的纹理(转)
- opengl的纹理
- opengl纹理的使用
- 改造的opengl纹理贴图
- OpenGL 纹理的使用入门
- OpenGL纹理映射的几个问题
- OpenGl多重纹理的计算
- OpenGL::纹理的初步应用
- OpenGL-对纹理的理解
- opengl纹理贴图的模式
- OpenGL的纹理显示-笔记
- android openGl纹理的使用
- OpenGL ES纹理尺寸限制的处理方法
- [OpenGL] 基于纹理绘制的透明精灵(透明纹理)
- 渲染世界的OPENGL<14>纹理进阶-多重纹理
- windows server 2003对上传文件有大小限制
- OpenGL中蒙板缓冲区的妙用
- 用OpenGL实现纹理自动生长(蒋立华,秦雪,刘晓东,刘归荣)
- 使用Birt创建含有子报表的报表
- sqlserver2000中实现差集操作
- OpenGL 中贴长宽不为2的幂的纹理的方法(李传中)
- List引起的系统瓶颈
- 最常见的linux命令收集(收集中~~~)
- Hibernate与JDBC的区别
- 水晶报表中如何动态增加字段 (网摘)
- 三维饼状图
- 在 Tomcat 上配置虚拟主机
- ClistCtrl 复杂问题探究
- 整理在家英语用语~