OpenGL坐标系转换
轉換過程
在opengl中,一個坐標的完整轉換過程,從結構層、渲染管線、坐標空間三個層級的劃分如下:
結構層:頂點——>圖元——> 片元——>緩沖(FBO)
圖像渲染管線:頂點著色器 ——>圖元裝配——>裁剪 ——>幾何著色器 ——>柵格化 ——>片段著色器——> 測試與混合
坐標空間:Model/Local —(ModelTransform)—> World —(ViewTransform)—> eye/view/camera —(視椎體裁剪,椎體范圍轉為正方體范圍)—>Clip ———(PerspectiveDivide)—>NDC(clip/w)——(ViewportTransform)——>Screen——(ScanConversion)——>Window**
頂點的三個狀態
頂點(vertex), 一些點
圖元(primitives), 頂點組合成圖元。根據渲染模式(點、線、面)對三角面進行細分,復雜結構增加物體的三角面數以拆解成基本圖元。
片元 (Fragment),表示基本圖元映射到二維平面上的映射區域,通常一個Fragment對應屏幕一個像素。
柵格化是把點線三角形映射到屏幕上的像素點的過程。
圖像渲染管線各過程詳解
- 頂點著色器:MVP變換,光照計算。與頂點相關的全部屬性完全確定。輸出camera space下的頂點。
- 圖元裝配:頂點數據被結合成完整圖元。輸出圖元。
- 幾何著色器:輸入圖元,對三角面進行細分,產生一些新頂點,構造一些新圖元。
- 裁剪:(只有圖元才能裁剪,頂點沒有幾何意義。不裁剪,視線范圍無限遠)用相機視椎體裁剪世界坐標 ,視椎體視線范圍轉為正方體視線范圍。輸出Clip space 圖元。
- 透視除法:四維齊次坐標通過透視除法轉換為三維NDC。NDC的意義在于頂點最后要輸出到屏幕空間。
- 視口變換, 三維坐標轉為二維像素坐標。輸出Screen space 圖元。
- 剔除:背面剔除
- 光柵化:將圖元的幾何定義轉為圖像空間的離散點,生成片元集合。輸出Screen space。
- 片元著色器:
- 測試與混合
- 深度剔除
- 遮擋剔除
- 透明物體融合
坐標系轉換過程
w分量
左右手坐標系轉換?
上映射到視椎體Near平面 的點p,得到點e和點p的映射關系。
2.視椎體Near平面映射到NDC空間的[-1,1], 求出 點ndc和點p的關系
最后得到點e和點ndc的關系,
三維NDC坐標系轉為二維像素坐標系
最終,模型要顯示在二維平面上,其范圍與視口相關。NDC空間很接近窗口,NDC的xy坐標與窗口坐標之間的線性關系被稱為視口變換。NDC的z值理解為深度值。
參考文檔
gl_FragColor的含義
從頂點到片元
OpenGL投影矩陣(Projection Matrix)構造方法 - lxycg - 博客園
游戲開發技術雜談3:OpenGL投影矩陣
總結
以上是生活随笔為你收集整理的OpenGL坐标系转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浏览器刷新报404
- 下一篇: vue 监听浏览器刷新