我使用SharpDX寫一個「從零開始3D軟引擎」按照MSDN上的教程。但是,我無法讓我的預期和實際視野相匹配。透視投影矩陣似乎有不正確的FOV
我現在簡化的世界包括以下中的與Z = 0 4個三維頂點(0,1,0);(0,-1,0);(1,0,0);( - 1,0, 0)。我將相機放在(0,0,2)處並用(0,1,0)向上看(0,0,0)。我用90度視角(PI/2弧度)設置投影矩陣,並準備通過調用Vector3.TransformCoordinate(Vector3, Matrix)
來渲染四個頂點中的每一個。
我的理解是,FOV用於計算比例因子1/TAN(FOV/2)
,它可應用於每個(Y,Z)對,例如y' = y * scale/z
。類似地,考慮到縱橫比,也可以計算(X,Z)對的比例。
爲90度和相機間的距離2(垂直)FOV,我本來期望我所有的頂點是從位圖的邊緣相當遠。然而,頂部和底部頂點的Y值爲-0.49和+0.49,這意味着如果渲染它們實際上將觸摸屏幕邊界。我誤解了FOV的概念嗎?我看到的結果是我所期望的大約53度的FOV。就好像切線在其反轉之前被減半一樣...
我第一次嘗試用相機在(0,0,1)和90度的視場,因爲我確信比例因子是1(1/TAN(90/2) = 1
),但頂點離屏。
'0.49'不在屏幕邊緣。對於'x'和'y',視口的範圍從'-1'到'1'。因此,這些價值似乎是合理的。對於'90°'的fov,你可以在'2'的z-距離看到'-2'到'2'的範圍。 –
謝謝妮可。這與我的測量結果完全吻合。我剛剛接受了教程代碼,卻沒有想到。我認爲你應該加上這個答案,而不僅僅是一個評論。 – Jono