OpenGLut开发入门教程09:烟火晚会
系列教程索引:OpenGLut入门索引
本文介绍纹理在三维空间中移动,做出类似与烟花的效果。
opengl三维世界坐标系为:
- OpenGL坐标系(物体、世界、照相机坐标系)属于右手坐标系
- 设备坐标系使用的是左手坐标系
我们之前开发的代码中一般z轴部分为负值,也就是说,我们看的视角是从z轴的+方向看向-方法。迷雾按照我们看的方向投射在我们绘制的物体上。
首先函数基本的架构是:
在main函数中glut*Func()的参数为回调函数,需要在main函数外独立实现。
重要的是四个回调函数:
- initGL,初始化函数
- reshapeGL,尺寸调整函数,当窗口的尺寸发生变化时调用此函数重新绘图
- keyboard,捕获键盘输入并处理
- displayGL,将想要显示的图像绘制出来的函数
其他函数说明见OpenGL函数功能说明系列。
加载纹理
1 |
|
和上一篇的一样,就是在上一篇的基础上改的。
流程上还是获取数据、创建纹理、绑定纹理、生成纹理。
烟花初始化
在前面的文章中提到彩色三角形四边形的写法。
1 |
|
先绘制三角形,默认绘制的三角形为白色,在绘制前设置颜色,这样就会显示彩色的三角形。
本文的用法类似,绘制白色的烟花纹理,在绘制之前设置颜色。
显示的烟花粒子数据结构为:
1 |
|
RGB就是颜色,dist表示纹理距离窗口中央的距离,距离越来越远知道从窗口消失。angle是纹理的旋转角度,实现动态效果。
1 |
|
设置粒子的初始值
1 |
|
总计50个粒子,第二个粒子距离为0.004,第50个粒子的距离为0.196
绘制图像
绘制基本的粒子,并图上颜色。
1 |
|
还有实现动画效果
1 |
|
然后更新粒子的颜色、位置
1 |
|
效果
未加载纹理效果
加载纹理后
去掉颜色后
开启闪烁后
完整源码在OpenGL_Freshman下的OpenGLut的11中。
OpenGLut开发入门教程09:烟火晚会
https://feater.top/openglut/opengl-fireworks