這個透視矩陣的第三行的目的是什麼?難道我們不能簡單地保留原始的z座標,並且仍然能夠確定應該在別人面前繪製哪些點?如果我們將單元格(3,3)替換爲1並將單元格(3,4)替換爲0,則該點將繪製在正確的x和y位置,並且仍然可以使用點的第四個座標作爲均勻。我錯過了什麼?謝謝!瞭解透視投影矩陣的第三行
0
A
回答
0
是的,理論上可以保持z值,因爲他們得到的可比性。但是,練習不允許這樣做。實際上,這個矩陣不會自行工作。但讓我稍後再談。下面是所得投影Ž相對於輸入的z座標,假定爲1的近裁剪面的圖和爲5的遠裁剪面:
正如你可以看到,所得到的深度仍然在1和5之間的範圍相同,但有點扣。其原因如下:
將投影后得到的z值(歸一化設備座標)寫入深度緩衝區(OpenGL對窗口座標執行額外轉換,但現在讓我們忽略它) 。深度緩衝區的固定分辨率通常爲24或32位。理論上,你可以將深度編碼爲浮點數,但這會浪費很多精度。在許多情況下,精確的深度緩衝區是必不可少的,以避免閃爍。
所以相反,z緩衝區被編碼爲某種整數,縮放到znear和zfar之間的適當範圍。因此,上圖中的垂直軸被分成相同的步驟。現在屈曲的結果更接近於深度軸上更大範圍內的Zel散佈。因此,如果點靠近攝像機,則某個z範圍編碼的深度範圍較大,如果距離較遠,則深度範圍較小。這樣可以在相機附近獲得更高的精度(請記住深度軸均勻細分)。這通常正是你想要的。可以非常詳細地看到與攝像機非常接近的對象,並且深度緩衝區中的問題會很明顯。然而,距離很遠的物體不能被視爲清晰,並且不需要高深度分辨率。
如前所述,該矩陣不能直接使用。這是因爲標準化器件座標的z值被認爲是在DirectX的[0,1]範圍內或OpenGL的[-1,1]範圍內,其中下部表示近剪裁平面的深度,而上部代表遠剪裁平面。因此,除非應用一些額外的轉換,否則這些API無法使用生成的深度。
相關問題
- 1. WebGL透視投影矩陣
- 2. 瞭解投影矩陣
- 3. 瞭解libGDX投影矩陣
- 4. OpenGL中的透視投影矩陣
- 5. 透視投影矩陣不工作openGL
- 6. 如何使用透視投影矩陣?
- 7. 投影和視圖矩陣
- 8. 投影矩陣
- 9. 投影矩陣
- 10. 用於3D透視投影的剪貼矩陣
- 11. 透視投影矩陣似乎有不正確的FOV
- 12. OpenGL中的投影矩陣真的是「投影矩陣」嗎?
- 13. OpenGL投影矩陣
- 14. OpenGL投影矩陣爲透視與fovy和外觀
- 15. WP7透視變換(3D矩陣vs平面投影)
- 16. 如何構建透視投影矩陣(無API)
- 17. 基本矩陣的投影矩陣
- 18. 使用MATLAB投影矩陣反投影
- 19. Three.js投影矩陣不投影
- 20. PyOpenGL透視投影
- 21. 計算視圖投影矩陣
- 22. OpenGL模型,視圖,投影矩陣
- 23. OpenGL投影,視圖和世界矩陣
- 24. 投影視圖矩陣,opengl es。 iOS
- 25. 旋轉矩陣的投影
- 26. 矩陣乘法 - 視圖/投影,世界/投影等
- 27. 三維重建的投影矩陣從三焦張量
- 28. OpenGL獲取投影矩陣
- 29. 擴展投影矩陣
- 30. 查找投影矩陣
我認爲這一行只是將[近,遠]範圍縮放到[0,1]中進行剪裁。在這個轉換之後,你將看到的所有內容都位於[0,1]範圍內,其餘部分將被忽略。 – kolenda