Qt-OpenGL中的多纹理贴图
来源:互联网 发布:mac手绘板软件 编辑:程序博客网 时间:2024/05/16 09:41
__利用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 0
- Qt-OpenGL中的多纹理贴图
- Qt OpenGL----纹理贴图
- Qt+OpenGL之纹理贴图
- Qt中使用OpenGL的纹理贴图
- OpenGL+Qt界面(四) 纹理贴图
- OpenGL纹理贴图 JPEG纹理
- OpenGL纹理贴图 JPEG纹理
- 在OpenGL中进行多纹理贴图
- 在OpenGL中进行多纹理贴图
- OpenGL ES纹理贴图
- OpenGL ES纹理贴图
- opengl 关于纹理贴图
- OpenGL 纹理贴图
- OpenGL--纹理贴图基础
- OpenGL ES纹理贴图
- OpenGL纹理贴图
- [转] opengl ---- 纹理贴图
- OpenGL ES 纹理贴图
- 最短路径 dijkstra bellford floyed
- 放大镜
- Maximum Depth of Binary Tree
- PAT甲级1066. Root of AVL Tree (25)
- 解决Jar mismatch! Fix your dependencies
- Qt-OpenGL中的多纹理贴图
- Android Studio调试功能使用总结
- 剑指Offer:数值的整数次方
- js字符串常用判断方法
- libstdc
- C# 委托和事件 练习
- 设计模式之模板方法模式
- wx.navigateTo/wx.redirectTo 无效
- websocket(该文章是转载)