游戏开发论坛

 找回密码
 立即注册
搜索
查看: 10796|回复: 18

不用ID3DXSprite以及D3DFVF_XYZRHW, 如何做游戏UI?

[复制链接]

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
发表于 2009-5-5 17:33:00 | 显示全部楼层 |阅读模式
发现ID3DXSprite的功能有限, 而且速度没有DrawPrimitive快, 所以我打算用绘制3D物体的方法来绘制 2D游戏界面.

在网络上查找了一下, 上面说在FVF里添加 D3DFVF_XYZRHW 就可以了.

可是问题来了, 用 D3DFVF_XYZRHW 后, 却不能改变绘制该物体的矩阵了, 只能通过锁定顶点来改变绘制的位置. 要知道锁定顶点是不快的.

所以我想问下, 有什么好的解决办法?

最好是有什么矩阵变换的公式可以使一个物体永远贴在屏幕上, 即使摄像机移动了.
嗯, 好像这就是公告板技术吧?

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2009-5-5 20:39:00 | 显示全部楼层

Re:不用ID3DXSprite以及D3DFVF_XYZRHW, 如何做游戏UI?

XYZRHW不是不能改变物体的矩阵
而是当你绘制的时候,系统已经认定你要绘制的点已经经过了那三大矩阵变换了.
所以,你用这种方式绘制又想用矩阵的话,就得自己先用矩阵算一遍,把变换之后的结果算出来
然后绘制
就对了

8

主题

125

帖子

125

积分

注册会员

Rank: 2

积分
125
发表于 2009-5-6 00:11:00 | 显示全部楼层

Re:不用ID3DXSprite以及D3DFVF_XYZRHW, 如何做游戏UI?

ID3DXSprite其实很快的,看你会不会用啦~

8

主题

125

帖子

125

积分

注册会员

Rank: 2

积分
125
发表于 2009-5-6 00:11:00 | 显示全部楼层

Re:不用ID3DXSprite以及D3DFVF_XYZRHW, 如何做游戏UI?

用一个ID3DXSprite画出你全部的UI~

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2009-5-6 11:31:00 | 显示全部楼层

Re:不用ID3DXSprite以及D3DFVF_XYZRHW, 如何做游戏UI?

ID3DXSprite的绘制会使某些显卡的雾没掉
除非设置成公告栏方式,但是那个方式谁用谁知道 - -! 绝对恶心到爆

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
 楼主| 发表于 2009-5-6 12:16:00 | 显示全部楼层

Re:不用ID3DXSprite以及D3DFVF_XYZRHW, 如何做游戏UI?

ID3DXSprite的功能有限, 比如不能用SetRenderState来设置绘制的状态

比如我想要反色的功能, 由于ID3DXSprite无法改变混色方式, 这个功能就无法实现了.

还有, ID3DXSprite拉伸后, 纹理的颜色会变色, 这是很严重的问题.

你可以试试, 把一个10x10的纹理拉伸到1000x1000, 看看它的边上, 颜色会有点变化, 而且会模糊.
而DrawPrimitive则不会.

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-5-6 16:30:00 | 显示全部楼层

Re:不用ID3DXSprite以及D3DFVF_XYZRHW, 如何做游戏UI?

发现ID3DXSprite的功能有限, 而且速度没有DrawPrimitive快
----------------
sprite内部同样也是调用DP绘图

最好是有什么矩阵变换的公式可以使一个物体永远贴在屏幕上, 即使摄像机移动了.
嗯, 好像这就是公告板技术吧?
-----------------
直接使用归一化屏幕坐标就可以了,完全不用矩阵,和摄像机没有关系,和billboard也不一样。

ID3DXSprite的绘制会使某些显卡的雾没掉
-------------------------
ID3DXSprite内部会改变渲染状态,比如depth test,fog enable等等,只需要在sprite之后修改回来就可以

ID3DXSprite的功能有限, 比如不能用SetRenderState来设置绘制的状态
------------------------
begin和end之间本来就不应该出现状态改变,当然,你还是可以动过device在draw之间改变渲染状态,只是会影响渲染效率而已

还有, ID3DXSprite拉伸后, 纹理的颜色会变色, 这是很严重的问题.
------------------------
用sprite渲染的物体本来就不应该拉伸,就像在22寸的液晶上跑星际一样,画面同样很糟。如果你的UI有多种尺寸,那么应该对每种尺寸制作纹理,或者使用类似windows控件的渲染方法。


如果 觉得dx的sprite不好用,自己用shader实现一个sprite system也不是很难,而且可以方便的扩展各种特效

14

主题

59

帖子

59

积分

注册会员

Rank: 2

积分
59
发表于 2009-5-6 17:02:00 | 显示全部楼层

Re:不用ID3DXSprite以及D3DFVF_XYZRHW, 如何做游戏UI?

直接用shader写ui,我就是用的shader做ui,还可以添加乱七八遭的效果,非常灵活!

59

主题

404

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
 楼主| 发表于 2009-5-6 18:19:00 | 显示全部楼层

Re:不用ID3DXSprite以及D3DFVF_XYZRHW, 如何做游戏UI?

直接用shader写ui?

哦, 这个说法还是头一次见到....

用像素着色器么? 能不能给一个简单的代码来看看? 毕竟没做过, 不知道具体该怎么写好?

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2009-5-7 10:01:00 | 显示全部楼层

Re:不用ID3DXSprite以及D3DFVF_XYZRHW, 如何做游戏UI?

ID3DXSprite的绘制会使某些显卡的雾没掉
-------------------------
ID3DXSprite内部会改变渲染状态,比如depth test,fog enable等等,只需要在sprite之后修改回来就可以


一些显卡会一些不会,我见过的X300显卡都会把雾弄没
所以不通用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 01:00

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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