您的位置:首页 > 编程语言 > Qt开发

Qt中使用OpenGL的纹理贴图

2009-11-08 19:41 501 查看
在Qt中封装了OpenGL的部分功能,以便使用OpenGL变得更加容易。Qt中为OpenGL提供支持的类包括有QGLWidget, QGLContext, QGLFormat, QGLColorMap, 具体功能见SDK。由于遇到在场景物体上显示纹理贴图的问题,这里简单的说一下。

在Qt中使用纹理贴图和直接OpenGL中显示纹理略有不同(参加Nehe的纹理教程),OpenGL中提供一个叫作AUX_RGBImageRec的结构体来存储纹理纹理数据,调用
auxDIBImageLoad()函数来装载纹理图片,常见的调用形式如:

AUX_RGBImageRec* image =
auxDIBImageLoad("D:/**.bmp");

然后生成纹理名(
glGenTextures()
)、绑定纹理(
glBindTexture
)、生成真正的纹理
(glTexImage2D())。

在Qt中,则是利用QImage来装载纹理贴图,然后用QGLWidget的静态函数
convertToGLFormat()将QImage格式转换为OpenGL支持的数据格式,如下:

QImage tex, buf;

if(buf.load(D:/**.bmp)){ //装载贴图

tex = QGLWidget::convertToGLFormat(buf); //转换为OpenGL支持的格式

glTexImage2D( GL_TEXTURE_2D, 0, 3, tex1.width(), tex1.height(), 0,

GL_RGBA, GL_UNSIGNED_BYTE, tex1.bits() ); //创建纹理

}

其他生成纹理名绑定等仍类似,这里要注意的是,经过convertToGLFormat()转换后的QImage(虽然返回的仍然是QImage)已经不能当作正常的QImage使用了,它仍然能够使用的成员函数只剩下QImage:width(),QImage::height()和QImage::bit(),这也正是glTexImage2D()需需要的几个参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: