QOpenGL开发入门教程09:纹理贴图
系列教程索引:QOpenGL开发入门教程索引
之前的文章介绍了基本的显示方法,但是显示的是颜色,开发的时候一般显示的是风景之类的图片,所以本文介绍OpenGL相关的图片加载操作。
在OpenGLut系列中,图片数据加载用的是stb_image库,但是Qt中提供了自带的QImage用于操作图片。
显示图片
先看一下如何显示一张图片。
渲染语言
顶点
1 |
|
面
1 |
|
图片数据加载
1 |
|
初始化
获取并绑定顶点位置
1 |
|
设置顶点数据,并创建纹理
1 |
|
绘图部分
1 |
|
GL_TRIANGLE是一个三角形一个三角形的绘制,而GL_TRIANGLE_FAN是将两个三角形绘制为一个四边形,GL_QUADS是直接绘制一个四边形。
效果为:
当前只有一个纹理,就只需要bind()一次就够了。
如果是多个纹理就需要绑定uniform
1 |
|
显示图片2
图片加载,渲染语言和上面一样。
初始化
1 |
|
设置顶点数组数据,并分配内存
绘图函数
1 |
|
可以看到绑定数组数据的代码移到绘图函数里面了,也就是说流程就是这样,位置在哪无所谓。
也可以这样写
初始化函数
1 |
|
绘图函数中
1 |
|
最下面的就是解除绑定。
GL_TEXTURE0是此纹理数据所在的位置,他的值为0,setUniformValue绑定的其实是"texture"和GL_TEXTURE0。将纹理位置和渲染语言变量绑定到一起。
查看效果
会发现图片篇青色。肯定是哪里有问题。
先用代码获取一下图片格式
1 |
|
输出为:
1 |
|
那么RGB格式是没错了,但是它有32位,一个通道是8位,就是四个通道,即RGBA。
在图片加载完成后添加代码
1 |
|
将图片转换为RGBA格式,这样显示就对了。
也可以将图片转换为RGB888,在绘图中将格式改为GL_RGB。
立方体贴图
图像能够正常显示之后,我们就该往立方体上面贴了。
渲染语言
顶点着色器
1 |
|
片元着色器
1 |
|
初始化
1 |
|
绘图
1 |
|
效果为
QOpenGL开发入门教程09:纹理贴图
https://blog.jackeylea.com/qt/qopengl-image-texture