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
一起学习,分享资料,共同解决问题。
图片描述


猫哥
305 声望44 粉丝

热衷于研究各类互联网技术,热爱学习,热爱生活!