XNA中的alpha混合问题
嗨 我有一个背景和两个png精灵 我想使用XNA 3.1使用提供的背景和精灵制作 我做错了什么,因为我只是在你注意到的时候得到的,这不是我想要的效果XNA中的alpha混合问题,xna,Xna,嗨 我有一个背景和两个png精灵 我想使用XNA 3.1使用提供的背景和精灵制作 我做错了什么,因为我只是在你注意到的时候得到的,这不是我想要的效果 在xna3.1中使用alpha混合,用几行代码就可以达到这个效果吗?一个实际的例子会非常好 首先,渲染包含要对纹理A透明的形状的纹理。 包含形状的纹理应该包含透明背景上的黑色形状——使用Photoshop等图像编辑软件可以轻松构建 然后使用效果(HLSL着色器)在场景顶部绘制纹理,该效果可执行以下操作: output = float4(0, 0,
在xna3.1中使用alpha混合,用几行代码就可以达到这个效果吗?一个实际的例子会非常好 首先,渲染包含要对纹理A透明的形状的纹理。 包含形状的纹理应该包含透明背景上的黑色形状——使用Photoshop等图像编辑软件可以轻松构建 然后使用效果(HLSL着色器)在场景顶部绘制纹理,该效果可执行以下操作:
output = float4(0, 0, 0, A.r);
在A较暗的位置,有效地降低输出图像的alpha
图像将有清晰的部分,你在一张纸上画出你的形状,其他地方都是黑色的
以下是着色器代码的详细信息:
sampler TextureSampler : register(s0);
float4 PS(float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0
{
float4 Color = tex2D(TextureSampler, texCoord);
Color = float4(0, 0, 0, Color.r);
return Color;
}
technique Vicky
{
pass P0
{
PixelShader = compile ps_2_0 PS();
}
}
首先,渲染包含要对纹理A透明的形状的纹理。 包含形状的纹理应该包含透明背景上的黑色形状——使用Photoshop等图像编辑软件可以轻松构建 然后使用效果(HLSL着色器)在场景顶部绘制纹理,该效果可执行以下操作:
output = float4(0, 0, 0, A.r);
在A较暗的位置,有效地降低输出图像的alpha
图像将有清晰的部分,你在一张纸上画出你的形状,其他地方都是黑色的
以下是着色器代码的详细信息:
sampler TextureSampler : register(s0);
float4 PS(float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0
{
float4 Color = tex2D(TextureSampler, texCoord);
Color = float4(0, 0, 0, Color.r);
return Color;
}
technique Vicky
{
pass P0
{
PixelShader = compile ps_2_0 PS();
}
}
如果您想要一个没有着色器的解决方案 您首先需要将战争之雾纹理设置为黑色,透明部分设置为白色
如果您想要一个没有着色器的解决方案 您首先需要将战争之雾纹理设置为黑色,透明部分设置为白色
所以,我需要用纹理2D来代替?不,形状应该是黑色的,背景是白色的。只需反转白色形状的图像。从技术上讲,您可以使用链接的第一个图像,但必须执行
output.rgb=float4(0,0,0,1-A.r)代码>改为在着色器中。好的,那么,最好使用我在渲染目标中绘制所有“灯光”形状。这可以吗?而且要清楚,你不能只在场景顶部绘制形状。你必须先将它们绘制到一个纹理上,然后根据我的回答,使用一个使红色通道成为alpha通道的着色器在场景顶部绘制该纹理。@Vicky:尝试将你的SpriteBlendMode
设置为Additional
,因此,我需要像这样使用Texture2D?不,形状应该是黑色的,背景是白色的。只需反转白色形状的图像。从技术上讲,您可以使用链接的第一个图像,但必须执行output.rgb=float4(0,0,0,1-A.r)代码>改为在着色器中。好的,那么,最好使用我在渲染目标中绘制所有“灯光”形状。这可以吗?而且要清楚,你不能只在场景顶部绘制形状。按照我的回答,你必须先将它们绘制到纹理上,然后使用使红色通道成为alpha通道的着色器在场景顶部绘制该纹理。@Vicky:尝试将你的SpriteBlendMode
设置为Additional