DirectX:怎样设置Texture才能使其效果(清晰度,大小)和原始的图像一样?

birdx 2004-05-05 11:37:13
我要在屏幕坐标600*600的矩形下贴一张600*600的图片,
我是用D3DXCreateTextureFromFileEx函数创建的Texture, 当我设置filter为D3DX_DEFAULT时,大小正好,图像模糊,我查了查,好像是因为它用2*2texel的平均值.
我又设置filter为D3DX_FILTER_NONE,这时屏幕中的图像不是完整的原始图像,而只是把原始图像的左上角(大约256*256)拉伸画出来了,我换了几张图片都是这个样子.
四个角Vertex的纹理坐标是(0.0, 0.0), (1.0, 0.0), (0.0, 1.0), (1.0, 1.0),没什么问题啊, 实在搞不懂为什么显示的不是整张图片.
设filter为D3DX_FILTER_POINT大小是正好,可图像失真.
我看sample DXTex显示的效果挺好,可源代码我也没看出来有什么特别的啊.
大家是怎么做的啊?
...全文
353 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
birdx 2004-05-08
  • 打赏
  • 举报
回复
好 我知道了 谢谢大家!
kofightas 2004-05-08
  • 打赏
  • 举报
回复
先把文件装载到内存里的虚拟位图就行了,不过没什么必要。
纹理图片尽量都做成方块的吧,可以把大小图片往一个文件里拼。
birdx 2004-05-07
  • 打赏
  • 举报
回复
谢谢楼上的解说,原来D3DXCreateTextureFromFileEx还有这个限制,
可一般的图片不会正好是2的幂次的长宽啊,不会把每张图片都改成那样吧,
而且,在sample DXTex是可以读任何尺寸的图片的,效果也挺好.
它是怎么做的啊? 难道它把读进来的图片扩充,然后再裁减?
birdx 2004-05-06
  • 打赏
  • 举报
回复
楼上说的我也试过了,结果和D3DFVF_XYZ的一样.我用的是正交变换,所以顶点用的也是屏幕坐标.
gddsky 2004-05-06
  • 打赏
  • 举报
回复
IDirect3DDevice9::SetFVF
添加: D3DFVF_XYZRHW
使用平面的方便来渲染(左上角就是(0,0), 右面下角就是你的分辨率).
cproom 2004-05-06
  • 打赏
  • 举报
回复
创建贴图的时候不要用任何过滤,如果贴图长宽是2的幂次的可以使用D3DXCreateTextureFromFileEx创建,否则会有拉伸。就算是600×600的贴图也要用1024×1024的文件来存储,使用时通过调整纹理坐标来显示600×600的部分。屏幕矩形的大小和贴图大小为一比一,同时屏幕坐标都要减去0.5,并且绘制时采用D3DTEXF_POINT过滤方式,就可以做到屏幕显示图片与贴图文件完全一致

8,306

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧