游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2541|回复: 6

粒子系统是使用动态顶点快还是静态顶点快?

[复制链接]

4

主题

21

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2007-2-2 11:53:00 | 显示全部楼层 |阅读模式
我的观点是粒子系统使用动态顶点比较快,msdn说Direct3D中有时会要求向顶点缓冲区中动态的(运行时)加入一些顶点,这时如果使用默认的静态方式将带来很大的效率损失。
粒子系统就是一个频繁的向顶点缓冲区动态地加入顶点(粒子)的系统,每一帧更新粒子的轨迹、颜色、大小,因此每一帧都要动态添加顶点到顶点缓冲区,更改粒子的显示状态,所以粒子的io比较频繁,所以用动态顶点比较快。
静态顶点渲染比较快,但是要lock它并且修改,d3d的debug就会报告说更改静态顶点会带来效率损失(记得英文的debug info差不多就是这个意思)。因此静态顶点不适合粒子系统,和一些角色的显示,因为要频繁更改顶点缓冲。所以静态顶点适合那些静态的建筑物和地形。
因此粒子系统中使用动态顶点比静态顶点快,我是这么认为的。。。

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20737
发表于 2007-2-2 13:37:00 | 显示全部楼层

Re:粒子系统是使用动态顶点快还是静态顶点快?

lock应该很慢把。

4

主题

21

帖子

21

积分

注册会员

Rank: 2

积分
21
 楼主| 发表于 2007-2-2 14:46:00 | 显示全部楼层

Re:粒子系统是使用动态顶点快还是静态顶点快?

喔,sea_bug发言了。。这个不lock顶点缓存也能添加修改吗?难道是用SetVertexShaderConstant,要vs1.0以上的显卡才可以兼容吧,兼容性差一点。

15

主题

1268

帖子

1268

积分

金牌会员

Rank: 6Rank: 6

积分
1268
发表于 2007-2-2 16:33:00 | 显示全部楼层

Re:粒子系统是使用动态顶点快还是静态顶点快?

你可以创建在内存中的VertexBuffer,这样不论你用什么方式都是可以Lock并且操作速度快。

1

主题

51

帖子

51

积分

注册会员

Rank: 2

积分
51
发表于 2007-2-3 22:32:00 | 显示全部楼层

Re:粒子系统是使用动态顶点快还是静态顶点快?

偶认为使用静态还是动态的buffer应该由粒子的数量确定

19

主题

73

帖子

73

积分

注册会员

Rank: 2

积分
73
发表于 2007-2-3 23:34:00 | 显示全部楼层

Re:粒子系统是使用动态顶点快还是静态顶点快?

如果你用static vertex 的话,每绘制一个粒子你都要做相应的变换,换句话说你也只能一个一个粒子话,因为每个粒子有不懂的位置和朝向,当然这是在FFP上的做法,如果你用shader,可以参考一下sdk的那个indtance的例子,

一般粒子系统都是用 dynamic vertex 如果pool要是 dynamic 的和 lock 的时候用D3DLOCK_DISCARD

全部粒子一次绘制

4

主题

45

帖子

45

积分

注册会员

Rank: 2

积分
45
发表于 2007-2-5 18:18:00 | 显示全部楼层

Re:粒子系统是使用动态顶点快还是静态顶点快?

动态缓冲区的意义在于,可以锁住缓冲区的一部分填数据(cpu),而另外一部分去渲染(DP是GPU去处理),这个好像是可以同步操作,也就是一边渲染一边填数据,lock的时间可以忽略掉
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 09:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表