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