游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4663|回复: 8

用dx精灵在d3d中做2d贴图的问题

[复制链接]

32

主题

377

帖子

378

积分

中级会员

Rank: 3Rank: 3

积分
378
发表于 2007-9-22 10:07:00 | 显示全部楼层 |阅读模式
最近在d3d中做ui,我使用的是dx精灵来绘制2d图像。遇几个不爽的问题,想来问下高手:

1.在d3d中作2d图像,很慢。我在我的6600gt上测试只有700贞,在3g cpu+集成显卡机器上只有

100多贞,在althon1800+gf2上面,就只有20来贞。我对这个问题的认识是:d3d统一走的3d渲染

管线,包括2d图片也作为纹理映射到后台缓冲中。而2d图像我采用的都是极大的纹理(如1024×1024),

因此就非常慢了。

2.我发现,相当的老显卡(比如gf4 mx)都不支持任意长宽的纹理。它们要求纹理的长宽是2的n次方大小。

如果我使用任意长宽纹理,在这些老显卡上面运行将获得花屏的效果。这让我很郁闷。为了老显卡,我不

得不将所有2d贴图都做成2n次方长宽(比如1024×1024)。但是,这样太不方便了。特别是在定制按钮,

输入框等UI的时候,长宽的限制太死。

以上问题,我想请教一下,到底是我使用dx精灵的方法不当,还是d3d本身制作2d图像有限制。各位采用的什么

方法请指点。 [em7] [em7] [em7] [em7] [em7] [em7] [em7] [em7] [em7]

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2007-9-22 10:27:00 | 显示全部楼层

Re:用dx精灵在d3d中做2d贴图的问题

你的界面怎么全都是那么大的图啊?用D3D做本来就会有这样的问题,这样超大的纹理会非常慢的,就算3DMARK05也只敢用一张1024*1024去做Shadow
不支持2^n分辨率的卡,只能把贴图多次分割,分块画,比如说一个515*515的纹理,先fit成512+2+1的形式,分成512*512、2*2、1*1的小块来画

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2007-9-22 10:29:00 | 显示全部楼层

Re:用dx精灵在d3d中做2d贴图的问题

2次幂限制属于硬件限制,即使显卡支持非2次幂贴图,性能也不会比2次幂贴图好。

D3DXSprite属于将每张图片都做为一张贴图的处理。

而2D游戏在3D API中应用的话,属于大量频繁更换贴图(比3D游戏要严重许多)。虽然画的三角形比3D游戏少很多,但使用的单一绘图指令确十分频繁(3D游戏则是大量使用批量绘图指令)。而大量频繁更换贴图,以及大量使用单一绘图指令均会严重影响显卡的效能。

32

主题

377

帖子

378

积分

中级会员

Rank: 3Rank: 3

积分
378
 楼主| 发表于 2007-9-22 10:39:00 | 显示全部楼层

Re: Re:用dx精灵在d3d中做2d贴图的问题

jk20012001: Re:用dx精灵在d3d中做2d贴图的问题

你的界面怎么全都是那么大的图啊?用D3D做本来就会有这样的问题,这样超大的纹理会非常慢的,就算3DMARK05也...


你说这样分啊……但是就算515×515变成了512×512也大得很哦,就是说慢是必须的了哦?另外,我做table的滚动条因为会自动放缩,你说怎么办呢?比如本来256高,现在要放缩高度为256×0。7=179,那我是把这个高度处理成128吗?还是说我应该规定好table页面的大小必须与table大小保持2的倍数关系? [em3] [em3] [em3] [em3] [em3] [em3] [em3] [em3] [em3]

32

主题

377

帖子

378

积分

中级会员

Rank: 3Rank: 3

积分
378
 楼主| 发表于 2007-9-22 10:41:00 | 显示全部楼层

Re: Re:用dx精灵在d3d中做2d贴图的问题

hyzboy: Re:用dx精灵在d3d中做2d贴图的问题

2次幂限制属于硬件限制,即使显卡支持非2次幂贴图,性能也不会比2次幂贴图好。

D3DXSprite属于将每张图片...


换句话说,没得救? [em4] [em4] [em4] [em4] [em4] [em4] [em4]

15

主题

2093

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

积分
2093
发表于 2007-9-22 15:14:00 | 显示全部楼层

Re:用dx精灵在d3d中做2d贴图的问题

不用Sprite,用三角形来画贴图

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2007-9-22 20:37:00 | 显示全部楼层

Re:用dx精灵在d3d中做2d贴图的问题

基本上是没救!不然3D API加速的2D游戏或引擎早已满天飞了。

楼上所说的拆分为2次幂方式虽可行,但当图片较多时。会产生频繁更换贴图现像,同样会极大的降低显卡效能。此种实现的典型是Torque Game Builder。

虽有解决办法,但非常复杂。

32

主题

377

帖子

378

积分

中级会员

Rank: 3Rank: 3

积分
378
 楼主| 发表于 2007-9-24 11:15:00 | 显示全部楼层

Re: Re:用dx精灵在d3d中做2d贴图的问题

psic: Re:用dx精灵在d3d中做2d贴图的问题

不用Sprite,用三角形来画贴图


是不是说,当前游戏普遍应用的方法(比如wow,war3)均是采用billboard,而非dx精灵

来绘制UI?

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2007-9-24 19:55:00 | 显示全部楼层

Re:用dx精灵在d3d中做2d贴图的问题

如果仅仅是UI。可以使用将图片拆解为2次幂的方式来进行,因为贴图量还是没有上去。

如果是做2D游戏则不行,因为这样量上去了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-21 10:39

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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