アカデミックプロジェクトでは、ビルボードを最初から描画するためのコードを作成しようとしています。今、私はそれらを半透明にする段階にあります。私はそれらを背景に対して見栄えよくすることができましたが、それでも次の写真のように、透明にする必要のあるコーナーでお互いを覆っている可能性があります。
何が間違っているのかわかりません。これは私が看板を描くために使用しているエフェクトファイルです。頂点シェーダーに関連する部分は省略しましたが、現時点では関係ないと思います。
//cut
texture Texture;
texture MaskTexture;
sampler Sampler = sampler_state
{
Texture = (Texture);
MinFilter = Linear;
MagFilter = Linear;
MipFilter = Point;
AddressU = Clamp;
AddressV = Clamp;
};
sampler MaskSampler = sampler_state
{
Texture = (MaskTexture);
MinFilter = Linear;
MagFilter = Linear;
MipFilter = Point;
AddressU = Clamp;
AddressV = Clamp;
};
//cut
struct VertexShaderOutput
{
float4 Position : POSITION0;
float4 Color : COLOR;
float2 TexCoord : TEXCOORD0;
};
//cut
float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
float4 result = tex2D(Sampler, input.TexCoord) * input.Color;
float4 mask = tex2D(MaskSampler, input.TexCoord);
float alpha = mask.r;
result.rgb *= alpha;
result.a = alpha;
return result;
}
technique Technique1
{
pass Pass1
{
VertexShader = compile vs_2_0 VertexShaderFunction();
PixelShader = compile ps_2_0 PixelShaderFunction();
AlphaBlendEnable = true;
SrcBlend = SrcAlpha;
DestBlend = InvSrcAlpha;
}
}
TextureとMaskTextureという名前の2つのテクスチャがあり、後者はグレースケールです。ビルボードは、ほとんどの場合、同じ頂点バッファーにありGraphicsDevice.DrawIndexedPrimitives()
、XNAからの1回の呼び出しで描画されます。
私はすべてを正しくやっていないと感じています。