0:纹理映射过程的研究
只要遵循下面几个过程,就可以完成纹理的映射
1:指定纹理图片,加载纹理
void GLWidget::loadGLTextures()
{
QImage tex,buf;
QString picname=":/image/lesson6.png";
bool isok=buf.load(picname);
db("in loadGLTextures function");
if(!isok)//加载图片失败
{
db("load ");db(picname);db(" failed\n");
db("using single-color instead.");
QImage dummy(128,128,QImage::Format_ARGB32);//size and color format
dummy.fill(Qt::green);
buf=dummy; //赋值
}
db("in loadGLTextures function");
tex=QGLWidget::convertToGLFormat(buf);//特别用来转换图片的函数,
// 上面的函数得到合适的texture来源
glGenTextures(1,&texture[0]);
glBindTexture(GL_TEXTURE_2D,texture[0]);
glTexImage2D( GL_TEXTURE_2D, 0, 3, tex.width(), tex.height(), 0,
GL_RGBA, GL_UNSIGNED_BYTE, tex.bits() );
//以上三个函数绑定来源
//平滑效果处理
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
}
2:然后在initializeGL()这个重写函数中,调用以上loadGLTextures()函数即可。如下
//载入纹理
loadGLTextures();
//这个一定是要启用的,不启用纹理映射,生成一个纯白色的立方体
glEnable( GL_TEXTURE_2D );
3:最后一步就是在绘制图形paintGL()时,绑定要使用的texture,使用如下方法实现
//绑定texture ,然后开始绘制立方体
glBindTexture( GL_TEXTURE_2D, texture[0] );
glBegin( GL_QUADS );
以上函数绑定了texture[0] 代表使用第一张图的texture
在画点时,还要指定纹理的哪一部分映射到 这个点
如下:
glTexCoord2f( 0.0, 0.0 );
glVertex3f(0, 0, 0.0 );
glTexCoord2f(x,y)
X的取值 0, 0.5 1
x,y一起确定了纹理的哪一部分映射到这一点
仅仅这样说,可能不太明白,拿程序跑一跑,马上就明白了。
4:纹理映射的效果图
你在寻找一起学习Qt+openGL的小伙伴吗?
加群吧:QQ Group:159336168
一起学习,分享资料,共同解决问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。