游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3442|回复: 10

问问D3D里的 TRAINGLE_FAN 是不是速度很慢啊

[复制链接]

35

主题

141

帖子

157

积分

注册会员

Rank: 2

积分
157
发表于 2009-8-18 15:45:00 | 显示全部楼层 |阅读模式
最近在写LOD地形的时候看了一些教程,其中有人提到 TRAINGLE_FAN 的提交方法在D3D中的速度很慢,并建议不使用,我想问下是真的吗,因为TRAINGLE_FAN 在LOD的地形中很适合,也不知道,是他渲染的时候调用的DrawPrimitive()过于频繁还是
TRAINGLE_FAN这个方法在D3D中本来就很慢,请大家指点下,谢谢~!~~~~~~~~ [em3]

35

主题

141

帖子

157

积分

注册会员

Rank: 2

积分
157
 楼主| 发表于 2009-8-18 19:03:00 | 显示全部楼层

Re:问问D3D里的 TRAINGLE_FAN 是不是速度很慢啊

哎~  自己再顶个,谢谢

14

主题

127

帖子

133

积分

注册会员

Rank: 2

积分
133
发表于 2009-8-19 11:16:00 | 显示全部楼层

Re:问问D3D里的 TRAINGLE_FAN 是不是速度很慢啊

《地形制作全攻略》是吧,我最近也在看。也在困惑这个问题,因为作者有自己写的顶点管理器和纹理管理器来辅助渲染。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-8-19 11:40:00 | 显示全部楼层

Re:问问D3D里的 TRAINGLE_FAN 是不是速度很慢啊

lod存在面顶点重排,TRAINGLE_FAN显然不太适合,除非搞多套TRAINGLE_FAN占用更多的空间,那样很不爽
建议还是用索引组织方式吧

14

主题

127

帖子

133

积分

注册会员

Rank: 2

积分
133
发表于 2009-8-19 12:28:00 | 显示全部楼层

Re:问问D3D里的 TRAINGLE_FAN 是不是速度很慢啊

作者是自己写了个三角形扇形类的
然后根据相机裁剪,在视景体里的顶点填充到动态顶点缓冲区和索引缓冲区进行渲染。
但是我还是弄不清楚,为什么要自定义三角形扇形,直接用TRAINGLE_FAN和自定义的区别在哪?

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-8-19 15:31:00 | 显示全部楼层

Re: 问问D3D里的 TRAINGLE_FAN 是不是速度很慢啊

限之极: 问问D3D里的 TRAINGLE_FAN 是不是速度很慢啊
其中有人提到 TRAINGLE_FAN 的提交方法在D3D中的速度很慢,并建议不使...


不同三角形组织形式的性能差异不是“提交”的速度慢
而在于实际的顶点索引缓存的好坏
通常使用list的原因在于tri-list更容易优化,同时也就有更好的性能
http://www.cnblogs.com/clayman/archive/2009/05/29/1491530.html

2

主题

123

帖子

123

积分

注册会员

Rank: 2

积分
123
发表于 2009-8-19 20:05:00 | 显示全部楼层

Re:问问D3D里的 TRAINGLE_FAN 是不是速度很慢啊

LS正解

35

主题

141

帖子

157

积分

注册会员

Rank: 2

积分
157
 楼主| 发表于 2009-8-20 17:06:00 | 显示全部楼层

Re:问问D3D里的 TRAINGLE_FAN 是不是速度很慢啊

1:我记得一本书上说的FAN要比LIST的 提交顶点数/三角形 要低点,所以我想用FAN,而且好多的OGL的代码都是用FAN,我觉得作者所说的速度太慢可可能是因为DrawPrimitive()调用过于频繁(一个NODE一次),这样速度自然快不了,所以D3D下可能FAN不怎么适合,请大家指教、


2: 我还有个思考,如果FAN的速度是因为DrawPrimitive()函数掉用的原因,那么用LIST也不能太过频繁,不然效果一样慢,我想能不能这样,使用一个计数来计算顶点的数量,因为如果一次把所有的顶点都放在一个VERTER BUFFER里也不太好(这样CPU和GPU没有协调工作),我在一篇文章里看见过,VERTEX BUFFER的大小在2M到4M之间是比较合适的,所以建立一个VERTER BUFFER 然后使用这个计数在当BUFFER的大小在2到4M的时候调用DrawPrimitive()进行渲染,然后在使用VERTER BUFFER来采集顶点,然后再渲染。。。。。。。
我觉得这样比较合适(当然还有些问题再上面,LOD的NODE的三角形数量不是固定的,要采集多少一次是个问题)
但是不知道大家怎么看。     谢谢

35

主题

141

帖子

157

积分

注册会员

Rank: 2

积分
157
 楼主| 发表于 2009-8-20 17:15:00 | 显示全部楼层

Re:问问D3D里的 TRAINGLE_FAN 是不是速度很慢啊

哦,上面的1应该是索引数 / 三角形

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-8-20 19:10:00 | 显示全部楼层

Re:问问D3D里的 TRAINGLE_FAN 是不是速度很慢啊

对现代显卡来说 索引数 永远不是瓶颈,相对于顶点数据,索引所占的空间是非常少的
你可以做个试验,同样的模型list几乎和strip一样快
至于DP本身所带来的性能代价,无论对于哪种模型都是一样的,目前的游戏每帧DP一般在2k~4k次左右

一般来说,buffer的大小不会影响DP效率,把大量顶点打包为一个vb的原因是减少总的vb数量,便于dx内部管理vb
不一定每个vb就对应着一次DP,每次DP可能只使用vb中的某些顶点
此外,对于DP性能分析来说,应该考虑的是三角形数量而不是顶点数量

至于你说的打包方式,不太实际,除了顶点外,你还需要考虑材质,纹理等等因素,对dx9来说,不同材质的物体是很难用一个DP来渲染的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-7 16:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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