- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第15讲粒子系统
第15讲 粒子系统
1、定义
粒子系统是什么?所谓的粒子系统,就是将看到的物体运动和自然现象,用一系列运动的粒子来描述,再将这些粒子运动的轨迹映射到显示屏上,在显屏上看到的物体运动和自然现象的模拟效果了。利用粒子系统可以在屏幕中表现诸多的特殊效果,如:焰火、火苗、落叶、雪花飞舞等。不怕做不到,就怕想不到。只要你的想象力足够丰富,你可以创造出意想不到的奇迹来。
粒子系统的基本思想是采用许多形状简单的微小粒子作为基本元素来表示不规则模糊物体。这些粒子都有各自的生命周期,在系统中都要经历产生、运动和生长及消亡三个阶段。粒子系统是一个有生命的系统,因此不象传统方法那样只能生成瞬时静态的景物画面,而可产生一系列运动进化的画面,这使得模拟动态的自然景物成为可能。生成画面的基本步骤是:1、粒子源产生新的粒子;2、赋予每一新粒子一定的属性;3、删去那些已经超过生存期的粒子;4、根据粒子的动态属性对粒子进行移动和变换;5、显示由有生命的粒子组成的图粒子系统采用随机过程来控制粒子的产生数量,确定新产生粒子的一些初始随机属性,如初始运动方向、初始大小、初始颜色、初始透明度、初始形状以及生存期等,并在粒子的运动和生长过程中随机地改变这些属性。粒子系统的随机性使模拟不规则模糊物体变得十分简便。
粒子系统应用的关键在于如何描述粒子的运动轨迹,也就是构造粒子的运动函数。函数选择的恰当与否,决定效果的逼真程度。其次坐标系的选定(视角)也有一定的关系,视角不同,看到的效果自然不一样了。
3、粒子系统数据结构
/** 粒子结构*/
struct Particle
{
D3DXVECTOR3 position; /** 粒子的位置*/
D3DXVECTOR3 velocity; /** 粒子的速度*/
D3DXVECTOR3 acceleration; /** 粒子的加速度*/
float lifetime; /** 粒子生命值*/
float dec; /** 粒子消失的速度*/
float size; /** 粒子尺寸*/
D3DCOLOR/*D3DCOLORVALUE */ color; /** 粒子的颜色*/
};
4、粒子系统类
(1)Particle.h文件
#pragma once
#include d3d9.h
#include d3dx9.h
/** 粒子结构*/
struct Particle
{
D3DXVECTOR3 position; /** 粒子的位置*/
D3DXVECTOR3 velocity; /** 粒子的速度*/
D3DXVECTOR3 acceleration; /** 粒子的加速度*/
float lifetime; /** 粒子生命值*/
float dec; /** 粒子消失的速度*/
float size; /** 粒子尺寸*/
D3DCOLOR/*D3DCOLORVALUE */ color; /** 粒子的颜色*/
};
class CParticle
{
public:
CParticle(); /** 构造函数*/
virtual ~CParticle(); /** 析构函数*/
/** 粒子的初始化*/
virtual bool Init(int _num);
/** 粒子的渲染*/
virtual void Render() = 0;
/** 粒子的更新*/
virtual void Update() = 0;
protected:
int m_iNum; /** 粒子总数目*/
Particle* m_pList; /** 粒子指针*/
};
(1)Particle.cpp文件
#include Particle.h
/** 构造函数*/
CParticle::CParticle()
{
m_iNum=0;
m_pList=NULL;
}
/** 析构函数*/
CParticle::~CParticle()
{
if(m_pList != NULL)
{
delete []m_pList;
m_pList = NULL;
原创力文档


文档评论(0)