2011-01-19 62 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),第二遍使用深度測試(但深度寫入)和線框模式。您可能也需要深度偏差,因爲線條和三角形沒有以相同的方式進行光柵化(並且它們的z可以在相同的片段位置處有所不同)。

順便說一句,這種技術被稱爲隱藏線刪除。你可以檢查this presentation瞭解更多詳情。

+0

這與FillMode.Solid相同。我認爲我只是缺少一個深度模板緩衝區。但是,無論如何感謝信息。 – 2011-01-19 13:44:47