游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2622|回复: 4

SetSamplerState导致边缘出现不期望的运算

[复制链接]

2

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2007-11-2 13:20:00 | 显示全部楼层 |阅读模式
我使用以下方法平滑纹理缩放
    m_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
    m_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);

但是在纹理的最左和最上一行,好像和RGBA(0,0,0,0)进行了叠加运算,以致于出现两条带Alpha效果的线
还有,如果取图片的一部分作纹理,也会把所取矩形的左边和上边多取一行作运算,也会出现多余的效果

总的来说,就是如果取(left,top,right,bottom),那么实际上会是(left-1,top-1,right,bottom)在进行运算,
有时就会有不需要的线条出现

有没有什么好的解决办法呢,为这个问题都烦死了 [em5],设为D3DTEXF_POINT倒是不会有这个问题,可效果太差

在此先谢谢了

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
发表于 2007-11-3 01:46:00 | 显示全部楼层

Re: SetSamplerState导致边缘出现不期望的运算

范围取 left - 0.5f, top - 0.5f, right - 0.5f, bottom - 0.5f
再试试看

2

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2007-11-3 10:23:00 | 显示全部楼层

Re: SetSamplerState导致边缘出现不期望的运算

( left - 0.5, top - 0.5, right - 0.5, bottom - 0.5 ),两条线更清晰了,呵呵

我又试了( left + 0.5, top + 0.5, right - 0.5, bottom - 0.5 )
可以达到我想要的效果,终于不会多出两条线来了

感谢 TaoshaGod 提供思路

2

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2007-11-3 15:24:00 | 显示全部楼层

Re: SetSamplerState导致边缘出现不期望的运算

我上面的提问有点问题
应该是(left-1,top-1,right+1,bottom+1)都有可能进行运算,所以四个边缘都可能出现不期望的线条
范围取( left + 0.5, top + 0.5, right - 0.5, bottom - 0.5 )可以避免线条,不过是通过缩小纹理范围实现的,纹理有放大的现象
如果手动修改纹理,即在四周复制一圈最边缘像素,好像太麻烦了
不知道大家有没有遇到过这个问题和如何解决的

1

主题

149

帖子

149

积分

注册会员

Rank: 2

积分
149
QQ
发表于 2007-11-3 17:21:00 | 显示全部楼层

Re:SetSamplerState导致边缘出现不期望的运算

有时候放大一圈也不够,譬如设置了D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
需用5圈以上能获得比较好的效果...
一般来说可以自己写一个工具,对于每个有需要的模型,修改其贴图,同时得修改每个顶点的uv
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-19 04:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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