OpenGL-坐标系
笛卡爾坐標(biāo)系
- 二維繪圖:笛卡爾坐標(biāo)有一個(gè)X軸和一個(gè)Y軸組成,X軸為水平方向,Y軸為垂直方向,X和Y相互垂直
?
二維笛卡爾坐標(biāo)系
- 三維繪圖:笛卡爾坐標(biāo)多了一個(gè)Z軸,Z軸同時(shí)垂直于X和Y軸。Z軸的實(shí)際意義代表著三維物體的深度
?
三維笛卡爾坐標(biāo)系
- 坐標(biāo)裁剪:窗口是以像素為單位進(jìn)行度量的。開(kāi)始在窗口中繪制點(diǎn)、線和形狀之前,要把指定的笛卡爾坐標(biāo)對(duì)翻譯成屏幕坐標(biāo),我們可以通過(guò)指定占據(jù)窗口的笛卡爾區(qū)域來(lái)轉(zhuǎn)換,這個(gè)區(qū)域叫做裁剪區(qū)域。
PS:
x,y,z,w:指的不是四維,其中w指的是縮放因子
視口
在顯示器的屏幕窗口上定義一個(gè)對(duì)齊的矩形的視口,OpenGL會(huì)自動(dòng)建立世界窗口和視口的變換(包括縮放和平移)。當(dāng)世界窗口中所有對(duì)象都被繪制時(shí),對(duì)象在世界窗口中的部分會(huì)被自動(dòng)地映射到視口中————換句話說(shuō),被映射到屏幕坐標(biāo)中,即像素在顯示器上的坐標(biāo)。
視口就是窗口內(nèi)部用于繪制裁剪區(qū)域的客戶區(qū)域
坐標(biāo)系統(tǒng)從笛卡爾坐標(biāo)到物理屏幕像素的映射是通過(guò)視口(viewport)的設(shè)置來(lái)指定
?
// 視口的設(shè)定通過(guò)glViewport()函數(shù),它的原型是:void glViewport(GLint x,GLint y,GLint width,GLint ehignt); //它設(shè)置窗口的左下角,以及寬度和高度。視口一般和窗口是等比的
投影方式
正投影(Orthographics Projection)或平行投影
- 視景體:正方形/長(zhǎng)方形
- 不存在近大遠(yuǎn)小
- 適合平面圖形/2D圖形渲染
透視投影
- 視景體:平截體
- 近大遠(yuǎn)小
- 適合使3D圖像渲染
?
左側(cè)-透視投影,右側(cè)-正投影
左右手坐標(biāo)系
?
左/右手坐標(biāo)系
- OpenGL坐標(biāo)系(物體、世界、照相機(jī)坐標(biāo)系)屬于右手坐標(biāo)系
- 設(shè)備坐標(biāo)系使用的是左手坐標(biāo)系
坐標(biāo)系
OpenGL里每個(gè)頂點(diǎn)的z,y,z都應(yīng)該在?1到1之間,超出這個(gè)范圍的頂點(diǎn)將是不可見(jiàn)
頂點(diǎn)坐標(biāo)->著色器處理->設(shè)備坐標(biāo)->光柵器->變換為屏幕二維坐標(biāo)和像素
頂點(diǎn)坐標(biāo)在轉(zhuǎn)換為屏幕坐標(biāo)之前會(huì)變換多個(gè)坐標(biāo)系統(tǒng)(Coordinate System),之所以引入過(guò)渡坐標(biāo)系是為了更加方便操作和運(yùn)算
共有5中比較重要的坐標(biāo)系系統(tǒng)
- 局部空間(Local Space,或者稱(chēng)為物體空間(Object Space))
- 世界空間(World Space)
- 觀察空間(View Space,或者稱(chēng)為視覺(jué)空間(Eye Space))
- 裁剪空間(Clip Space)
- 屏幕空間(Screen Space)
將頂點(diǎn)從一個(gè)坐標(biāo)系轉(zhuǎn)換到另一個(gè)坐標(biāo)系需要用到幾個(gè)變換矩陣,其中幾個(gè)比較重要的是模型(Model)、觀察(View)、投影(Projection)三個(gè)矩陣。
物體頂點(diǎn)的起始坐標(biāo)按序經(jīng)過(guò)上述5個(gè)坐標(biāo)系系統(tǒng)最終轉(zhuǎn)換為屏幕坐標(biāo)
圖形學(xué)中的幾個(gè)比較重要的坐標(biāo)系:
1.世界坐標(biāo)系
它是一個(gè)特殊的坐標(biāo)系,它建立了描述其他坐標(biāo)系所需要的參考系。也就是說(shuō),可以用世界坐標(biāo)系去描述其他所有坐標(biāo)系或者物體的位置。所以有很多人定義世界坐標(biāo)系是“我們所關(guān)心的最大坐標(biāo)系”,通過(guò)這個(gè)坐標(biāo)系可以去描述和刻畫(huà)所有想刻畫(huà)的實(shí)體。
世界坐標(biāo)系又稱(chēng)全局坐標(biāo)系或者宇宙坐標(biāo)系。
2.物體坐標(biāo)系
物體坐標(biāo)系與特定的物體關(guān)聯(lián),每個(gè)物體都有自己特定的坐標(biāo)系。不同物體之間的坐標(biāo)系相互獨(dú)立,可以相同,可以不同,沒(méi)有任何聯(lián)系。同時(shí),物體坐標(biāo)系與物體綁定,綁定的意思就是物體發(fā)生移動(dòng)或者旋轉(zhuǎn),物體坐標(biāo)系發(fā)生相同的平移或者旋轉(zhuǎn),物體坐標(biāo)系和物體之間運(yùn)動(dòng)同步,相互綁定。
舉例說(shuō)明一下物體坐標(biāo)系:我們每個(gè)人都有自己的物體坐標(biāo)系,當(dāng)我們決定要往前走的時(shí)候,每個(gè)人實(shí)際前行的絕對(duì)方向都不一樣,可能是向北,也可能向南,或者其他方向。這里前后左右是物體坐標(biāo)系中的概念。當(dāng)告訴張三往前走,就是張三同學(xué)沿著自己物體坐標(biāo)系的前方運(yùn)動(dòng)。至于張三往前走是往東還是向北,這是張三的運(yùn)動(dòng)在世界坐標(biāo)系下的描述。
?
坐標(biāo)系
這個(gè)立方體的物體坐標(biāo)系如圖所示,不論該立方體位于世界坐標(biāo)系的任何位置,處于什么角度,物體坐標(biāo)系與物體都是綁定在一起。
物體坐標(biāo)系又稱(chēng)模型坐標(biāo)系
3.攝像機(jī)坐標(biāo)系
- 在坐標(biāo)系的范疇里,攝像機(jī)坐標(biāo)系等同于照相機(jī)坐標(biāo)系
- 照相機(jī)坐標(biāo)系是和觀察者密切相關(guān)的坐標(biāo)系
- 照相機(jī)坐標(biāo)系和屏幕坐標(biāo)系相似,差別在于照相機(jī)坐標(biāo)系處于3D空間中,而屏幕坐標(biāo)系在2D平面里。
4.慣性坐標(biāo)系
慣性坐標(biāo)系是為了簡(jiǎn)化世界坐標(biāo)系到物體坐標(biāo)系的轉(zhuǎn)化而產(chǎn)生的。慣性坐標(biāo)系的原點(diǎn)與物體坐標(biāo)系的原點(diǎn)重合,慣性坐標(biāo)系的軸平行于世界坐標(biāo)系的軸。引入了慣性坐標(biāo)系之后,物體坐標(biāo)系轉(zhuǎn)換到慣性坐標(biāo)系只需旋轉(zhuǎn),從慣性坐標(biāo)系轉(zhuǎn)換到世界坐標(biāo)系只需平移。
從慣性坐標(biāo)系轉(zhuǎn)換到世界坐標(biāo)系只需要平移
坐標(biāo)轉(zhuǎn)換
物體坐標(biāo)/對(duì)象坐標(biāo)(Object Space)
|
模型變換(transformation)
|
世界坐標(biāo)(World Space)
|
視變換(Viewing)
|
觀察者坐標(biāo)/攝像機(jī)坐標(biāo)(Eye Space)
|
投影變換(Projection transformation)
|
裁剪坐標(biāo)(Clip Space)
|
透視除法(Perspective divide)
|
規(guī)范化設(shè)備坐標(biāo)(NDC Space)
|
視口變換(ViewPort mapping)
|
屏幕坐標(biāo)(Screen space)
-
OpenGL只定義了裁剪坐標(biāo)系、規(guī)范化設(shè)備坐標(biāo)系和屏幕坐標(biāo)系
-
局部坐標(biāo)系(模型坐標(biāo)系)、世界坐標(biāo)系和照相機(jī)坐標(biāo)系都是為了方便用戶設(shè)計(jì)而自定義的坐標(biāo)系
用戶自定義變換(在頂點(diǎn)著色器中完成)
Attribute->Vertex->模型變換(Model Space) ->World Space>Camera Space->Clip Space
|
OpenGL變換(頂點(diǎn)著色器處理后的階段完成)
透視除法(Clipping)->NDC Space->Window Space->Render
視口變換:
使用 glViewPort 內(nèi)部的參數(shù)來(lái)將標(biāo)準(zhǔn)化設(shè)備坐標(biāo)映射到屏幕坐標(biāo),每個(gè)坐標(biāo)關(guān)聯(lián)一個(gè)屏幕上的點(diǎn)的過(guò)程
作者:Tobesky
鏈接:https://www.jianshu.com/p/e25bf6dc12af
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
總結(jié)
以上是生活随笔為你收集整理的OpenGL-坐标系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: html简单父子页面,js 的 ifra
- 下一篇: delphi random 六位_《蒙面