游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4828|回复: 5

大家帮助看下,连续调用D3DPT_TRIANGLEFAN绘制,,速度为何这么

[复制链接]

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-9-18 17:10:00 | 显示全部楼层 |阅读模式
Render代码如下:

DWORD dwLoop = (m_wRows/2)*(m_wRows/2);
for (DWORD i=0; i<dwLoop; ++i)
{
        m_pD3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLEFAN, 0, 0, m_dwNumOfVertices, i*10, 8);
}

在某次运行中,dwLoop=4096

本来就用画地形,,由于要用LOD,所以就使用D3DPT_TRIANGLEFAN进行绘制,原来使用D3DPT_TRIANGLELIST的时候,速度挺快的,
运行一次的DrawIndexedPrimitive画出以下的一个NODE
0  1  2
3  4  5
6  7  8

请问该如何改进???谢谢!

5

主题

46

帖子

55

积分

注册会员

Rank: 2

积分
55
QQ
发表于 2008-9-18 20:19:00 | 显示全部楼层

Re:大家帮助看下,连续调用D3DPT_TRIANGLEFAN绘制,,速度为何

可能是这个原因.
顶点数据缓存的命中率,会影响渲染速度。
比如,用索引画一个三角型
Draw( 0, 200, 300)
Draw( 0, 1, 2 )
后者要快

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2008-9-18 20:50:00 | 显示全部楼层

Re:大家帮助看下,连续调用D3DPT_TRIANGLEFAN绘制,,速度为何

顶一下,,请问改如何进行改进???

5

主题

46

帖子

55

积分

注册会员

Rank: 2

积分
55
QQ
发表于 2008-9-18 21:24:00 | 显示全部楼层

Re:大家帮助看下,连续调用D3DPT_TRIANGLEFAN绘制,,速度为何

如果是这个原因的话,就要组织一下顶点数据在缓存中的位置。
比如你用9个索引画8个三角形。
那这9个索引值对应的定点数据在缓存中的位置要尽量靠近。最好连在一起。
如果不用索引画就没这个问题了,索引就是节省顶点

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-9-18 21:36:00 | 显示全部楼层

Re:大家帮助看下,连续调用D3DPT_TRIANGLEFAN绘制,,速度为何

索引不仅节省顶点,而且提高速度。GPU上的transformed顶点缓存只对索引模式的数据有效,一般能缓存4到十几个顶点,按先进先出原则。所以优化顶点索引顺序要尽量尽快重用顶点。这个DXSDK里有说明。

另外用triangle_fan一个一个小片画其实很慢,因为有drawindexedprimitive函数调用的开销和参数状态检查的开销以及和显卡驱动通信的开销,非常浪费。直接用triangle_list一次提交上千个顶点会快很多很多……

10

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2008-9-19 01:46:00 | 显示全部楼层

Re:大家帮助看下,连续调用D3DPT_TRIANGLEFAN绘制,,速度为何

如果每个小片都用一次“drawindexedprimitive”。那么熟读不是取决于显卡性能,而是取决于主板性能。而且不会快到哪里去。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-21 07:40

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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