2012-03-19 7 views
1

私のXNAゲームでは、Viewport.Projectを使用して、太陽の3D座標の2次元スクリーン座標を取得しています(主に見た目がいいからです)。しかし、私は太陽の反対方向を見ると、2つ(技術的には1つ)が見えます。私はここで何が起こっているのか分かりません。Viewport.Project problems

誰でも何が起こっているのですか?そして、どうすればこれを防ぐことができますか?これを視覚化するために

は、ここで私が話しているかの画像です: Hyperlinked image, don't have 10+ rep

これはコードです:

 Rectangle clientBounds = Window.ClientBounds; 
     Texture2D sun = Content.Load<Texture2D>(@"Image\Skybox_Sun"); 
     Vector3 coords = new Vector3(1000, 0, 1000); 
     Vector3 coords1 = graphics.GraphicsDevice.Viewport.Project(coords, camera.Projection, camera.View, Matrix.Identity); 
     suncoords = coords1; 
     spriteBatch.Begin(); 
     spriteBatch.Draw(sun, new Vector2(coords1.X, coords1.Y), null, Color.White, 0, new Vector2(cursor.Width/2, cursor.Height/2), q, SpriteEffects.None, 0); 
     spriteBatch.End(); 

答えて

2

あなたはcoords1.Zをチェックしようとしたことがありますか?あなたの背後の太陽が負のZに対応していると想像してください。この場合、あなたのドローの前にif条件を追加してみてください。

if(coords1.Z > 0) 
    spriteBatch.Draw(sun, new Vector2(coords1.X, coords1.Y), null, Color.White, 0, new Vector2(cursor.Width/2, cursor.Height/2), q, SpriteEffects.None, 0); 
+0

イメージでは、「太陽の座標」は太陽の画面座標です。これら2つの間で変化する唯一の事は、Zが非常に小さい値で減少することである。 – Jared

+0

とにかく、私はビューの錐台のカリングを使用して解決しました。とにかくその提案に感謝します。 – Jared

+0

ああ、今私はあなたが画面に印刷している位置を見る...それは0と1の間である必要があります(<0またはあなたの場合> 1ではない)。あなたがこれを得ることができてうれしいです。 – LiquidAsh

関連する問題