【问题标题】:Monogame pixel shader - Texture passing as completely transparentMonogame 像素着色器 - 纹理传递为完全透明
【发布时间】:2016-06-09 09:12:43
【问题描述】:

我正在尝试在我的游戏中为水制作一个失真着色器。我有屏幕的渲染目标和水蒙版渲染目标,我试图简单地捕获蒙版下方的像素,但我无法让它工作。当我通过纹理时,就好像它们都是完全透明的。我可能做错了什么?

着色器:

texture Screen;
texture Mask;
float2 Offset;

sampler ScreenSampler = sampler_state
{
      Texture = <Screen>;
};

sampler MaskSampler = sampler_state
{
      Texture = <Mask>;
};

float4 PixelShaderFunction(float2 texCoord: TEXCOORD0) : COLOR
{
    float4 mask = tex2D(MaskSampler, texCoord);
    float4 color = tex2D(ScreenSampler, texCoord + Offset);

    if (mask.a > 0)
    {
        return color;
    }

    return mask;
}

technique Technique0
{
    pass Pass0
    {
        PixelShader = compile ps_4_0 PixelShaderFunction();
    }
}

渲染目标:

Doldrums.Game.Graphics.GraphicsDevice.SetRenderTarget(renderTargetDistortion);
Doldrums.Game.Graphics.GraphicsDevice.Clear(Color.Transparent);

waterEffect.Parameters["Screen"].SetValue(Doldrums.RenderTarget);
waterEffect.Parameters["Mask"].SetValue(renderTargetWater);
waterEffect.Parameters["Offset"].SetValue(Doldrums.Camera.ToScreen(renderTargetPosition));

sprites.Begin(SpriteSortMode.Deferred, null, null, null, null, waterEffect);
sprites.Draw(renderTargetWater, Vector2.Zero, Color.White);
sprites.End();

最后,渲染渲染目标:

sprites.Draw(renderTargetDistortion, renderTargetPosition, Color.White);

【问题讨论】:

  • 能否添加用于创建渲染目标的代码(也许您选择了没有 Alpha 通道的格式)
  • 你是否已经尝试过做一些更简单的事情,比如将单个精灵渲染到渲染目标,然后在屏幕上显示这个渲染目标以检查至少这是否有效?

标签: graphics directx shader monogame hlsl


【解决方案1】:

我在开发过程中使用 monogame 时遇到了完全相同的“问题”。这里的问题很容易解决,改一下:

sprites.Begin(**SpriteSortMode.Deferred**, null, null, null, null, waterEffect);
sprites.Draw(renderTargetWater, Vector2.Zero, Color.White);
sprites.End();

换成这样的另一种模式:

sprites.Begin(**SpriteSortMode.Immediate**, null, null, null, null, waterEffect);
sprites.Draw(renderTargetWater, Vector2.Zero, Color.White);
sprites.End();

玩得开心:)

【讨论】:

    猜你喜欢
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多