20.1 粒子的表现形式

在本章中,我们主要讲解如何创建粒子系统(particle system),使用粒子系统来模拟那些具有行为相似性和随机性的颗粒群(它们通常很小)。粒子系统可以模拟很多自然现象和非自然现象,比如火焰、雨滴、烟雾、爆炸、喷壶、魔咒、炮弹等等。

学习目标

1.学习如何使用几何着色器和流输出功能高效地存储和渲染粒子。

2.了解如何使用基本物理定律使粒子按照自然逼真的方式运动。

3.设计一个灵活的粒子系统框架,简化新的自定义粒子系统的创建过程。

 

粒子是一个非常小的物体,在数学中一般以点来表示。我们通常用点图元(D3D11_PRIMITIVE_TOPOLOGY_POINTLIST)来渲染粒子。不过,点图元只能被光栅化为一个单个像素,它无法提供给足够多的灵活性。我们希望粒子的大小能有一些变化,最好是能把整幅贴图映射到些粒子上。所以,我们将采用第11章渲染树广告牌时使用的方法:使用点来存储粒子,然后在几何着色器中将它们扩展为面对摄像机的四边形。不过,树广告牌只是部分面对摄像机(即,它的y轴会与世界空间的y轴对齐),而粒子广告牌是完全面对摄像机(参见图20.1)。

图20.1
图20.1 世界坐标系与广告牌坐标系。广告牌面对观察点E

只要我们知道“向上”向量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 18:54:04  阅读次数:3640

2006 - 2024,推荐分辨率1024*768以上,推荐浏览器Chrome、Edge等现代浏览器,截止2021年12月5日的访问次数:1872万9823 站长邮箱

沪ICP备18037240号-1

沪公网安备 31011002002865号