2011-01-19 15 views
2

私は、頂点のフィールドをレンダリングする簡単なDirectXアプリケーションを作成しました。 (上から見た場合)の頂点は、このようにレンダリングされます。DirectX:「スルー」ポリゴン

|\|\|\|\| 
|\|\|\|\| 

各三角形は、次のようにレンダリングされる:ポリゴンが描画され、反時計回りとはありませんが、それがあることを意味する必要があり

1 
|\ 
2 3 

。とにかく平面から見ると、平面は完璧です。

しかし、別のレベルから見ると、いくつかのポリゴンは透明なソートであり、その背後にあるジオメトリを見ることができます。私はこれが起こっている場所のいくつかを強調しました。

私はこれが基本的な初心者の問題だと考えています。私は何が欠けていますか?私のラスタライザの説明は、次のとおりです。

new RasterizerStateDescription 
           { 
            CullMode = CullMode.Front, 
            IsAntialiasedLineEnabled = true, 
            IsMultisampleEnabled = true, 
            IsDepthClipEnabled = true, 
            IsFrontCounterclockwise = false, 
            IsScissorEnabled = true, 
            DepthBias = 1, 
            DepthBiasClamp = 1000.0f, 
            FillMode = FillMode.Wireframe, 
            SlopeScaledDepthBias = 1.0f 
           }; 

alt text

答えて

0

私はちょうど深さ - ステンシルバッファが設定されていませんでした。しかたがない。

3

これは仕様によるものです。 FillMode.Wireframeは、各三角形のエッジを線として描画します。それで全部です。

デッドライトオンとカラーマスク(D3D11用語ではRenderTargetWriteMask)と深度テスト(ただし深度書き込みはオフ)とワイヤフレームモードをオンにした第1のパスを実行します。線と三角形は同じ方法でラスタライズされない(そして、それらのzは等しいフラグメント位置で異なる可能性がある)ので、おそらく深度バイアスも必要になります。

ところで、この手法は隠線除去と呼ばれています。詳細についてはthis presentationを確認できます。

+0

FillMode.Solidと同じです。私はちょうど深さのステンシルバッファが足りないと思った。とにかく情報に感謝します。 –

+0

さて、隠線除去効果を持たせたいと思っています。深度 - ステンシルバッファでも、ポリゴンを見ることができます。 – Stringer