【发布时间】:2010-04-23 15:59:56
【问题描述】:
我有一个 tex2D 采样器,我只想精确地返回纹理上存在的那些颜色。我使用的是 Shader Model 3,所以不能使用 load。
如果纹素重叠多种颜色,我希望它选择一种并让整个纹素成为那种颜色。
我认为要做到这一点,我想禁用 mipmapping,或者至少禁用 mips 的三线性过滤。
sampler2D gColourmapSampler : register(s0) = sampler_state {
Texture = <gColourmapTexture>; //Defined above
MinFilter = None; //Controls sampling. None, Linear, or Point.
MagFilter = None; //Controls sampling. None, Linear, or Point.
MipFilter = None; //Controls how the mips are generated. None, Linear, or Point.
//...
};
我的问题是我不太了解 Min/Mag/Mip 过滤,所以我不确定我需要将它们设置成什么组合,或者这是否是我所追求的。
完整纹理映射到我的球体后相关区域的截图;
抗锯齿/混合/过滤伪影清晰可见;我不要这些。
MSDN有话要说;
D3DSAMP_MAGFILTER:D3DTEXTUREFILTERTYPE 类型的放大过滤器
D3DSAMP_MINFILTER:D3DTEXTUREFILTERTYPE 类型的缩小过滤器。
D3DSAMP_MIPFILTER:在缩小期间使用的 Mipmap 过滤器。见D3DTEXTUREFILTERTYPE。
D3DTEXF_NONE:与 D3DSAMP_MIPFILTER 一起使用时,禁用 mipmapping。
understanding hlsl intrinsics 上的另一个好链接。
已解决
根本不是 HLSL 问题!对不起大家。我似乎问了很多无法回答的问题。 Ogre 覆盖了上述设置。这已修复;
Ogre::MaterialManager::getSingleton().setDefaultTextureFiltering(Ogre::FO_NONE , Ogre::FO_NONE, Ogre::FO_NONE);
【问题讨论】: