Qt-OpenGL中的多纹理贴图

__利用OpenGL对切片图像进行叠加构建三维图像是一个不错的选择。但是在图片叠加过程中必然会遇到多纹理映射,或许一个小小的错误或者几句代码顺序问题就会挡住我们追逐梦想的脚步,哈哈哈,好恶心。
__首先多纹理贴图第一步必然是纹理图片的加载。QImage的load()函数你值得拥有。然而只有load()肯定是不够的,一般的,我们会将图像的格式命名如Image1.bmp,Image2.bmp等有明显序列标识的文件名。`编程平台Qt+Win7+VS2013
QImage buf,tex[32];

QString s,filename;
for (int i = 1; i <= 31; i++)
{
    s = QString::number(i, 10);
    filename = "D:/chengxu/chengxu/GLWenLi/octdata_jiaomo/" + s + ".bmp";
    if (!buf.load(filename))
    {
        qWarning("load image failed!");
        QImage dummy(128, 128, QImage::Format_RGB32);
        dummy.fill(Qt::green);
        buf = dummy;
    }
    tex[i-1] = QGLWidget::convertToGLFormat(buf);//转换成OpenGL的图片格式
接下来就是生成纹理了`

    glGenTextures(1, &textur[i - 1]);//返回一个未用的ID用来命名纹理图片
    glBindTexture(GL_TEXTURE_2D, textur[i-1]);
    glTexImage2D(GL_TEXTURE_2D, 0, 3, tex[i-1].width(), tex[i - 1].height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, tex[i - 1].bits());//分配纹理图片的存储空间
//最后的两句一定要放在循环的内部,切记!!!!要不然总会只用到最后的一个纹理
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}

对的,就是这一串。最终这段代码就产生了32个二维的纹理图。现在要做的就是将纹理的图片映射到32个面上。

int n = 32;
    for (int i = 0; i < n;i++)
    {

        glBindTexture(GL_TEXTURE_2D, textur[i]);
        glBegin(GL_QUADS);//注意这里的顺序,一定不要搞反了,这个问题熬了我一整天。

        glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, -1.0, (GLfloat)i /n);
        glTexCoord2f(1.0, 0.0); glVertex3f(1.0, -1.0, (GLfloat)i / n);
        glTexCoord2f(1.0, 1.0); glVertex3f(1.0, 1.0, (GLfloat)i /n);
        glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, (GLfloat)i /n);
        glEnd();
    }

就是这样。貌似很简单的样子,但是我遇到了几个小麻烦,很浪费时间,写出来大家共勉。

最后,在网上好像看到有大神说glGenTextures连续循环会遇到内存泄漏的问题。暂且不管了,慢慢进步吧。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值