【问题标题】:Super blurry textures - XNA超级模糊的纹理 - XNA
【发布时间】:2011-12-01 07:57:57
【问题描述】:

当我近距离观察我的纹理时,我的纹理似乎变得非常模糊。我正在创建一个类似于我的世界的地形东西,我希望纹理是像素化的 - 就像它是制作的,而不是 XNA 尝试为我平滑它。

它的显示方式如下:http://s1100.photobucket.com/albums/g420/darestium/?action=view&current=bluryminecraftterrain.png

任何建议都会非常受欢迎。

【问题讨论】:

    标签: c# xna textures


    【解决方案1】:

    这与抗锯齿无关......它与硬件如何对纹理中的纹素进行采样有关。 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。

    【讨论】:

    • 过滤器不应该是最近的而不是线性的吗?
    • @FelixK。你是对的,我做了那个更正。该过滤器实际上称为Point,与最近邻过滤器相同。
    • 好吧,第一行似乎根本没有做任何事情,我还不知道如何编写效果文件。所以后一种意见对我来说是封闭的:)。有任何想法吗? (请注意,我确实启用了我正在渲染的纹理的 mipmapping)
    • 您使用的是BasicEffect,对吗?您是否在应用效果通道之前立即设置 GraphicsDevice.SamplerStates[0]?我可能应该提到的一个问题是,使用 SpriteBatch 会抓取 SamplerState 0 和 resets some states to it。您应该在渲染网格之前再次切换采样器状态。
    • 不,我使用的是 riemers 效果文件,是的,它在我开始渲染顶点之前直接执行分配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2010-12-18
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多