- 1、本文档共49页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
粒子系统 remove_dead_particles—搜索属_particle性表,从表中杀死并删除粒子 M 粒子系统 绘制粒子系统 因为粒子系统是动态的,在每一个帧中需更新系统中的粒子,对于渲染粒子系统的一种直观的方法如下: 创建一个足够大的顶点缓存保存最大数量的粒子。 每一帧里执行:A.??更新所有粒子;B.???COPY所有活着的粒子到顶点缓存;C.???绘制顶点缓存。 这个方法正确,不过效率不高。原因之一是顶点缓冲必须足够大以保存系统中所有粒子。但是非常重要的是,当我们从列表拷贝所有粒子到顶点缓冲(步骤B)时,显卡却什么也不做。 M 粒子系统 更好的办法(SDK中点精灵例程中用到的方法) 创建一个合适尺寸的顶点缓存(能够保存2000个粒子),然后我们划分顶点缓存为几个小的块,比如设置每个缓存片断的尺寸为500个粒子,然后创建一个全局变量 i = 0 ,用来记录片段 。 M 粒子系统 每一帧里执行: A. 更新所有粒子。 B.?绘制全部活动粒子,直到所有粒子渲染完毕。 1.??如果顶点缓存没有满: a???用D3DLOCK_NOOVERWRITE标记锁定缓存片段i b???COPY 500个粒子到片段i 2.??如果顶点缓存满了: a???从起始的地方开始顶点缓冲: i=0 b???用D3DLOCK_NOOVERWRITE标记锁定缓存段i c???COPY 500个粒子到片段i 3.??渲染片段i. 4.??下一片段: i+ + M 粒子系统 这个方法更有效率: 首先,减少顶点缓存的尺寸; 然后, CPU与显卡在协调的工作。也就是说,当绘制一小批粒子时(graphics card work),同时拷贝另一小批粒子到顶点缓存 (CPU work)。这个动作是连续执行的,直到所有的粒子都被渲染完毕,这样, 显卡在全部顶点缓存被填充的时候是不用处于空闲状态的。 M 粒子系统 渲染方案 m_vb_num—在给定时间内顶点缓存能够保存的粒子数量。这个值与实际的粒子系统中的粒子数无关。 m_vb_offset—这个变量是顶点缓存中的偏移,在顶点缓存里我们将用它开始COPY下一批粒子,例如,如果第一批在缓存中是0到499,偏移到第二批COPY的开始处将是500。 m_vb_batch_size—定义一批缓存中的粒子数量。 M 粒子系统 M 粒子系统 随机性 如果模拟雪花,不能让所有雪花以完全相同的方式落下。 在[low_bound, high_bound]区间内随机的返回一个float类型值: 在边界盒的范围内,输出一个随机的向量。 M 粒子系统实例 雪景 M 粒子系统实例 雪景 雪系统类定义如下: M 粒子系统实例 构造函数提供一个点给边界盒结构,边界盒是粒子系统的成员。边界盒描述雪花在哪个范围内(体积范围)下落,如果雪花出了边界盒,它将被杀死并再生。这样,雪系统始终能保存有同样数量的活动粒子: M 粒子系统实例 reset_particle方法创建一个雪花,在x、z轴随机的位置并在边界盒的范围内。设置y轴高度为边界盒的顶部。给雪花一个速度,以便让雪花下落时稍稍向左倾斜。雪花是白色的。 M 粒子系统实例 update方法更新粒子和粒子间的位置,并且测试粒子是否在系统的边界盒之外,如果它已经跳出边界盒,就再重新创建。 M 粒子系统实例 焰火 M 粒子系统实例 焰火系统类定义如下 M 粒子系统实例 构造函数需要提供一个点作为粒子系统中的原点,和系统中的粒子数,原点是火焰爆发的那个点。 M 粒子系统实例 reset_particle方法在原点位置初始化粒子系统,并在边界球内创建一个随机的速度,粒子系统中的每个例子有一个随机的颜色,定义粒子只能存活2秒 M 粒子系统实例 update方法更新每个粒子的位置,并在粒子超出自己的生命周期时杀死它。 注意:这个系统不移除死掉的粒子,这么做是想产生一个新的火焰时,只要简单的重新设置已经存在的死了的火焰系统就可以了。这样不必频繁的去产生和释放粒子。 M 粒子系统实例 重载pre_render以使绘制粒子时与地板颜色融合 M 粒子系统实例 粒子枪 M 粒子系统实例 粒子枪系统的定义: M 粒子系统实例 构造函数需要提供一个照相机的位置点,这是因为系统需要知道摄像机的位置及朝向,以决定在哪创建一个粒子: M 粒子系统实例 reset_particle方法设置粒子位置为当前摄相机位置,并且设置粒子运动的速度为照像机方向的100倍。这样,子弹将射向我们正在看的方向,粒子颜色为绿色。 M 粒子系统实例 update方法更新粒子位置,并且杀死超过其生命周期的粒子,然后,搜索粒子列表删除已经死了的粒子。 M 《C语言程序设计》讲义(for 2007) 延边
文档评论(0)