20.1 粒子的表现形式
在本章中,我们主要讲解如何创建粒子系统(particle system),使用粒子系统来模拟那些具有行为相似性和随机性的颗粒群(它们通常很小)。粒子系统可以模拟很多自然现象和非自然现象,比如火焰、雨滴、烟雾、爆炸、喷壶、魔咒、炮弹等等。
学习目标
1.学习如何使用几何着色器和流输出功能高效地存储和渲染粒子。
2.了解如何使用基本物理定律使粒子按照自然逼真的方式运动。
3.设计一个灵活的粒子系统框架,简化新的自定义粒子系统的创建过程。
粒子是一个非常小的物体,在数学中一般以点来表示。我们通常用点图元(D3D11_PRIMITIVE_TOPOLOGY_POINTLIST)来渲染粒子。不过,点图元只能被光栅化为一个单个像素,它无法提供给足够多的灵活性。我们希望粒子的大小能有一些变化,最好是能把整幅贴图映射到些粒子上。所以,我们将采用第11章渲染树广告牌时使用的方法:使用点来存储粒子,然后在几何着色器中将它们扩展为面对摄像机的四边形。不过,树广告牌只是部分面对摄像机(即,它的y轴会与世界空间的y轴对齐),而粒子广告牌是完全面对摄像机(参见图20.1)。
只要我们知道“向上”向量j的世界坐标、广告版的中心位置C和观察点E,我们就可以描述广告牌在世界坐标系中的局部坐标系。
下面给出了广告牌的世界矩阵:
\[\begin{array}{l}{\bf{w}} = \frac{{{\bf{E}} - {\bf{C}}}}{{\left\| {{\bf{E}} - {\bf{C}}} \right\|}}\\{\bf{u}} = \frac{{{\bf{j}} \times {\bf{w}}}}{{\left\| {{\bf{j}} \times {\bf{w}}} \right\|}}\\{\bf{v}} = {\bf{w}} \times {\bf{u}}\\{\bf{W}} = \left[ {\begin{array}{*{20}{c}}{{u_x}}&{{u_y}}&{{u_z}}&0\\{{v_x}}&{{v_y}}&{{v_z}}&0\\{{w_x}}&{{w_y}}&{{w_z}}&0\\{{C_x}}&{{C_y}}&{{C_z}}&1\end{array}} \right]\end{array}\]
除了位置和大小外,粒子还会有一些其他的属性。下面是我们为粒子定义的顶点结构体:
struct Particle { XMFLOAT3 InitialPos; XMFLOAT3 InitialVel; XMFLOAT2 Size; float Age; unsigned int Type; };
注意:我们不总是把点扩展为四边形。例如,使用直线列表(line list)渲染雨景可以得到非常好的效果。我们可以使用不同的几何着色器将点扩展为线。基本上,我们实现的每个粒子系统都有它自己的effect文件。每个effect文件实现了与特定类型的粒子系统相关的细节。
文件下载(已下载 481 次)发布时间:2014/8/27 下午6:54:04 阅读次数:4169