我有一个 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。
另一个了解 hlsl 内在函数的好链接。
解决
根本不是 HLSL 问题!对不起大家。我似乎问了很多无法回答的问题。Ogre 覆盖了上述设置。这是固定的;
Ogre::MaterialManager::getSingleton().setDefaultTextureFiltering(Ogre::FO_NONE , Ogre::FO_NONE, Ogre::FO_NONE);