日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

OpenGL-坐标系

發(fā)布時(shí)間:2023/12/10 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenGL-坐标系 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

笛卡爾坐標(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。