【发布时间】:2011-12-01 07:57:57
【问题描述】:
当我近距离观察我的纹理时,我的纹理似乎变得非常模糊。我正在创建一个类似于我的世界的地形东西,我希望纹理是像素化的 - 就像它是制作的,而不是 XNA 尝试为我平滑它。
它的显示方式如下:http://s1100.photobucket.com/albums/g420/darestium/?action=view¤t=bluryminecraftterrain.png
任何建议都会非常受欢迎。
【问题讨论】:
当我近距离观察我的纹理时,我的纹理似乎变得非常模糊。我正在创建一个类似于我的世界的地形东西,我希望纹理是像素化的 - 就像它是制作的,而不是 XNA 尝试为我平滑它。
它的显示方式如下:http://s1100.photobucket.com/albums/g420/darestium/?action=view¤t=bluryminecraftterrain.png
任何建议都会非常受欢迎。
【问题讨论】:
这与抗锯齿无关......它与硬件如何对纹理中的纹素进行采样有关。 XNA 中的默认过滤器通常是线性的,但要获得那些看起来“块状”的纹理,您必须使用点。
在 C# 中,您可以将任何 SamplerStates 设置为使用 PointWrap。这是点过滤与 UV 包裹的组合。
// any state index from 0 to 15, textures usually take 0 first
GraphicsDevice.SamplerStates[0] = SamplerState.PointWrap;
但是,它必须与 SamplerState 分配给相同的寄存器。例如。寄存器 s0 通常是 SamplerStates[0]。 或者,您可以在着色器上强制采样器状态,并在那里设置您的寄存器:
sampler2D textureSampler : register(s0) = sampler_state
{
Texture = <Texture>;
MipFilter = Point;
MagFilter = Point;
MinFilter = Point;
AddressU = Wrap;
AddressV = Wrap;
};
您也可以将 MipFilter 设置为 None 来强制关闭 mipmapping。
【讨论】: