DirectX中的粒子系统

本文介绍了DirectX中的粒子系统,特别是点精灵技术,包括点精灵的绘制状态如D3DRS_POINTSPRITEENABLE、D3DRS_POINTSCALEENABLE等,以及如何通过顶点结构和绘制状态控制粒子的大小和行为。粒子系统由多个粒子组成,每个粒子有自己的属性,如位置、颜色。文章还讨论了粒子系统的维护,如创建、更新、删除和显示操作。
摘要由CSDN通过智能技术生成

自然界中有现象包含了大量的行为相同的,微小粒子,比如:雪花,烟火等,粒子系统通常用来描述这些场景。

粒子是自然界中一种微小的东西,所以显示例子的最好的方法就是使用点图元,但是点图元在被光栅化的时候会被映射为一个像素,此时我们就无法去灵活的操作他,因为我们要去经常的改变他的大小,或者去给这个图元映射纹理。很早之前有一个技术叫做:广告牌,广告牌就是一个四边形,通过控制他的世界矩阵,来使其总面向摄影机。

但是后来引进了一个新的点图元:点精灵。点精灵可以改变大小以及进行纹理的映射,但是不同于广告牌的是,点精灵只需要一个点,而广告牌需要4个点,这样一来就节省了大量的运算时间。

我们使用如下的顶点结构来描述粒子的位置和颜色:

struct Particle
{
    D3DXVECTOR3_position; 
    D3DCOLOR _color; 
    static const DWORD FVF;
}
const DWORD Particle::FVF=D3DFVF_XYZ | D3DEVF_DIFFUSE;

该结构仅储存了粒子的位置和颜色,也可以根据程序为结构里面添加纹理坐标。

有时候我们需要在Particle里面添加一个浮点类型的变量,来控制点精灵的尺寸的变换,然后为了反映该变化,我们需要在灵活顶点格式里面添加D3DFVF_PSIZE标记,但是大多数的图形卡都不支持这种方式进行点精灵的尺寸控制,我们可以通过绘制状态来控制点精灵的尺寸。

下面是一个顶点结构中含有尺寸成员的例子:

struct Particle
{
 D3DXVECTOR3_position; 
 D3DCOLOR_color; 
 float  _size; 
 static const DWORD FVF; 
}
const DWORD Particle::FVF=D3DEVF_XY2 | D3DFVF_DIFFUSE | D3DFVF_PSIZE;

注意:即使硬件不支持:D3DFVF_PSIZE标记,我们还是可以通过像素着色器来控制粒子的大小。

点精灵的绘制状态

点精灵的行为很大程度上是由绘制状态控制的。绘制状态有以下:

D3DRS_POINTSPRITEENABLE

一个布尔值,默认值是false

若指定为true,则规定整个当前纹理被映射到点精灵上。
若指定为false,则规定点精灵(如果其顶点结构中含纹理坐标的话)的纹理坐标所指定的纹理元应被映射到点精灵上。

D

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值