游戏开发论坛

 找回密码
 立即注册
搜索
楼主: bigbook2000

D3D下几种2D游戏制作方法的比较

[复制链接]

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
 楼主| 发表于 2004-10-28 09:14:00 | 显示全部楼层

Re:D3D下几种2D游戏制作方法的比较

1000个不算什么了,1000个图形,用哪个方法都是85fps(我开了刷新同步,屏幕刷新率是85MHz),现在的游戏,一屏的图形元素远远大于1000个。

如果是用VB三角形,一次送到一个流中(不像我上面的做法),那就更快了,不是ID3DXSprite能比的,画20000个三角形也是85fps

另外一个关于Surface,我发现了一些东西,就是和 IDirect3DTexture9 相关的,我觉得在制作2D游戏过程中,如果需要在后台用程序处理一些图片,那么Surface应该有一定的用处

20

主题

473

帖子

502

积分

高级会员

Rank: 4

积分
502
发表于 2004-10-28 10:19:00 | 显示全部楼层

Re:D3D下几种2D游戏制作方法的比较

理论上,D3DXSPRITE和自己用一个strip来做,速度是一样的

15

主题

1268

帖子

1268

积分

金牌会员

Rank: 6Rank: 6

积分
1268
发表于 2004-10-28 18:47:00 | 显示全部楼层

Re:D3D下几种2D游戏制作方法的比较

在第一种情况里,你可以将所有地图的顶点信息放到一个vb里面,同时使用静态vb;这样当然会快一些

15

主题

1268

帖子

1268

积分

金牌会员

Rank: 6Rank: 6

积分
1268
发表于 2004-10-28 18:52:00 | 显示全部楼层

Re:D3D下几种2D游戏制作方法的比较

"如果是用VB三角形,一次送到一个流中(不像我上面的做法),那就更快了,不是ID3DXSprite能比的,画20000个三角形也是85fps"

这可能是顶点缓冲的原因,而且也要根据你显卡的像素通道(不是vs,ps)得速度与数量决定
单单看三角形填充率不够

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2004-10-28 21:22:00 | 显示全部楼层

Re: Re:D3D下几种2D游戏制作方法的比较

secondage: Re3D下几种2D游戏制作方法的比较

理论上,D3DXSPRITE和自己用一个strip来做,速度是一样的

同意你的看法!

9

主题

42

帖子

42

积分

注册会员

Rank: 2

积分
42
发表于 2004-10-29 15:17:00 | 显示全部楼层

Re:D3D下几种2D游戏制作方法的比较

Surface也用到了材质,效率是没有想象的高

3

主题

95

帖子

107

积分

注册会员

Rank: 2

积分
107
发表于 2004-10-29 23:57:00 | 显示全部楼层

Re:D3D下几种2D游戏制作方法的比较

呵呵,我想你忽略了几个问题。自己做的肯定效果要高一些,你试着这样:

1、用VB模拟是肯定的。
2、关闭ZBuffer和ZWrite,既然是在做2DSprite,那么按画家算法来呗,ZBuffer没有什么意义。何况,Sprite做Blend的情况很多,到时候又是排序又是渲染顺序,弄得一蹋糊涂,还不如一个画家算法来得容易来得快,再说了,Z Test也不是免费的啊。
3、不要使用Ortho Mode,直接使用RHW,这样来得更快一些,虽然说多了一些顶点。
4、如果说使用两个Triangle的话,那还不如用一个Strip。
5、设置什么裁剪平面的都没有太大的意义,因为Viewport本身就是一个裁剪区,Sprite出了屏幕也就是出了VP,就已经裁剪了,所以该关的裁剪都关掉。
6、使用VBPool的方式,不要一个Sprite一个POOL,因为切换VB也不是免费的,而且有可能是一个很浪费的过程。

以上6点都做到,然后再加上好的CPU算法,你再拿去和另外两种方法比,尤其是当Sprite增加,并且Sprite还是不停在去做帧动画的时候,你试试看哪个效率高?
呵呵,不过你不用试了,我已经试过了,使用了VBPool方式的Sprite快的不止是几倍十几倍的问题!!

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2004-10-30 02:42:00 | 显示全部楼层

Re:D3D下几种2D游戏制作方法的比较

为什么Ortho Mode没RHW快

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
 楼主| 发表于 2004-10-30 15:37:00 | 显示全部楼层

Re: D3D下几种2D游戏制作方法的比较

呵呵,我想你忽略了几个问题。自己做的肯定效果要高一些,你试着这样:

1、用VB模拟是肯定的。
2、关闭ZBuffer和ZWrite,既然是在做2DSprite,那么按画家算法来呗,ZBuffer没有什么意义。何况,Sprite做Blend的情况很多,到时候又是排序又是渲染顺序,弄得一蹋糊涂,还不如一个画家算法来得容易来得快,再说了,Z Test也不是免费的啊。
3、不要使用Ortho Mode,直接使用RHW,这样来得更快一些,虽然说多了一些顶点。
4、如果说使用两个Triangle的话,那还不如用一个Strip。
5、设置什么裁剪平面的都没有太大的意义,因为Viewport本身就是一个裁剪区,Sprite出了屏幕也就是出了VP,就已经裁剪了,所以该关的裁剪都关掉。
6、使用VBPool的方式,不要一个Sprite一个POOL,因为切换VB也不是免费的,而且有可能是一个很浪费的过程。

以上6点都做到,然后再加上好的CPU算法,你再拿去和另外两种方法比,尤其是当Sprite增加,并且Sprite还是不停在去做帧动画的时候,你试试看哪个效率高?
呵呵,不过你不用试了,我已经试过了,使用了VBPool方式的Sprite快的不止是几倍十几倍的问题!!


我想你也误解了我的意思

我是在基本相同的环境下,测试几种方法的效率,实际上就是测试
DrawPrimitive
Draw
UpdateSurface
3个函数的效率

你上面用的办法是采用了一些特殊的办法来提高了VB的效率,我同样也有办法来提高另外2个方法的效率

还有你上面除了第6点,在我的测试中前5点都是你说的方法,我并没有故意去设置什么环境,2个三角形组成的四边形,我也没有笨到使用TRIANGLELIST,我已经是使用的TLVertex Type格式,这种个是根本不用设置Viewport,也没有Z-buffer

关于第6点就是你说的,我已经讲得很清楚,就是如果把所有的顶点放到一个Stream中,其实你只调用了一次DrawPrimitive,没有可比性

我的方法是把 DrawPrimitive,Draw,UpdateSurface各调用10000次

测试是不能带有主观印象的,尽管以前一直认为IDXSprite是个鸡肋,我想是不是我的测试有问题?我同时也想这三种方式到底有什么优缺点?

欢迎大家指点

论坛:http://bbs.chaosstars.com/list.asp?boardid=61
群:3216066(网络游戏技术商务在线)

7

主题

136

帖子

136

积分

注册会员

Rank: 2

积分
136
发表于 2004-10-31 10:48:00 | 显示全部楼层

Re:D3D下几种2D游戏制作方法的比较

建议使用UV
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 20:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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