基于DIRECTX的3D粒子系统构建4
来源:互联网 发布:克洛普 知乎 编辑:程序博客网 时间:2024/05/16 12:36
4、 粒子池
class CParticalPool
{
private:
LPPARTICLENODE m_lpParticalUnit;//存放粒子的内存空间
int m_iFreePointer; //空闲粒子的指针
LPWORD m_lpwFreeStack;//空闲粒子的编号存储栈
public:
CParticalPool();
bool Init( int iMaxParticalNum );//初始化最大数量的存放空间并初始化空闲栈和指针
void Clear(); //清除池
LPPARTICLENODE GetParticalNode();//取得空闲粒子
void FreeParticalNode( LPPARTICLENODE lpParticalNode );//死亡的粒子会回到空闲栈
};
下面是一些主要函数的代码:
bool CParticalPool::Init( int iMaxParticalNum )
{
申请iMaxParticalNum大小的粒子空间;
申请iMaxParticalNum大小的粒子编号空闲栈
for( int iFIndex = 0; iFIndex < iMaxParticalNum; iFIndex++ )
{
初始化粒子编号和粒子编号空闲栈
}
空闲栈指针初始化到栈顶
return TRUE;
}
LPPARTICLENODE CParticalPool::GetParticalNode()
{
if( m_iFreePointer >= 0 )
从空闲栈中弹出栈顶元素;
else
return NULL;
}
void CParticalPool::FreeParticalNode( LPPARTICLENODE lpParticalNode )
{
将lpParticalNode的编号压入空闲栈;
}
5、 其他的优化措施
如果每次出现在屏幕的粒子数目是可控的(始终等于或小于某个数量),那么在粒子系统的每次变换时,可以把粒子的顶点数据填充到一整块BUFFER中,然后在RENDER时一起绘制,这样,只需要在粒子发射器中保存一块LPDIRECT3DVERTEXBUFFER9就行了,不过这种方法可能不适用于Point Sprites粒子,因为Point Sprites粒子的大小是通过设置渲染状态来实现的,因此,需要在绘制每一个粒子时设定他的D3DRS_POINTSIZE渲染状态,这种情况下,应该为每一个粒子保存他的顶点数据。
四、结语
利用上述方法,我们可以产生很多效果绚丽的粒子效果,下面是笔者所在项目使用的一些粒子特效的截图:
粒子系统是是3D游戏中必不可少的组成元素,很多著名的游戏引擎都提供强大的粒子系统以及供美工使用的粒子编辑器。在笔者的工作经历中,见到的粒子编辑器以LITHTECH的最为强大和绚丽。下面是LITHTECH粒子编辑器的截图
这些强大的粒子编辑器有更加复杂的设计,比如考虑多层粒子,粒子间相互作用等因素,但最根本的设计仍然是从上面的粒子基本结构而来。最后,希望能够与业界的朋友在3D游戏的研究方面共同讨论,共同提高。笔者的邮箱:dksiren@163.com
- 基于DIRECTX的3D粒子系统构建4
- 基于DIRECTX的3D粒子系统构建3
- 基于DIRECTX的3D粒子系统构建1
- 基于DIRECTX的3D粒子系统构建(2)
- DirectX 3D_基础之粒子系统的组成 绘制粒子系统 粒子随机性 具体的粒子系统
- DirectX (13) 粒子系统
- DirectX (13) 粒子系统
- 基于GPU的粒子系统
- DirectX 3D_实践之DirectX3D中粒子系统的使用
- Game Programming with DirectX -- 10[粒子系统的实现]
- Game Programming with DirectX -- 11[粒子系统的实际应用]
- DirectX 3D_基础之粒子系统 广告牌技术 粒子和点精灵 点精灵的结构 点精灵的绘制状态 粒子及其属性
- 构建高级粒子系统
- Unity 3D 粒子系统(1)
- DirectX 3D的封装
- 基于OpenGL的烟花粒子系统
- 基于Direct3D实现简单的粒子系统
- 基于GPU的粒子系统实现概要
- 基于DIRECTX的3D粒子系统构建(2)
- 基于DIRECTX的3D粒子系统构建3
- flash lite1.1 : 在以逗号分隔的一组字符串中随机抽取不重复的字符
- 2009-06-23 博客专家群里的讨论记录
- UNIX环境高级编程读书笔记(一)—文件IO (2)
- 基于DIRECTX的3D粒子系统构建4
- SqlServer 时间点触发
- CMM
- UNIX环境高级编程读书笔记(二)—目录和文件(1)
- 变色龙扑克牌游戏
- SQL Server触发器问题总结
- UNIX环境高级编程读书笔记(二)—目录和文件 (2)
- bon、mtd在vivi中的不同
- CMM-2