ビルボードはXBOXではなくPCでうまく描画します


8

月は2つの描画呼び出しで描画されますが、どちらもxboxで間違って描画されるため、簡単にするために1つの描画を表示しています。


これは、PCでの月の見え方です。

ここに画像の説明を入力してください

XBOXでの外観:

ここに画像の説明を入力してください

カメラが動き回るにつれて、テクスチャはちらつき、消え、下から上へのグラデーションのように見え、線がそれを通り抜けます。たとえば、カメラを少し動かすと、次のようになります。http : //olhovsky.com/xna/xbox_moon2.png

public void Draw(Camera cam) 
{ 
    GraphicsDevice gd = Game3.GDM.GraphicsDevice; 

    Vector3 position = Position + cam.Position; 
    Matrix world = Matrix.CreateScale(2.0f); 
    world *= Matrix.CreateConstrainedBillboard( 
    position, cam.Position, Vector3.Down, cam.Forward, null); 

    _moonEffect2.Parameters["World"].SetValue(world); 
    _moonEffect2.Parameters["View"].SetValue(cam.View); 
    _moonEffect2.Parameters["Projection"].SetValue(cam.Projection); 

    // Draw blended part of moon only. 
    _moonEffect2.Parameters["AlphaTestDirection"].SetValue(-1); 
    gd.BlendState = BlendState.AlphaBlend; 
    gd.RasterizerState = RasterizerState.CullNone; 
    gd.DepthStencilState = DepthStencilState.DepthRead; 
    ScreenQuadDraw.DrawQuad(_moonQuad, _moonEffect2); 
} 

ここに使用されているシェーダーがあり、ここでは複雑なものはありません:http : //www.olhovsky.com/xna/Moon.fx

テクスチャがxboxに正しく表示されない理由を誰かが知っていますか?おそらく設定すべき別の状態はありますか?


DrawQuadでそれを行わない限り、月のテクスチャを明示的に設定することはありません。
r2d2rigo

@ r2d2rigo:クローンされたエフェクト "_moonEffect2"のロード時に一度設定され、より効率的であるため、再度設定されることはありません。
Olhovsky、2011

回答:


4

解決策は、シェーダーから未使用のカラー入力を削除することでした。

古いピクセルシェーダー:

float4 PixelShaderFunction(float2 texCoord : TEXCOORD0, float4 color : COLOR0) : COLOR0
{
    color = tex2D(TextureSampler, texCoord);

    // Apply the alpha test.
    clip((color.a - AlphaTestThreshold) * AlphaTestDirection);

    return color;
}

新しいピクセルシェーダー:

float4 PixelShaderFunction(float2 texCoord : TEXCOORD0) : COLOR0
{
    float4 color = tex2D(TextureSampler, texCoord);

    // Apply the alpha test.
    clip((color.a - AlphaTestThreshold) * AlphaTestDirection);

    return color;
}

これはなぜですか?
ジョナサンコネル

xbox 360では、カラー入力に何もバインドしないことは、おそらく初期化されていない値へのポインターを持つことに似ています。次に、デフォルト値(ゼロ)の代わりにランダムな値を設定できます。これはWindowsの場合です。実際、そのような動作をするのは、すべての Windows GPUであるとは限りません。一部のWindows GPUもxboxの動作を示す可能性があります。とにかく、パフォーマンスの理由で未使用の入力をとりたくないので、それほど悪くありません。
Olhovsky、

同意した。実際のシェーダーでcolor属性を使用していないため、出力画像だけが奇妙に見えます。たぶん、出力は入力の後に隣接しているので、バインドされていない「色」が出力色を上書きしますか?私は知らない:p
ジョナサンコネル

シェーダーをさらに詳しく見てみると、私の説明はほとんど意味がありません。colorそれがいずれかの方法を使用する前に、値がSOの初期値は、テクスチャから設定されているcolor問題ではないはずです。これがなぜ起こるか私は知りません。しかし、道徳的には、シェーダー関数への未使用の入力はありません。
Olhovsky、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.