電商網(wǎng)站建設(shè)與運(yùn)營(yíng)方向百度學(xué)術(shù)官網(wǎng)
1、2D笛卡爾坐標(biāo)系

2D笛卡爾坐標(biāo)系
跟我們高中的時(shí)候?qū)W習(xí)的坐標(biāo)系一樣,是由x、y決定的。
2、3D笛卡爾坐標(biāo)系

3D笛卡爾坐標(biāo)系
坐標(biāo)由x、y、z決定,滿足右手定則。
3、視口
glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
窗口和視口大小可以相同,也可以不同,一般情況下跟窗口等比。

窗口和視口大小相同

窗口和視口大小不同
4、投影
人們把光源的出發(fā)點(diǎn)稱為投影中心;
投影中心與物體上各點(diǎn)的連線稱為投影線;
接受投影的面,稱為投影面;
過(guò)物體上各點(diǎn)的投影線與投影面的交點(diǎn)稱為這些點(diǎn)的投影。
投影分為中心投影和平行投影兩大類。
所有投影線都交于投影中心點(diǎn)的投影稱為中心投影。透視圖就是用這種投影方法繪制成的。
所有的投影線都互相平行的投影稱為平行投影。平行投影又分為斜投影和正投影兩種。當(dāng)投影線傾斜于投影面時(shí),稱斜投影,投影線垂直于投影面時(shí),稱正投影。

4.1 正投影
正投影是指平行投射線垂直于投影面。物體的顯示大小不受遠(yuǎn)近影響,都展示的是物體輪廓的真實(shí)大小,主要圖片展示。
4.2 透視投影
透視投影屬于中心投影。
透視投影圖簡(jiǎn)稱為透視圖或透視,它是從某個(gè)投射中心將物體投射到單一投影面上所得到的圖形。透視圖與人們觀看物體時(shí)所產(chǎn)生的視覺(jué)效果非常接近。透視圖以渲染、配景,使之成為形象逼真的效果圖。遵從遠(yuǎn)小近大顯示原則,物體顯示更立體。
5、OpenGL ES中的坐標(biāo)系
OpenGL ES坐標(biāo)系統(tǒng)包括視窗坐標(biāo)、規(guī)格化設(shè)備坐標(biāo)、裁剪坐標(biāo)和視覺(jué)坐標(biāo)、世界坐標(biāo)、對(duì)象坐標(biāo)。
在世界、物體、照相機(jī)空間是右手坐標(biāo)系。
在規(guī)范化設(shè)備坐標(biāo)系用的是左手坐標(biāo)系。

5.1 視窗坐標(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)。
5.2 規(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)。
5.3 視覺(jué)坐標(biāo)系

視覺(jué)坐標(biāo)系是從我們的眼睛出發(fā)朝我們的手機(jī)設(shè)備看過(guò)去所能看到的,會(huì)有一個(gè)z軸的最近距離和最遠(yuǎn)距離,也就是zNear和zFar,只有在這兩者之間并且也滿足x軸和Y軸坐標(biāo)在屏幕當(dāng)中的坐標(biāo)才會(huì)顯示出來(lái),越遠(yuǎn)的東西會(huì)顯示得越小,產(chǎn)生透視的效果。
5.4 世界坐標(biāo)系

世界坐標(biāo)就是一個(gè)用戶構(gòu)造的固定的坐標(biāo)系,方便描述這個(gè)坐標(biāo)系下各種物體相對(duì)于原點(diǎn)的位置。
5.5 物體坐標(biāo)系

每個(gè)物體都有自己獨(dú)立的坐標(biāo)系。當(dāng)物體旋轉(zhuǎn)和移動(dòng)的時(shí)候,這個(gè)坐標(biāo)系也會(huì)發(fā)生相應(yīng)的變化。
5.6 慣性坐標(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)系?因?yàn)槲矬w坐標(biāo)系轉(zhuǎn)換到慣性坐標(biāo)系只需要旋轉(zhuǎn),從慣性坐標(biāo)系轉(zhuǎn)換到世界坐標(biāo)系只需要平移
6、OpenGL中的坐標(biāo)轉(zhuǎn)換
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)系都是為了方便用戶設(shè)計(jì)而自定義的坐標(biāo)系,他們的關(guān)系如下圖所示。

模型變換、視變換、投影變換由用戶在頂點(diǎn)著色器中完成。
透視除法、視口變換由OpenGL在頂點(diǎn)著色器處理之后完成。
開發(fā)中,從局部坐標(biāo)系(模型坐標(biāo)系)到裁剪坐標(biāo)系的轉(zhuǎn)變是通過(guò)矩陣運(yùn)算得到的。這三個(gè)矩陣就是MVP矩陣:模型矩陣(M)、觀察矩陣(V)和投影矩陣(P)。
V_clip = M_pro * M_view * M_model * V_local
在頂點(diǎn)著色器中完成計(jì)算后,計(jì)算結(jié)果會(huì)交給gl_Position,OpenGL將會(huì)自動(dòng)計(jì)算透視除法和裁剪。
6.1 模型變換
模型變換的目的是通過(guò)變換,使得用頂點(diǎn)定義或3D模型軟件構(gòu)造的模型,能夠按照需要,通過(guò)縮小、平移、旋轉(zhuǎn)等操作放置到場(chǎng)景中合適的位置。
通過(guò)模型變換后,物體的位置在全局的世界坐標(biāo)系下,世界坐標(biāo)系是所有物體交互的一個(gè)公共坐標(biāo)系。