1

XNA3.1を使用しています

最近Components.Add(myComponent)、ゲームに使用して2Dヘッドアップディスプレイ(HUD)を作成しました。HUDは見栄えがよく、2Dマップ、十字線、フレームレートカウンターが表示されます。問題は、HUDが画面に表示されているときはいつでも、ゲーム内の3Dオブジェクトが正しく描画されなくなることです。

プレーヤーから離れたところに何かが近づいた後に描画される可能性があります。モデルを通り過ぎると、モデルの定義が失われることがあります。HUDを取り外すと、すべてが正常に描画されます。

私が知っておくべきこれに関する既知の問題はありますか?3Dゲームエリアに2DHUDを描画するにはどうすればよいですか?

GameComponentこれは、 :なしの場合のように見えます。

2つの3Dオブジェクト、遠い方のオブジェクトは近い方のオブジェクトの後ろに正しくレンダリングされます

そしてGameComponent、これが(この場合、フレームレートを示す左上隅の画面外のテキストです)でどのように見えるかを示します。後ろの木がカメラに近い木の前にどのように表示されているかに注目してください。

2つの3Dオブジェクト、遠い方のオブジェクトが近い方のオブジェクトの上にレンダリングされます

4

1 に答える 1

2

デプスバッファを有効にする必要があります。

// XNA 3.1
GraphicsDevice.RenderState.DepthBufferEnable = true;
GraphicsDevice.RenderState.DepthBufferWriteEnable = true;

// XNA 4.0
GraphicsDevice.DepthStencilState = DepthStencilState.Default;

SpriteBatch.Beginグラフィックスパイプラインの状態を変更します。

どちらのバージョンでも、深度バッファリングが無効になっているため、問題が発生します。

繰り返しますが、私はこれを十分に強調することはできません:

ジオメトリを描画する前に、すべてのレンダリング状態が正しく設定されていることを常に確認してください。

  • BlendState
  • DepthStencilState
  • RasterizerState
  • ビューポート
  • RenderTargets
  • シェーダー
  • SamplerStates
  • テクスチャ
  • 定数

レンダリングパイプラインの各状態と各ステージの目的について学習します。疑わしい場合は、すべてをデフォルトにリセットしてみてください。

于 2013-02-19T08:14:09.893 に答える