D3D的做的一个背景图片,总是比实际的模糊,有什么办法变清晰一些?

yrisxfyh 2009-10-27 05:25:48


这张图是实际运行后的效果,很是模糊,

这张是原图片..



我用的是D3DXCreateTextureFromFileEx()函数加载的纹理

另外,图像的宽和高,是用info.Width 和 info.Height获得的

我用的是线性纹理过滤

实在不知道如何达到原图的清晰效果..........????
...全文
431 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yrisxfyh 2009-10-29
  • 打赏
  • 举报
回复
哦,,明白啦...^_^
xingzhe2001 2009-10-29
  • 打赏
  • 举报
回复
考研美工素质的时候
xingzhe2001 2009-10-29
  • 打赏
  • 举报
回复
最好让美工作图的时候就是2的幂次,比如256*256,这样多余的空间还可以自己利用,你要让d3dx自动扩展的话就浪费了。
xingzhe2001 2009-10-28
  • 打赏
  • 举报
回复
只有方块在屏幕上的大小和图片大小一致的时候才有清晰的可能。
xingzhe2001 2009-10-28
  • 打赏
  • 举报
回复
那楼我能说的都说了,我只能再重复一遍了,你还是把你的代码贴出来看看,可能你哪步不对。

D3d 的 Fvf有个D3DFVF_XYZRHW的格式,表示输入顶点的x,y,z,w四个分量不会经过d3d坐标变换,也就是说你输入的坐标就是屏幕坐标,其中w=1, 一般用来画2维ui比较方便
xqhrs232 2009-10-28
  • 打赏
  • 举报
回复
关注啊!还久没学3D了.
yrisxfyh 2009-10-28
  • 打赏
  • 举报
回复
有没有别的办法啦???

假如一张640×480的图片,弄成1024×512的话,也太占空间了,
难道,这种情况,可以通过把一些诸如鼠标,小型菜单放到这一张图里,来处理????

如果是按钮控件的话,就更费事一点了,感觉有些不易扩展

这是很早的一款3DMMORPG游戏的一个资源文件:
yrisxfyh 2009-10-28
  • 打赏
  • 举报
回复
图被截断了

yrisxfyh 2009-10-28
  • 打赏
  • 举报
回复
哈哈,终于成啦! ^_^


程序中的贴图的清晰度几乎和原图一模一样!

哈哈,胡乱让我改对了.
我这里的代码就改成了这样:

// 使用了纹理的顶点结构
struct stD3DVertex
{
float x, y, z, rhw;
unsigned long color;
float tu, tv;
};

float fWidth=180.0/256;
float fHeight=390.0/512;


bool InitializeObjects()
{
// 将含有纹理坐标的数据填充到该顶点结构数组中
stD3DVertex objData[] =
{
{0, 390, 0.5, 1, D3DCOLOR_XRGB(255,255,255), 0, fHeight},
{180, 390, 0.5, 1, D3DCOLOR_XRGB(255,255,255), fWidth, fHeight},
{180, 0, 0.5, 1, D3DCOLOR_XRGB(255,255,255), fWidth, 0},

{180, 0, 0.5, 1, D3DCOLOR_XRGB(255,255,255), fWidth, 0},
{0, 0, 0.5, 1, D3DCOLOR_XRGB(255,255,255), 0, 0},
{0, 390, 0.5, 1, D3DCOLOR_XRGB(255,255,255), 0, fHeight}
};
// ,,,,

// 设置纹理采样模式(最近点采样)
//g_D3DDevice->SetSamplerState( 0, D3DSAMP_MIPFILTER, D3DTEXF_POINT);
g_D3DDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);
g_D3DDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_POINT);

// ...
}

其他地方基本没动..

谢谢啦啊...
yrisxfyh 2009-10-27
  • 打赏
  • 举报
回复
那个贴子,我一楼一楼仔细看完了,也试了,不行
你的代码,我这不支持硬件顶点运算的,会花屏

另外,我搞不懂偏移0.5像素个像素到底是+还是-,我用-吧,更模糊了,用加吧,跟没用一样--!

还有我读不知道我这个180×390的图片,到底怎么处理,
矩形4个顶点的坐标怎么填也不知道,还有,那个 rhw到底是用来啥的.... - -!
xingzhe2001 2009-10-27
  • 打赏
  • 举报
回复
看这个精华贴得讨论,有完整代码
http://topic.csdn.net/u/20090713/10/eadce5a0-9c83-46f1-b526-062d3547ab48.html

创建贴图的时候不要用任何过滤,如果贴图长宽是2的幂次的可以使用D3DXCreateTextureFromFileEx创建,否则会有拉伸。就算是600×600的贴图也要用1024×1024的文件来存储,使用时通过调整纹理坐标来显示600×600的部分。屏幕矩形的大小和贴图大小为一比一,同时屏幕坐标都要减去0.5,并且绘制时采用D3DTEXF_POINT过滤方式,就可以做到屏幕显示图片与贴图文件完全一致

我这里影响清晰的主要因素是1.点采样 2.2次幂大小的材质
我的测试里(用那个自动生成的材质),如果不偏移0.5像素,边缘会有条黑边,但是不影响清晰。
但是在我的框架的测试里,不偏移0.5像素会模糊。框架主要是用shader,而且点的坐标是通过矩阵变幻的,不是采用xyzrhw这种的。

8,324

社区成员

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

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