【Qt OpenGL】Qt Creator中的3D绘图及动画教程
2015-08-01 11:15
274 查看
Qt Creator中的3D绘图及动画教程(参照NeHe)
刚刚学习了Qt Creator,发现Qt提供了QtOpenGL模块,对OpenGL做了不错的封装,这使得我们可以很轻松地在Qt程序中使用OpenGL进行绘图渲染。虽然里面还是由不少专业的解释照搬原文的,但还是加入了大量自己的分析。而且Qt中写OpenGL框架上比VC简单太多了,有不少东西都封装优化好了,代码上还是由有很多区别的。当然,其中原教程没解释好的问题我都作了深入的解释,以及一些多余部分解释、代码都被我删掉简化了。
这份Qt OpenGL的3D绘图及动画教程,我基本会按照Nehe的OpenGL教程,只是将代码的实现运用到Qt Creator中,当然其中加了。
下面对Qt中OpenGL做一个简要介绍:
Qt中OpenGL主要是在QGLWidget类中完成的,而要使用QtOpenGL模块,需要在项目文件( .pro)中添加代码"QT+=opengl"。
QGLWidget类是一个用来渲染OpenGL图形的部件,提供了在Qt中显示OpenGL图形的功能。这个类使用起来很简单,只需要继承该类,然后像使用其他QWidget部件一样来使用它。QGLWidget提供了3个方便的纯虚函数,可以在子类中通过重新实现它们来执行典型的OpenGL任务:
initializeGL():设置OpenGL渲染环境,定义显示列表等。该函数只在第一次调用resizeGL()或paintGL()前被自动调用一次。
resizeGL():设置OpenGL的视口、投影等。每次部件改变大小时都会自动调用该函数。
paintGL():渲染OpenGL场景。每当部件需要更新时都会调用该函数。
(以上3个虚函数更具体的调用情况我会用另一篇文章来讲明)
也就是说,Qt中当创建并显示出一个QGLWidget子对象时,会自动依次调用initializeGL()、resizeGL()、paintGL(),完成当前场景的绘制;而当某些情况发生时,会根据情况决定是否自动调用initializeGL()、resizeGL(),一旦调用initializeGL()、resizeGL()了,会紧跟着调用paintGL()对场景进行重新绘制。
以上就是对Qt中OpenGL机制的一个简单介绍,后面的Qt OpenGL的3D绘图及动画教程,我基本会按照Nehe的OpenGL教程,只是将代码的实现运用到Qt Creator中;教程有看不懂的,大家可以给我留言或者参考Nehe的OpenGL教程 http://www.yakergong.net/nehe/
教程目录索引:
01:OpenGL窗口
02:多边形
03:添加颜色
04:旋转
05:3D空间
06:纹理映射
07:光照和键盘
08:混合透明
09:移动图像
10:3D世界
11:飘动的旗帜
12:显示列表
13:图像字体
14:图形字体
15:纹理图形字
16:雾
17:2D图像文字
18:二次几何体
19:粒子系统
20:蒙板
全部教程中需要的资源文件点此下载
刚刚学习了Qt Creator,发现Qt提供了QtOpenGL模块,对OpenGL做了不错的封装,这使得我们可以很轻松地在Qt程序中使用OpenGL进行绘图渲染。虽然里面还是由不少专业的解释照搬原文的,但还是加入了大量自己的分析。而且Qt中写OpenGL框架上比VC简单太多了,有不少东西都封装优化好了,代码上还是由有很多区别的。当然,其中原教程没解释好的问题我都作了深入的解释,以及一些多余部分解释、代码都被我删掉简化了。
这份Qt OpenGL的3D绘图及动画教程,我基本会按照Nehe的OpenGL教程,只是将代码的实现运用到Qt Creator中,当然其中加了。
下面对Qt中OpenGL做一个简要介绍:
Qt中OpenGL主要是在QGLWidget类中完成的,而要使用QtOpenGL模块,需要在项目文件( .pro)中添加代码"QT+=opengl"。
QGLWidget类是一个用来渲染OpenGL图形的部件,提供了在Qt中显示OpenGL图形的功能。这个类使用起来很简单,只需要继承该类,然后像使用其他QWidget部件一样来使用它。QGLWidget提供了3个方便的纯虚函数,可以在子类中通过重新实现它们来执行典型的OpenGL任务:
initializeGL():设置OpenGL渲染环境,定义显示列表等。该函数只在第一次调用resizeGL()或paintGL()前被自动调用一次。
resizeGL():设置OpenGL的视口、投影等。每次部件改变大小时都会自动调用该函数。
paintGL():渲染OpenGL场景。每当部件需要更新时都会调用该函数。
(以上3个虚函数更具体的调用情况我会用另一篇文章来讲明)
也就是说,Qt中当创建并显示出一个QGLWidget子对象时,会自动依次调用initializeGL()、resizeGL()、paintGL(),完成当前场景的绘制;而当某些情况发生时,会根据情况决定是否自动调用initializeGL()、resizeGL(),一旦调用initializeGL()、resizeGL()了,会紧跟着调用paintGL()对场景进行重新绘制。
以上就是对Qt中OpenGL机制的一个简单介绍,后面的Qt OpenGL的3D绘图及动画教程,我基本会按照Nehe的OpenGL教程,只是将代码的实现运用到Qt Creator中;教程有看不懂的,大家可以给我留言或者参考Nehe的OpenGL教程 http://www.yakergong.net/nehe/
教程目录索引:
01:OpenGL窗口
02:多边形
03:添加颜色
04:旋转
05:3D空间
06:纹理映射
07:光照和键盘
08:混合透明
09:移动图像
10:3D世界
11:飘动的旗帜
12:显示列表
13:图像字体
14:图形字体
15:纹理图形字
16:雾
17:2D图像文字
18:二次几何体
19:粒子系统
20:蒙板
全部教程中需要的资源文件点此下载
相关文章推荐
- [置顶] Qt中使用html语言对word进行图表操作
- Qt 程序等待多长时间执行
- Qt addStretch()
- Ubuntu Qt creator提示无法覆盖文件
- 成功将qt程序移植到arm板上
- QT_利用qt编写一个半自动的126邮箱注册机
- Qt点击按钮打开图片
- [记录]学习<<QT学习之路2>>第四天
- QT4文件搜索的例子
- Qt实战之开发CSDN下载助手 (3)(结束篇)
- Qt实现Rasdial宽带拨号
- qt5 采集摄像头的视音频
- 使用qmake交叉编译一个桌面qt工程
- Qt的窗口的最大化。
- Qt5.4(later)树莓派2 交叉编译环境搭建
- qtcreator 交叉编译 配置
- 关于Qt的MVC
- Qt中定时器的使用
- Qt 5.3 下OpenCV 2.4.11 开发(7)单通道直方图绘制
- Qt归纳(四)