0
我正在嘗試在我的遊戲中爲水製作畸變着色器。我有屏幕的rendertarget和水面罩rendertarget,我試圖簡單地捕捉面具下的像素,但我無法得到它的工作。當我通過紋理時,就好像它們都是完全透明的。我可能做錯了什麼?Monogame像素着色器 - 紋理作爲完全透明傳遞
着色器:
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通道的格式) –
也有你已經嘗試做更簡單的事情,比如渲染一個單一的精靈到渲染目標,然後在屏幕上顯示這個渲染目標,檢查至少這是否工作? –