我目前正在開發使用C#的Direct3D 11渲染引擎。投影和裁剪問題?
我已經成功繪製了三角形,應用了顏色和紋理等。 我現在試圖展示的對象是邊長爲1的旋轉立方體,放置在世界空間的原點。 但是,在應用視圖和特別是投影矩陣時,我得到的結果並不令人滿意。由於這是很難解釋,我只是告訴你什麼結果,我得到不同的視點/投影組合:從我的頂點着色器
HLSL代碼片段:
float4x4 wvpMatrix = mul(World, mul(View, Projection));
output.Position = mul(input.Position, wvpMatrix);
世界矩陣使用:
// Static rotation around all three axes
matrices.World = Matrix.Identity * Matrix.CreateFromYawPitchRoll(0.5f, 0.6f, 1.0f);
試驗A
從正z方向的原點的簡單視圖向量。沒有使用投影。 您可以看到多維數據集的背面正被裁剪。
matrices.View = Matrix.CreateLookAt(new Vector3(0, 0, 0), new Vector3(0, 0, 1), Vector3.Up);
matrices.Projection = Matrix.Identity;
試驗B
查看矩陣保持不變,但現在我使用的是正交投影矩陣。 這次立方體的正面消失。你可以看到的部分是那些被試驗A.在測試A.修剪
matrices.View = Matrix.CreateLookAt(new Vector3(0, 0, 0), new Vector3(0, 0, 1), Vector3.Up);
matrices.Projection = Matrix.CreateOrthographic(2, 2, 0.01f, 100.0f);
測試C
同樣沒有投影,就像這一次,場景正在從z軸負方向的三個單位觀察。 當相機位置未設置爲系統原點時,該立方體看起來失真。我認爲還有一些裁剪。
matrices.View = Matrix.CreateLookAt(new Vector3(0, 0, -3), new Vector3(0, 0, 1), Vector3.Up);
matrices.Projection = Matrix.Identity;
試驗d
最後,我使用透視投影。到目前爲止,我還沒有找到可以看到立方體任何部分的攝像機位置。我得到的全屏矢車菊藍色。
matrices.View = Matrix.CreateLookAt(new Vector3(0, 0, -3), new Vector3(0, 0, 1), Vector3.Up);
matrices.Projection = Matrix.CreatePerspectiveFieldOfView(1, 1, 0.1f, 100);
我想要做的就是繪製全立體的第一件事 - 不進行裁剪。我嘗試了近/遠平面值的不同組合,但找不到可接受的解決方案。 我的最終目標是進行透視投影。但是,正如你所看到的,我甚至無法得到一個好的現場視角。
嗨,這裏有一些提示。確保變換矩陣按照正確的順序相乘。對此我的意思是頂點應該先乘以世界矩陣,結果應該乘以視圖矩陣等。這可以通過修改HLSL代碼來輕鬆測試。此外,請嘗試再次使用正交投影,並將近/遠平原設置爲0.000001f/10000.0f。你可以檢查的最後一件事情是,如果你正在使用三角形基元作爲多維數據集,或者你正在將多維數據集建模爲三角形條。在這種情況下,您需要使用三角形或三角形條來渲染它。 – brano 2012-02-02 15:18:17
你好,目前的訂單是世界,視圖,投影。我甚至將倍增分開,沒有任何變化(如我所料)。另外,改變近平面和遠平面不會影響結果。只有在0到0.45的範圍內發生了更多的削波(超過第二幅圖像)。拓撲結構是TriangleList。 – Lucius 2012-02-02 16:54:35
你可以發佈立方體的座標嗎? – brano 2012-02-03 08:32:50