改进粒子系统
今天美术提出新需求:用粒子实现界面上某些特效,如点击按钮溅起的火花等.
如果重新实现一套2D粒子系统,不仅要重写相应的编辑工具,而且美术也要花时间熟悉新的概念和工具.由于时间紧,这种做法不合实际.现在唯一的做法是改进原有的3D粒子系统,使其可以渲染2D粒子.
大概思路就是去掉z轴影响,将粒子投影到平面上.将3D粒子系统指定的坐标,换算到2D平面上的坐标.伪代码:
If 2d粒子渲染器
使用平行投影的摄像机计算粒子的位置,法向量等属性.填充VertexBuffer.
设置Model-View-Ortho Proj矩阵
渲染.
Else
使用透视投影的摄像机计算粒子的位置,法向量等属性.填充VertexBuffer.
设置Model-View-Perspective Project矩阵
渲染.
我将Ortho Proj矩阵的width, height都设为1, 这规定了视口的长和宽分别是1. 按照这个规定,美术来设置粒子的大小, 速度等属性(比如说长和宽都为1的粒子和视口一样大).
粒子的位置可以由粒子相对于窗口的坐标(单位为象素)除以窗口的大小得到.
截图:
在以前的3D粒子编辑器中编辑2D粒子:
在游戏中的效果,显示了一个"?"作为图标,当拖动它时,会有4个2D粒子随着动.