游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3769|回复: 9

[请教]用d3d绘画2d的东西3种选择的比较

[复制链接]

12

主题

76

帖子

76

积分

注册会员

Rank: 2

积分
76
发表于 2006-6-16 17:58:00 | 显示全部楼层 |阅读模式
请教各位,用d3d绘画2d的东西,是用surface(IDirect3DSurface9)好呢,还是用Sprite(ID3DXSprite)+texture好呢,还是用DrawPrimitive 好?

12

主题

76

帖子

76

积分

注册会员

Rank: 2

积分
76
 楼主| 发表于 2006-6-16 18:05:00 | 显示全部楼层

Re: [请教]用d3d绘画2d的东西3种选择的比较

请教各位,用d3d绘画2d的东西,是用surface(IDirect3DSurface9)好呢,还是用Sprite(ID3DXSprite)+texture好呢,还是用顶点+DrawPrimitive 好? [em24]

17

主题

258

帖子

264

积分

中级会员

Rank: 3Rank: 3

积分
264
发表于 2006-6-16 18:45:00 | 显示全部楼层

Re:[请教]用d3d绘画2d的东西3种选择的比较

用Sprite(D3DXSprite)实现起来比较简单,并且效率也不会非常的差,非常适合初学者使用。
用surface和以前的ddraw差不多,但是好象用的人不是很多的样子。
然后就是用顶点+DrawPrimitive了,
关于这个嘛,我以前在gamedev上看过有强人用过,当时是用来实现粒子效果的,
然后用的是UserVertex,也就是用户自定义顶点,这样每次改变顶点坐标和纹理坐标就不用
lock和unlock了,效率还可以,但是如果每次绘制达到调用drawprimitive  1000次以上,
效率严重下降.

6

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2006-6-17 11:06:00 | 显示全部楼层

Re:[请教]用d3d绘画2d的东西3种选择的比较

“每次改变顶点坐标和纹理坐标就不用lock和unlock了”??
这是怎么实现的啊??

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-6-17 15:24:00 | 显示全部楼层

Re:[请教]用d3d绘画2d的东西3种选择的比较

用世界矩阵和纹理坐标变换矩阵

12

主题

76

帖子

76

积分

注册会员

Rank: 2

积分
76
 楼主| 发表于 2006-6-27 22:50:00 | 显示全部楼层

Re:[请教]用d3d绘画2d的东西3种选择的比较

让我发表一下我的最新看法,不知对不对,还请高手多多指教。
1、VB DrawPrimitive
2、ID3DXSprite
3、IDirect3DSurface9
三种方法都绘画一样多的次数,这样可能是ID3DXSprite 效率最高,但是一般在程序中IDirect3DSurface9 只会绘画一个大表面,而程序中会把不同的小表面绘画到一个大表面了。因此最后render的时候,只会绘画一个大表面。因此render的效率是IDirect3DSurface9高了n倍,而VB模拟和ID3DXSprite在每次渲染的时候,要不断的绘画小三角和小rect,才能得到最终的绘制效果。因此IDirect3DSurface9 在渲染的时候只是简单的把大表面present出来,而VB模拟和ID3DXSprite要花n个小rect,自然是IDirect3DSurface9 块很多倍啦。

12

主题

76

帖子

76

积分

注册会员

Rank: 2

积分
76
 楼主| 发表于 2006-6-28 13:59:00 | 显示全部楼层

Re:[请教]用d3d绘画2d的东西3种选择的比较

我最后的看法是:当在绘制每时每刻都在变化的场景,如3D场景,vb+DrawPrimitive 比较适合,在绘制每时每刻都在变化的2d人物动画和2d横板地图,ID3DXSprite比较好,在绘画一些可能变化比较少的画面,如1秒到几分钟才变化一次的画面,如棋牌画面,则IDirect3DSurface9性能很出众。有同意的顶啊,不同意的也要顶,并且说出理由。我等着瞧哦。

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2006-6-28 14:15:00 | 显示全部楼层

Re:[请教]用d3d绘画2d的东西3种选择的比较

楼上的是错的。一个DrawPrimitive就够了。D3DXSprite就是给轻量级用户使用的,他的内部实现就是DrawPrimitive,他作了一些优化,自己优化完全可以超越他的效率。

surface实际是内存操作,无法利用硬件特征,是很落后的方式,几乎可以不用考虑。

12

主题

76

帖子

76

积分

注册会员

Rank: 2

积分
76
 楼主| 发表于 2006-6-28 14:47:00 | 显示全部楼层

Re:[请教]用d3d绘画2d的东西3种选择的比较

你不觉得在每一次渲染中把一个内存表面直接present到屏幕 会比在每一次渲染中不断的Draw多个带texture的小三角形要快吗? [em24]

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2006-6-28 18:42:00 | 显示全部楼层

Re:[请教]用d3d绘画2d的东西3种选择的比较

不觉得,使用DX要求的是高性能画面,每桢都重复构成它是很正常的事。
如果不需要这个,用GDI好了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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