私自身のテスト プログラムでは、シェーディングされたスプライトが問題ないダイナミック ライト シェーダーがありましたが、それを友人の物理ベースのゲームにインポートすると、日食に似てきました。シェイプ内の純粋に X 値に基づいてグラデーションを単純化し、スプライトの円の外側を赤にすることで絞り込みましたが、ご覧のとおり、回転は引き続き問題を引き起こします (画像を投稿できません)。 、アルバムへのリンクはこちら)。
異なる回転での円 (順序どおりではありませんが、ラジアン値でラベル付けされています): http://imgur.com/a/Preth
行列演算について調べたところ、回転に正しい公式を使用しているとのことですが、何か間違ったことをしている可能性があります。これが私の .fx シェーダー コードです。
float rotationrads; /*assumed rotation is in radians*/
sampler TextureSampler: register(s0);
float4 staticlight(float2 Tex: TEXCOORD0) : COLOR0
{
float4 Color = tex2D(TextureSampler, Tex);
float2 NewTex;
/*Get the new X and Y values by applying the UV formula with the rotation*/
NewTex.x = (Tex.x * cos(rotationrads)) - (Tex.y * sin(rotationrads));
NewTex.y = (Tex.y * sin(rotationrads)) + (Tex.y * cos(rotationrads));
if(Color.a > 0.0)
{
Color.r = (Color.r * NewTex.x);
Color.g = (Color.g * NewTex.x);
Color.b = (Color.b * NewTex.x);
}
else
{
Color.r = 100;
Color.g = 0;
Color.b = 0;
Color.a = 100;
}
return Color;
}
technique StaticLightOnly
{
pass Pass1
{
PixelShader = compile ps_2_0 staticlight();
}
}
2D シェーダーでスプライト ベースの回転を使用した経験がある場合は、これについて何か助けていただければ幸いです。ありがとうございます!