1. OpenGL圖形專有名詞、坐標(biāo)解析

一沛贪、名詞解析:

1. Context(上下文):

調(diào)用OpenGL之前需要?jiǎng)?chuàng)建一個(gè)context上下文,context就是一個(gè)狀態(tài)機(jī)震贵,記錄OpenGL中各種配置的狀態(tài)利赋。

  • 狀態(tài)機(jī):
    • 有記憶功能,能記住當(dāng)前的狀態(tài)猩系;
    • 可以接收輸入隐砸,根據(jù)輸入的內(nèi)容和當(dāng)前狀態(tài),改變自己的狀態(tài)蝙眶,并產(chǎn)生輸出季希;
    • 當(dāng)進(jìn)入特殊狀態(tài)(停機(jī)狀態(tài)),便不再接收輸入幽纷,停止工作式塌。
  • OpenGL狀態(tài)機(jī):
    • 可以記錄當(dāng)前的狀態(tài)(比如使用的顏色、是否開啟混合等)友浸;
    • 可以接收輸入(如調(diào)用OpenGL的函數(shù)進(jìn)行傳參)峰尝;
    • 可以進(jìn)入停止?fàn)顟B(tài),不再接收輸入收恢。

2. 渲染:

將圖形武学、圖像顯示在屏幕上的過(guò)程就是渲染(Rendering)。

3. 頂點(diǎn)數(shù)組(VertexArray)伦意、頂點(diǎn)緩沖區(qū)(VertexBuffer):

  • 圖形圖像的頂點(diǎn)位置數(shù)據(jù)的數(shù)組存儲(chǔ)在內(nèi)存中火窒,這就是頂點(diǎn)數(shù)組;
  • 渲染過(guò)程中驮肉,在內(nèi)存中獲取頂點(diǎn)數(shù)據(jù)效率低熏矿,所以更高效的做法是存儲(chǔ)在顯存中,這就是頂點(diǎn)緩沖區(qū)。

4. 著色器(Shader):

著色器就是對(duì)GPU編程的代碼段票编,類似于平時(shí)寫的函數(shù)(對(duì)CPU編程的代碼段)褪储。

  • 分類:
    • 頂點(diǎn)著色器(VertexShader)
    • 片元著色器(FragmentShader)/像素著色器(PixelShader): 這兩種名稱只是在OpenGL和DirectX中的不同叫法而已。
    • 幾何著色器(GeometryShader)
    • 曲面細(xì)分著色器(TessellationShader)
  • OpenGL在處理Shader時(shí)慧域,和其他編譯器一樣鲤竹。通過(guò)編譯、鏈接等步驟生成著色器程序(glProgram)昔榴,著色器程序同時(shí)包含頂點(diǎn)著色器和片元著色器的運(yùn)算邏輯宛裕。OpenGL進(jìn)行繪制時(shí):
    • 首先由頂點(diǎn)著色器對(duì)傳入的頂點(diǎn)數(shù)據(jù)進(jìn)行運(yùn)算;
    • 再通過(guò)圖元裝配论泛,將頂點(diǎn)轉(zhuǎn)換為圖元;
    • 然后進(jìn)行光柵化蛹屿,將圖元這種矢量圖形屁奏,轉(zhuǎn)換為柵格化數(shù)據(jù);
    • 最后错负,將柵格化數(shù)據(jù)傳入片元著色器進(jìn)行運(yùn)算坟瓢,片元著色器對(duì)柵格化數(shù)據(jù)中的每一個(gè)像素進(jìn)行運(yùn)算,并決定像素的顏色犹撒。

5. 管線:

OpenGL渲染圖形時(shí)折联,會(huì)經(jīng)歷一個(gè)一個(gè)的節(jié)點(diǎn),而且每個(gè)節(jié)點(diǎn)的先后順序是固定的识颊,類似于流水線诚镰,所以稱之為管線。

  • 固定管線祥款、存儲(chǔ)著色器:早期的OpenGL版本清笨,內(nèi)置了很多固定的shader程序,開發(fā)者只需傳入相應(yīng)的參數(shù)刃跛,就能快速實(shí)現(xiàn)圖形渲染(也就是只能調(diào)用抠艾,無(wú)法自定義);
  • 由于OpenGL的使用場(chǎng)景非常豐富桨昙,固定管線或存儲(chǔ)管線無(wú)法滿足現(xiàn)有的場(chǎng)景检号,這時(shí)將相關(guān)部分開放成可編程。

6. 頂點(diǎn)著色器(VertexShader):

  • 一般用來(lái)處理圖形每個(gè)頂點(diǎn)的變換(平移蛙酪、旋轉(zhuǎn)齐苛、投影等);
  • 頂點(diǎn)著色器是OpenGL中用于計(jì)算頂點(diǎn)屬性桂塞,且是逐頂點(diǎn)運(yùn)算的程序脸狸。每個(gè)頂點(diǎn)數(shù)據(jù)都會(huì)執(zhí)行一次頂點(diǎn)著色器。頂點(diǎn)著色器是并行運(yùn)算,執(zhí)行過(guò)程中無(wú)法訪問(wèn)其他頂點(diǎn)數(shù)據(jù)炊甲;
  • 一般來(lái)說(shuō)需要計(jì)算的頂點(diǎn)屬性包括頂點(diǎn)坐標(biāo)變換泥彤、逐頂點(diǎn)光照運(yùn)算等。頂點(diǎn)坐標(biāo)由自身坐標(biāo)系轉(zhuǎn)換為歸一化坐標(biāo)系的運(yùn)算卿啡,就是在這里發(fā)生吟吝。

7. 片元著色器(FragmentShader):

  • 一般用來(lái)處理圖形中每個(gè)像素點(diǎn)的顏色計(jì)算和填充;
  • 片元著色器是OpenGL中用于計(jì)算片段(像素)顏色颈娜,且是逐像素運(yùn)算的程序剑逃。也就是說(shuō)每個(gè)像素都會(huì)執(zhí)行一次片元著色器,當(dāng)然也是并行執(zhí)行的官辽。

8. GLSL(OpenGL Shading Language):

OpenGL著色語(yǔ)言用來(lái)在OpenGL中著色編程的語(yǔ)言蛹磺,是在圖形卡的GPU(Graphic Processor Unit圖形處理單元)上執(zhí)行的,代替了固定的渲染管線的一部分同仆,使渲染管線中不同層次具有可編程性萤捆。比如視圖轉(zhuǎn)換、投影轉(zhuǎn)換等俗批。
GLSL的著色器代碼分成兩個(gè)部分:頂點(diǎn)著色器(VertexShader)和片元著色器(FragmentShader)俗或。

9. 光柵化(Rasterization):

  • 是把頂點(diǎn)數(shù)據(jù)轉(zhuǎn)換為片元的過(guò)程,具有將圖轉(zhuǎn)換成一個(gè)個(gè)柵格組成的圖像的作用岁忘,特點(diǎn)是每個(gè)元素對(duì)應(yīng)幀緩沖區(qū)中的一個(gè)像素辛慰。
  • 光柵化是將幾何圖元變?yōu)槎S圖像的過(guò)程。該過(guò)程包含兩部分操作:
    • 決定窗口坐標(biāo)中哪些整型柵格區(qū)域被基本圖元占用(也就是確定圖形的像素范圍)干像;
    • 分配一個(gè)顏色值和一個(gè)深度值到各個(gè)區(qū)域(也就是把顏色附著上去)帅腌。
  • 把物體的數(shù)學(xué)描述以及與物體相關(guān)的顏色信息,轉(zhuǎn)換為屏幕上用于對(duì)應(yīng)位置上的像素及用于填充像素的顏色麻汰,這個(gè)過(guò)程成為光柵化狞膘。這是一個(gè)將模擬信號(hào)轉(zhuǎn)化為離散信號(hào)的過(guò)程。

10. 紋理:

紋理可以理解為圖片什乙、位圖挽封。

11. 混合(Blending):

  • 在測(cè)試階段之后,如果像素依然沒(méi)有被剔除臣镣,那么像素的顏色將會(huì)和幀緩沖區(qū)的顏色進(jìn)行混合辅愿,混合的算法可以通過(guò)OpenGL的函數(shù)進(jìn)行指定。也可以通過(guò)片元著色器進(jìn)行實(shí)現(xiàn)忆某,性能會(huì)比原生的混合算法差一些点待。
  • 兩個(gè)半透明的顏色疊加在一起,就是顏色的混合行為弃舒,就會(huì)觸發(fā)離屏渲染癞埠。

12. 變換矩陣(Transformation):

用于圖形的平移状原、縮放、旋轉(zhuǎn)等變換苗踪。

13. 投影矩陣(Projection):

用于將3D坐標(biāo)轉(zhuǎn)換為二維屏幕坐標(biāo)颠区,實(shí)際線條也將在二維坐標(biāo)下進(jìn)行繪制。

二通铲、坐標(biāo)解析

1. 2D笛卡爾坐標(biāo)系

2. 3D笛卡爾坐標(biāo)系

3. 觀察者坐標(biāo)系(Camera)

4. 世界坐標(biāo)系

5. 慣性坐標(biāo)系

6. 物體坐標(biāo)系

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末毕莱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子颅夺,更是在濱河造成了極大的恐慌朋截,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吧黄,死亡現(xiàn)場(chǎng)離奇詭異部服,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)拗慨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門廓八,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人胆描,你說(shuō)我怎么就攤上這事≌淘模” “怎么了昌讲?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)减噪。 經(jīng)常有香客問(wèn)我短绸,道長(zhǎng),這世上最難降的妖魔是什么筹裕? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任醋闭,我火速辦了婚禮,結(jié)果婚禮上朝卒,老公的妹妹穿的比我還像新娘证逻。我一直安慰自己,他們只是感情好抗斤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布囚企。 她就那樣靜靜地躺著,像睡著了一般瑞眼。 火紅的嫁衣襯著肌膚如雪龙宏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天伤疙,我揣著相機(jī)與錄音银酗,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛黍特,可吹牛的內(nèi)容都是我干的蛙讥。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼衅澈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼键菱!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起今布,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤经备,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后部默,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侵蒙,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年傅蹂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纷闺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡份蝴,死狀恐怖犁功,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情婚夫,我是刑警寧澤浸卦,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站案糙,受9級(jí)特大地震影響限嫌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜时捌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一怒医、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奢讨,春花似錦稚叹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至佳镜,卻和暖如春僚稿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蟀伸。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工蚀同, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缅刽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓蠢络,卻偏偏與公主長(zhǎng)得像衰猛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子刹孔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容