OpenGL ES 入門(mén)(一)常用函數(shù)

如果你不知道OpenGL 是干什么的,看到這下面這張圖片就知道這到底是干什么的了


簡(jiǎn)單的說(shuō)舌镶,它就是能高性能、高幀率利用GPU提供的2D和3D繪制能力
我先提供一片文章關(guān)于iOS設(shè)備渲染的文章
http://rannie.github.io/ios/2016/02/22/ios-display-opengles.html
也可以查看蘋(píng)果官方文檔https://developer.apple.com/library/content/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/OpenGLESontheiPhone/OpenGLESontheiPhone.html#//apple_ref/doc/uid/TP40008793-CH101-SW1
GLKit框架提供視圖和視圖控制器類餐胀,可以消除繪圖和動(dòng)畫(huà)化OpenGL ES內(nèi)容所需的設(shè)置和維護(hù)代碼。GLKView類管理OpenGL ES的基礎(chǔ)設(shè)施否灾,為您的繪制代碼提供一個(gè)場(chǎng)所,而GLKViewController類提供了在GLKit視圖的OpenGL ES內(nèi)容的流暢的動(dòng)畫(huà)渲染循環(huán)惩阶。這些類擴(kuò)展了用于繪制視圖內(nèi)容和管理視圖呈現(xiàn)的標(biāo)準(zhǔn)UIKit設(shè)計(jì)模式。因此琳猫,您可以將重點(diǎn)放在OpenGL ES渲染代碼上,使您的應(yīng)用程序快速啟動(dòng)并運(yùn)行
之前看落影l(fā)oyinglin寫(xiě)的第一篇關(guān)于OpenGL 的文章,只是了解了大概意思,如果要自己去寫(xiě)的話统刮,根本不知道怎么去寫(xiě),不知道每個(gè)函數(shù)具體怎么用

GLuint buffer;//緩沖區(qū)ID    OpenGL就可以一次綁定到多個(gè)緩沖區(qū)
glGenBuffers (GLsizei n, GLuint* buffers);

這個(gè)函數(shù)的作用:就是生成一個(gè)或者多個(gè)緩沖區(qū)對(duì)象侥蒙,緩沖區(qū)兌現(xiàn)在幕后實(shí)例化,引用ID反悔給用戶訪問(wèn)這些緩沖區(qū)對(duì)象
GLsizei n:定義生成多少個(gè)緩沖區(qū)對(duì)象鞭衩,glGenBuffers將這個(gè)許多緩沖區(qū)ID返回給目標(biāo)buffers數(shù)組
buffers:buffer是一個(gè)GLuint數(shù)組,glGenBuffers存儲(chǔ)生成的緩沖區(qū)ID

glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);

這個(gè)函數(shù)的作用:分配內(nèi)存并將數(shù)據(jù)存儲(chǔ)在當(dāng)前綁定的緩沖區(qū)對(duì)象的初始化內(nèi)存中

  • target:它的第一個(gè)參數(shù)是我們要將數(shù)據(jù)復(fù)制到的緩沖區(qū)的類型 常見(jiàn)的就是GL_ARRAY_BUFFER和- GL_ELEMENT_ARRAY_BUFFER
  • size:要傳遞給緩沖區(qū)的數(shù)據(jù)大小(以字節(jié)為單位)一個(gè)簡(jiǎn)單sizeof的頂點(diǎn)數(shù)據(jù)就足夠了
  • data:我們要發(fā)送的實(shí)際數(shù)據(jù)
  • usage:指定了我們希望顯卡管理給定數(shù)據(jù)的方式瑞佩。這可以采取3種形式:
    • GL_STATIC_DRAW:數(shù)據(jù)很可能根本不會(huì)發(fā)生變化,或很少發(fā)生炬丸。
    • GL_DYNAMIC_DRAW:數(shù)據(jù)可能會(huì)有很大變化蜒蕾。
    • GL_STREAM_DRAW:數(shù)據(jù)將在每次繪制時(shí)更改。
glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr)  

這個(gè)函數(shù)的作用就是:指定了當(dāng)繪制調(diào)用時(shí)OpenGL應(yīng)如何解釋頂點(diǎn)緩沖數(shù)據(jù)咪啡,指定的解釋存儲(chǔ)在當(dāng)前綁定的頂點(diǎn)數(shù)組對(duì)象中

  • indx:指定要配置的頂點(diǎn)屬性。請(qǐng)記住撤摸,我們?cè)陧旤c(diǎn)著色器中指定了位置頂點(diǎn)屬性的位置layout (location = 0)褒纲。這將設(shè)置頂點(diǎn)屬性的位置疾嗅,0因?yàn)槲覀兿胍獙?shù)據(jù)傳遞給該頂點(diǎn)屬性,所以我們傳入0代承。
  • size:參數(shù)指定頂點(diǎn)屬性的大小
  • type:指定GL_FLOAT的數(shù)據(jù)類型(vec*GLSL中的a由浮點(diǎn)值組成)
  • normalized:指定是否要將數(shù)據(jù)歸一化。如果我們將其設(shè)置為GL_TRUE论悴,則所有數(shù)據(jù)的值不在0(或-1對(duì)于帶符號(hào)數(shù)據(jù))之間,1并將映射到這些值膀估。我們把它留在GL_FALSE
  • stride: 告訴我們連續(xù)頂點(diǎn)屬性集之間的空間。請(qǐng)注意察纯,由于我們知道數(shù)組是緊密包裝的(在下一個(gè)頂點(diǎn)屬性值之間沒(méi)有空格),我們也可以指定步驟饼记,0以使OpenGL確定步幅(僅當(dāng)值緊密包裝時(shí)才起作用)。每當(dāng)我們有更多的頂點(diǎn)屬性時(shí)具则,我們必須仔細(xì)定義每個(gè)頂點(diǎn)屬性之間的間距
  • GLvoid* ptr,因此需要奇怪的轉(zhuǎn)換低斋。這是抵消位置數(shù)據(jù)在緩沖區(qū)中開(kāi)始的位置。由于位置數(shù)據(jù)位于數(shù)據(jù)數(shù)組的開(kāi)頭膊畴,所以這個(gè)值是正確的0。
glEnableVertexAttribArray (GLuint index) ````
啟用通用頂點(diǎn)屬性
 - Glint index:指定啟用的頂點(diǎn)屬性的索引

glCreateShader (GLenum type)````
這個(gè)函數(shù)的作用:創(chuàng)建一個(gè)空的著色器對(duì)象巴比,并返回一個(gè)未簽名的飲用ID到該著色器對(duì)象以供進(jìn)一步使用

  • GLenum type:指定要?jiǎng)?chuàng)建的著色器的類型 頂點(diǎn)著色器傳GL_VERTEX_SHADER
glShaderSource (GLuint shader, GLsizei count, const GLchar* const *string, const GLint* length) ````
這個(gè)函數(shù)的作用:將替換給定著色器對(duì)象的源代碼,每當(dāng)著色器被編譯時(shí)轻绞,它是用給定的源代碼進(jìn)行編譯
 - GLuint shader:指定要替換源代碼的著色器對(duì)象
 - GLsizei count:指定string數(shù)組中的元素?cái)?shù)
 - const GLchar* const *string:指定包涵要加載到著色器的源代碼的字符串的指針數(shù)組(頂點(diǎn)著色器的實(shí)際源代碼)
 - const GLint* length:指定字符串長(zhǎng)度的數(shù)組 可以為NULL

glCompileShader (GLuint shader)````
使用附加的著色器對(duì)象的源變異給定的著色器對(duì)象

  • GLuint shader:要編譯的著色器對(duì)象
glCreateProgram()````
創(chuàng)建一個(gè)程序并返回到新創(chuàng)建的程序?qū)ο蟮腎D引用

glAttachShader (GLuint program, GLuint shader) ````
將編譯的著色器對(duì)象附加到著色器程序佣耐,任何數(shù)量的著色器對(duì)象可以附加到著色器程序

  • GLuint program:指定要附加著色器對(duì)象的程序?qū)ο?/li>
  • GLuint shader:指定要附加的著色器對(duì)象
glLinkProgram (GLuint program) 

將所有附加的著色器成連到一個(gè)最終的著色器程序?qū)ο笾屑孀谶B接步驟中既棺,每個(gè)輸出與著色器的每個(gè)輸出匹配

glUseProgram (GLuint program) 

將給定的程序?qū)ο笤O(shè)置為用于后續(xù)繪制命令的當(dāng)前活動(dòng)著色器程序,如果提供一個(gè)值0丸冕,OpenGL將會(huì)使用它的舊繪圖模式

  • GLuint program:要是用的著色器對(duì)象
glDeleteShader (GLuint shader)

刪除給定的著色器對(duì)象

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末薛窥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子诅迷,更是在濱河造成了極大的恐慌,老刑警劉巖罢杉,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異赋秀,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)沃琅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人晌柬,你說(shuō)我怎么就攤上這事∧甑猓” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵屿衅,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我涤久,道長(zhǎng),這世上最難降的妖魔是什么响迂? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮川梅,結(jié)果婚禮上疯兼,老公的妹妹穿的比我還像新娘贫途。我一直安慰自己,他們只是感情好丢早,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著啦扬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扑毡。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天瞄摊,我揣著相機(jī)與錄音,去河邊找鬼换帜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛惯驼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祟牲,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼说贝!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起乡恕,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤俯萎,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后讯屈,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涮母,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年躁愿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沪蓬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡跷叉,死狀恐怖逸雹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情云挟,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布园欣,位于F島的核電站帖世,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏沸枯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一绑榴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧翔怎,春花似錦窃诉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春辅搬,著一層夾襖步出監(jiān)牢的瞬間唯沮,已是汗流浹背堪遂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留溶褪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓吹菱,卻偏偏與公主長(zhǎng)得像巍虫,于是被迫代替她去往敵國(guó)和親鳍刷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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