游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3362|回复: 6

请教,关于ID3DXSPRITE的使用

[复制链接]

6

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
QQ
发表于 2007-4-23 17:58:00 | 显示全部楼层 |阅读模式
使用DDraw的“关键色”技术,可以在窗口上显示镂空的图片,也就是为DDraw的表面设定了需要屏蔽的颜色值。

我想知道的是,在D3D中有没有与DDraw类似的“关键色”技术,使得在三维场景中显示一张镂空的图片?

ID3DXSPRITE可以在窗口界面上显示图片,它能不能在三维场景中显示图片?

另外,ID3DXSPRITE提供的函数Draw()里面,其参数D3DXCOLOR只是设置R,G,B的亮度值,并没有实现"关键色"技术,
是不是这样?

1367

主题

1993

帖子

2118

积分

金牌会员

Rank: 6Rank: 6

积分
2118
发表于 2007-4-23 18:07:00 | 显示全部楼层

Re:请教,关于ID3DXSPRITE的使用

6

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
QQ
 楼主| 发表于 2007-4-23 18:14:00 | 显示全部楼层

Re:请教,关于ID3DXSPRITE的使用

感谢楼上.
还有,ID3DXSPRITE可以在窗口界面上显示图片,它能不能在三维场景中显示图片?

12

主题

50

帖子

70

积分

注册会员

Rank: 2

积分
70
发表于 2007-4-24 09:49:00 | 显示全部楼层

Re:请教,关于ID3DXSPRITE的使用

关键色这种技术在现在的d3d里面基本不用,因为纹理里面都可以包含alpha值,效果比关键色要好。
ID3DXSPRITE这个接口我只用来显示过2d图片,三维里面怎样你可以自己实验一下,好像有个SetTransform方法,可以传入一个4*4矩阵,我只用来放大缩小平移,没试过别的。
个人认为这个接口不是很好用,纹理的读取如果参数不当,渲染的大小可能会有问题。此外在渲染一连串纹理时有的设备状态无法立刻被变更,例如Alpha混合方法(关系到是半透明混合还是饱和混合),d3d似乎是把sprite渲染的东西做成了一个流水线,只有end前最后一次设置才有用。因此有些时候你只能用多个Spr->End和Spr->Begin。

6

主题

73

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2007-4-24 12:52:00 | 显示全部楼层

Re:请教,关于ID3DXSPRITE的使用

用png格式的纹理吧。你可以用PhotoShop新建一张透明背景的png图片,然后把想要镂空的东西画在png图片上,再用ID3DXSprite接口显示。什么都不用设置就可以实现关键色效果。。。
另外,SetTransform()方法的参数是2D屏幕空间的变换矩阵,而不是3D空间的变换矩阵,因此要用D3DXMatrixTransformation2D()来获得,不要用D3DXMatrixTransformation()。

6

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
QQ
 楼主| 发表于 2007-4-24 15:41:00 | 显示全部楼层

Re:请教,关于ID3DXSPRITE的使用

感谢4楼和5楼的朋友. 两位的回帖对我很有帮助.

我见到了一个演示程序,它用了支持透明背景颜色的TGA图片格式(想必png格式也是支持透明背景颜色),不必设置什么关键色,就实现了镂空效果.
我想,在三维空间中,先定义四个顶点并将其连接成矩形,再将TGA格式的纹理贴到矩形上,就显示出镂空图片了吧.

17

主题

42

帖子

48

积分

注册会员

Rank: 2

积分
48
QQ
发表于 2007-4-25 01:35:00 | 显示全部楼层

Re:请教,关于ID3DXSPRITE的使用

用D3DX库读取图片的时候可以设置色彩关键字,不过仅此而已了,别指望纹理创建了后还能更改关键字,除非手动刷新纹理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 17:03

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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