OpenGL 常用函數(shù)

2.1.4 坐標(biāo)系統(tǒng)工具箱

窗口大小變化時(shí),在glutReshapeFunc()中注冊(cè)的漢莎會(huì)被調(diào)用,在回調(diào)函數(shù)中,完成下列任務(wù):

  • 重新建立一個(gè)矩形區(qū)域,把它作為新的渲染畫布。

  • 定義一個(gè)用于繪制物體的坐標(biāo)系統(tǒng)。

2.1.5 點(diǎn),線,多邊形

  • 點(diǎn):所有的頂點(diǎn)都是用4個(gè)浮點(diǎn)坐標(biāo)值來(lái)表示的(x,y,z,w)w默認(rèn)是1.0.

  • 線:直線這個(gè)術(shù)語(yǔ)一般表示一段線段。

  • 多邊形:幾個(gè)點(diǎn)連在一起就是一個(gè)多邊形,可以填充內(nèi)部,也可以只繪制邊框。

  • 矩形:OpenGL特別提供了填充矩形圖元函數(shù)glRect*(),

void glRect {sifd}(TYPE x1,TYPE y1,TYPE x1,TYPE y1);繪制由(x1,y1),(x2,y2)構(gòu)成矩形,并且與x軸和y軸平行。

glVertex3d(GLdouble x, <#GLdouble y#>, <#GLdouble z#>) 表示一個(gè)頂點(diǎn)坐標(biāo)

如下代碼繪制一個(gè)多邊形

void RenderScene(void)

{
    glBegin(GL_POLYGON);
    glVertex2f(0.0, 0.0);
    glVertex2f(0.0, .5);
    glVertex2f(.3, .7);
    glVertex2f(.45, .5);
    glVertex2f(.6, 0.3);
    glEnd();
     glutSwapBuffers();
  }
Snip20190524_1.png

在opengl中只有點(diǎn)線和三角形,一些復(fù)雜的圖形都是由他們堆砌而成。

將輸入圖元的數(shù)學(xué)描述轉(zhuǎn)化為與屏幕位置對(duì)應(yīng)的像素片元的過(guò)程稱為光柵化。
渲染(render):計(jì)算機(jī)從模型創(chuàng)建最終圖像的過(guò)程。
OpenGL 另一個(gè)最本質(zhì)的概念叫做著色器,它是圖形硬件設(shè)備所執(zhí)行的一類特殊函數(shù)。 理解著色器最好的方法是把它看做專為圖形處理單元(通常也叫做 GPU)編譯的一種小型程序。
在 OpenGL 中,會(huì)用到四種不同的著色階段(shader stage)。其中最常用的包括 的頂點(diǎn)著色器(vertex shader)以及片元著色器,前 者用于處理頂點(diǎn)數(shù)據(jù),后者用于處理光柵化后的片元數(shù)據(jù)。
像素(pixel)是顯示器上最小的可見單元。計(jì) 算機(jī)系統(tǒng)將所有的像素保存到幀緩存(framebuffer) 當(dāng)中,后者是由圖形硬件設(shè)備管理的一塊獨(dú)立內(nèi)存 區(qū)域,可以直接映射到最終的顯示設(shè)備上。
OpenGL語(yǔ)法
OpenGL 庫(kù) 中 所 有 的 函 數(shù) 都 會(huì) 以 字 符“ gl ” 作 為 前 綴,然后是一個(gè)或者多個(gè)大寫字母開頭的詞組,以此來(lái)命名一個(gè)完整的函數(shù)。OpenGL 庫(kù)中定義的常量也是 GL_COLOR_BUFFER_BIT 的形 式,如 display() 函數(shù)中所示。所有的常量都以 GL_ 作為前綴,并且使用下劃線來(lái)分隔單詞。為了能夠方便地在不同的操作系統(tǒng)之間移植 OpenGL 程序,OpenGL 還為函數(shù)定義了 不同的數(shù)據(jù)類型,例如 GLfloat 是浮點(diǎn)數(shù)類型。
OpenGL 渲染管線

Snip20190529_4.png

著色器是專門為gpu編譯的小型應(yīng)用程序,而渲染管線指的是數(shù)據(jù)處理過(guò)程,可以看做一個(gè)流水線,首先接受頂點(diǎn)數(shù)據(jù),然后由頂點(diǎn)著色器處理,生成圖元,再經(jīng)過(guò)細(xì)分著色器,幾何著色器,進(jìn)行圖元設(shè)置,裁剪,光柵化處理(輸入的數(shù)據(jù)轉(zhuǎn)換成屏幕位置對(duì)應(yīng)的像素點(diǎn))生成片元數(shù)據(jù),送給片元著色器處理。

  • 準(zhǔn)備向 OpenGL 傳輸數(shù)據(jù)
    OpenGL需要把數(shù)據(jù)保存到緩存對(duì)象中,它相當(dāng)于OpenGL管理的一塊內(nèi)存區(qū)域。
  • 將數(shù)據(jù)傳輸?shù)?OpenGL
    OpenGL數(shù)據(jù)初始化完成,需要調(diào)用一個(gè)繪制命令來(lái)請(qǐng)求渲染幾何圖元。glDrawArrays() 就是一個(gè)常用的繪制命令。
  • 頂點(diǎn)著色
    對(duì)于每一個(gè)頂點(diǎn),都會(huì)有一個(gè)頂點(diǎn)著色器來(lái)專門處理此頂點(diǎn)相關(guān)的數(shù)據(jù)??赡苓M(jìn)行一些復(fù)雜的操作(矩陣變換等)來(lái)得到頂點(diǎn)在屏幕上的位置。
  • 細(xì)分著色
    使用patch描繪物體的形狀,生成最終的形狀。
    -幾何著色
    進(jìn)一步細(xì)化。
  • 圖元裝配
    前面介紹的著色階段所處理的都是頂點(diǎn)數(shù)據(jù),此外這些頂點(diǎn)之間如何構(gòu)成幾何圖元的所有信息也會(huì)被傳遞到OpenGL中,圖元裝配階段將這些頂點(diǎn)以及相關(guān)的幾何圖元組織起來(lái)。
  • 剪切
    視口是我們可以進(jìn)行繪制的窗口區(qū)域,有的頂點(diǎn)落在視口之外,與之相關(guān)的圖元會(huì)做出改動(dòng),保證相關(guān)的像素不在窗口之外繪制。
  • 光柵化
    更新后的圖元轉(zhuǎn)化成片元,片元可以視為一個(gè)”候補(bǔ)的像素“,也就是可以放在幀緩沖中的像素。
  • 片元著色
    通過(guò)編程來(lái)控制屏幕上顯示顏色的階段。
    我們可以用這種方法來(lái)理解頂點(diǎn)著色器和片元著色器的區(qū)別:頂點(diǎn)著色(包括細(xì)分和幾何著色)決定了一個(gè)圖元應(yīng)該在屏幕的什么位置,而片元著色使用這些信息來(lái)決定某個(gè)片元的顏色應(yīng)該是什么顏色。
  • 逐片化的操作
    使用深度測(cè)試和模板測(cè)試來(lái)決定一個(gè)片元是否可見。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • package 寬度優(yōu)先搜索; import java.util.HashSet; import java.uti...
    咣超閱讀 178評(píng)論 0 0
  • 創(chuàng)建多重索引 查詢索引為1,3,6的值 多重索引Series切片 多重索引DataFrame 多重索引設(shè)置列名稱 ...
    七七biubiu閱讀 263評(píng)論 0 0
  • UserCF ?本系列文章主要介紹推薦系統(tǒng)領(lǐng)域相關(guān)算法原理及其實(shí)現(xiàn)。本文以項(xiàng)亮大神的《推薦系統(tǒng)實(shí)踐》作為切入點(diǎn),介...
    Alarical閱讀 247評(píng)論 0 0
  • 昨晚看了何老師主演的話劇《水中之書》。得以看成,有些自己的小執(zhí)念,也有些小幸運(yùn)。執(zhí)念是因?yàn)樵缭趲讉€(gè)月前就做好要去觀...
    曉天狼星閱讀 209評(píng)論 0 0
  • 網(wǎng)上處處有雞湯,今天微信里有人轉(zhuǎn)載了一篇,說(shuō)是要控制情緒的。 原文的故事如下: 這是一場(chǎng)舉世矚目的賽事。臺(tái)球世界冠...
    心際花園閱讀 245評(píng)論 0 0

友情鏈接更多精彩內(nèi)容