OpenGL之深入解析坐标系
生活随笔
收集整理的這篇文章主要介紹了
OpenGL之深入解析坐标系
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、坐標(biāo)系
- 2D 笛卡爾坐標(biāo)系(由 x、y 決定)
- 3D 笛卡爾坐標(biāo)系(由 x、y、z 決定)
二、視口
- glViewport(GLint x,GLint y,GLsizei width,GLsizei height),對(duì)應(yīng)屏幕區(qū)域的范圍;
- 如下所示,對(duì)應(yīng)全屏幕:
- 如下所示,對(duì)應(yīng)屏幕一部分:
三、投影
- 概念
-
- 光源的出發(fā)點(diǎn)為投影中心;
-
- 投影中心與物體上各點(diǎn)的連線稱(chēng)為投影線;
-
- 接受投影的面,稱(chēng)為投影面;
-
- 過(guò)物體上各點(diǎn)的投影線與投影面的交點(diǎn)稱(chēng)為這些點(diǎn)的投影。
- 投影分為中心投影和平行投影兩大類(lèi):
-
- 所有投影線都交于投影中心點(diǎn)的投影稱(chēng)為中心投影,透視圖就是用這種投影方法繪制成的。
-
- 所有的投影線都互相平行的投影稱(chēng)為平行投影,平行投影又分為斜投影和正投影兩種,當(dāng)投影線傾斜于投影面時(shí),稱(chēng)斜投影。
- 正投影是指平行投射線垂直于投影面。透視投影屬于中心投影,透視投影圖簡(jiǎn)稱(chēng)為透視圖或透視,它是從某個(gè)投射中心將物體投射到單一投影面上所得到的圖形。透視圖與人們觀看物體時(shí)所產(chǎn)生的視覺(jué)效果非常接近,透視圖以渲染、配景,使之成為形象逼真的效果圖。
- 如下所示:透視投影(左)和正投影(右)
四、OpenGL 的坐標(biāo)系
① 左手坐標(biāo)系與右手坐標(biāo)系
- 在世界、物體、照相機(jī)空間是右手坐標(biāo)系。
- 在規(guī)范化設(shè)備坐標(biāo)系用的是左手坐標(biāo)系。
② 視窗坐標(biāo)系
- 視窗坐標(biāo)也就是手機(jī)窗口對(duì)應(yīng)的坐標(biāo)系統(tǒng),以左上角為原點(diǎn),右下角對(duì)應(yīng)手機(jī)的最大像素值的集合,如下圖是一個(gè)像素為 320*480 的手機(jī),那他右下角的坐標(biāo)就是 (320, 480)。
③ 規(guī)格化設(shè)備坐標(biāo)系
- 規(guī)格化設(shè)備坐標(biāo)是以屏幕中心為原點(diǎn),X 軸朝右,Y 軸朝上,所以左下角的坐標(biāo)為(-1, -1),右上角的坐標(biāo)為(1,1)。當(dāng)然這是 z 軸為 0 時(shí)的顯示,實(shí)際上規(guī)格化設(shè)備坐標(biāo)系統(tǒng)是要考慮 z 軸,所以由平面要轉(zhuǎn)換成一個(gè)正方體,原點(diǎn)坐標(biāo)為(0,0,0),也就是這個(gè)立方體的中心,而它左上角離最近的那個(gè)頂點(diǎn)的坐標(biāo)就是(1,1,1),右下角離最遠(yuǎn)的那個(gè)頂點(diǎn)的坐標(biāo)就是(-1,-1,-1)。
④ 裁剪坐標(biāo)系
- 裁剪坐標(biāo)是執(zhí)行矩陣變換和透視投影之后,但在執(zhí)行透視除法之前的坐標(biāo),超出裁剪空間的坐標(biāo)會(huì)被丟棄。
⑤ 視覺(jué)坐標(biāo)系
- 視覺(jué)坐標(biāo)系是觀察者的眼睛出發(fā),朝手機(jī)設(shè)備看過(guò)去所能看到的,會(huì)有一個(gè) z 軸的最近距離和最遠(yuǎn)距離,也就是 zNear 和 zFar,只有在這兩者之間并且也滿(mǎn)足 x 軸和 y 軸坐標(biāo)在屏幕當(dāng)中的坐標(biāo)才會(huì)顯示出來(lái),越遠(yuǎn)的東西會(huì)顯示得越小,產(chǎn)生透視的效果;
⑥ 世界坐標(biāo)系
- 世界坐標(biāo)系就是由用戶(hù)構(gòu)造的固定坐標(biāo)系,方便描述這個(gè)坐標(biāo)系下各種物體相對(duì)于原點(diǎn)的位置;
⑦ 慣性坐標(biāo)系
- 慣性坐標(biāo)系是指世界坐標(biāo)系和物體坐標(biāo)系轉(zhuǎn)換的中間產(chǎn)物。慣性坐標(biāo)系的原點(diǎn)和物體坐標(biāo)系的原點(diǎn)重合,但慣性坐標(biāo)系的軸和世界坐標(biāo)系的軸平行;
⑧ 物體坐標(biāo)系
- 物體坐標(biāo)系:物體自己獨(dú)有的坐標(biāo)系;當(dāng)物體旋轉(zhuǎn)和移動(dòng)的時(shí)候,這個(gè)坐標(biāo)系也會(huì)發(fā)生相應(yīng)的變化。
- 慣性坐標(biāo)系是指世界坐標(biāo)系和物體坐標(biāo)系轉(zhuǎn)換的中間產(chǎn)物。慣性坐標(biāo)系的原點(diǎn)和物體坐標(biāo)系的原點(diǎn)重合,但慣性坐標(biāo)系的軸和世界坐標(biāo)系的軸平行。
- 為什么要引入慣性坐標(biāo)系?因?yàn)槲矬w坐標(biāo)系轉(zhuǎn)換到慣性坐標(biāo)系只需要旋轉(zhuǎn),從慣性坐標(biāo)系轉(zhuǎn)換到世界坐標(biāo)系只需要平移。
五、坐標(biāo)變換
- OpenGL 最終渲染到屏幕上是 2D 的,所以只需要將 3D 坐標(biāo)進(jìn)行一系列的變換為 2D 坐標(biāo),整個(gè)過(guò)程如下圖所示:
- OpenGL 中只定義了裁剪坐標(biāo)系、規(guī)范化設(shè)備坐標(biāo)系和屏幕坐標(biāo)系。而局部坐標(biāo)系(模型坐標(biāo)系)、世界坐標(biāo)系和攝像機(jī)坐標(biāo)系都是為了方便用戶(hù)設(shè)計(jì)而自定義的坐標(biāo)系,它們的關(guān)系如下圖所示:
- 模型變換、視變換、投影變換由用戶(hù)在頂點(diǎn)著色器中完成。
- 透視除法、視口變換由 OpenGL 在頂點(diǎn)著色器處理之后完成。
總結(jié)
以上是生活随笔為你收集整理的OpenGL之深入解析坐标系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OpenGL之常见的专业名词解析
- 下一篇: OpenGL之简单渲染一个三角形