QT与OpenGL之三维旋转(3)

/*装载纹理*/
void GLWidget::loadGLTextures()
{
    QImage tex, buf;
    if(!buf.load(":/images/2.bmp"))//这个时候因为debug没有在外面,所以图片文件夹就是本目录了
  // if(!buf.load("../opengl_qt_nehe_07/crate.bmp"))
    {
        qWarning("Cannot open the image...");
        QImage dummy(128, 128, QImage::Format_RGB32);//当没找到所需打开的图片时,创建一副128*128大小,深度为32位的位图
        dummy.fill(Qt::green);
        buf = dummy;
    }
    tex = convertToGLFormat(buf);//将Qt图片的格式buf转换成opengl的图片格式tex
    glGenTextures(1, &texture[0]);//开辟3个纹理内存,索引指向texture[0]

/*建立第一个纹理*/
    glBindTexture(GL_TEXTURE_2D, texture[0]);//将创建的纹理内存指向的内容绑定到纹理对象GL_TEXTURE_2D上,经过这句代码后,以后对
                                            //GL_TEXTURE_2D的操作的任何操作都同时对应与它所绑定的纹理对象
    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);//当所显示的纹理比加载进来的纹理小时,采用GL_NEAREST的方法来处理
                                                                      //GL_NEAREST方式速度非常快,因为它不是真正的滤波,所以占用内存非常
                                                                      // 小,速度就快了
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);//当所显示的纹理比加载进来的纹理大时,采用GL_NEAREST的方法来处理

}

void GLWidget::timerEvent(QTimerEvent *)
{
    updateGL();
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/6f8d80c1f83b8fd1708ab1d7f90411e4.html