幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 5761|回复: 5

[游戏编程] [求助]D3D中贴图的问题

[复制链接]

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2006-8-13 23:19:27 | 显示全部楼层 |阅读模式
在学着用D3D9.0c的那个D3DXSPRITE来贴一个2D的图
和在面片上直接画纹理不一样,是用SetRect()来建立了一个矩形区域,
然后使用D3DXSPRITE在这个区域中画上由DIRECT3DTEXTURE载入的纹理.
该矩形的大小,以及程序client的大小,都设定为图片的同等大小,在实际显示的时候,
怎么会出现如图所示的问题呢?
请看贴出来的图,明显和原图不一样,好像是被放大裁剪了一样.不但缺了四边,而且模糊,不清晰.

但是在
g_pSprite->Begin(D3DXSPRITE_DONOTMODIFY_RENDERSTATE) ;
g_pSprite->Draw(g_pTexture, &rct, NULL, NULL, 0xffffffff);
g_pSprite->End();
这个过程里面,我并没有用到任何缩放,旋转图形的参数.....
え~え~お!!!
回复

使用道具 举报

50

主题

994

帖子

6699

积分

管理员

爱干啥干啥!

Rank: 9Rank: 9Rank: 9

积分
6699
发表于 2006-8-15 01:07:25 | 显示全部楼层
貌似你要设置合适的观察矩阵,世界矩阵,以及工程矩阵。
或者设置合适的缩放矩阵……

你的源图形应该和屏幕分辨率不同吧?比如你的图片是800*600的而屏幕分辨率是1024*768的,那么你直接调用D3DXSprite的Draw,相当于把这副图片伸拉到1024*768大小然后再截取那块Rect的图像显示出来,所以就变形了。
至于会模糊,那时因为开启了缩放时的反走样处理……关了的话就不会模糊,成锯齿了=。=

如果懒得设置缩放矩阵,可以试试把图片做成屏幕分辨率一样大小。

PS:是Tony的画风呢=v=

“放下屠刀,立地成佛” 故应先杀生,然后再成佛。

(\\_/) (-_-) ()+() this is bunny priest.
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
 楼主| 发表于 2006-8-15 09:02:35 | 显示全部楼层
感激不尽
果然是图片的尺寸问题,d3d的纹理尺寸最好是2的n次幂...
改成256*256的图片后就正常了.

ps.做试验的时候,随手拿的tony图片做白老鼠.
------------------
另一个解决办法,用D3DXCreateTextureFromFileEx来载入纹理,
设置一下MIP映射纹理的滤镜就可以使用任意尺寸的纹理了.
局限在2的n幂上,确实是太不方便.
但是这样做不知道会不会造成在不支持任意尺寸纹理的显卡上,无法正常显示.
え~え~お!!!
回复 支持 反对

使用道具 举报

50

主题

994

帖子

6699

积分

管理员

爱干啥干啥!

Rank: 9Rank: 9Rank: 9

积分
6699
发表于 2006-8-16 13:27:31 | 显示全部楼层
哦,原来是因为这个……非2的整数次幂。貌似我说的不太搭界……不过如果你写Render to Texture的时候应该会遇到这样的事情=.=

如果显卡不支持任意尺寸的纹理……我猜DX会作出处理的吧,拼接一下?-.-
实在不行只好在运行之前检测一下显卡是否支持了,不知有没有描述这个东西的cap。感觉好麻烦,还有这种古典的显卡存在么^_^bbb

“放下屠刀,立地成佛” 故应先杀生,然后再成佛。

(\\_/) (-_-) ()+() this is bunny priest.
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
 楼主| 发表于 2006-8-16 14:40:03 | 显示全部楼层
但是玩家的硬件情况不是我们所能控制的,可能会有这样那样的问题存在,
所以我想,还是全部统一用256*256及其以下的尺寸好了.(voodoo2那种古董都能支持到256*256)
大的图就采用拼接的办法.反正最后还是要做地图编辑器的.
え~え~お!!!
回复 支持 反对

使用道具 举报

125

主题

288

帖子

1387

积分

⑥精研

积分
1387
发表于 2006-9-18 20:11:13 | 显示全部楼层
好像从GEFORCE开始就支持2048*2048以上的纹理了,但任意尺寸纹理(不受2次幂限制)应该是从GF3或GF4开始支持的(因为DX7貌似不支持这个)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-3-29 07:23 , Processed in 0.020897 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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