OpenGLES-06 使用VBO做渲染

這篇文章其實(shí)不必寫,這位博主講得已經(jīng)很好了http://www.cnblogs.com/kesalin/archive/2012/12/20/vbo.html鸵熟。

還是提出來(lái)的原因是亮蒋,這是一步步的路:
為什么我們要使用VBO扣典?

使用頂點(diǎn)緩存(VBO)能夠大大減少CPU-GPU 之間的數(shù)據(jù)拷貝開銷,因此顯著地提升了程序運(yùn)行的效率慎玖。

既然如此贮尖,那就一定要用VBO。這篇文章我就將《OpenGLES-05 立方體3D變換》里的代碼改為VBO趁怔,閱讀VBO使用請(qǐng)點(diǎn)上面鏈接就好湿硝。

若繪制圖形眾多,你還需考慮使用VAO润努,VAO用法也是比較簡(jiǎn)單的关斜,對(duì)性能提升也很大。這里就提一下铺浇,大家有興趣可以研究下:

每當(dāng)我們繪制一個(gè)幾何體時(shí)痢畜,我們需要重復(fù)同樣的工作(首先綁定緩沖區(qū)、然后設(shè)置頂點(diǎn)屬性)。當(dāng)需要繪制的物體很多時(shí)丁稀,這個(gè)過(guò)程就顯得有些耗時(shí)繁涂。那么我們有沒(méi)有一種方式來(lái)簡(jiǎn)化這一過(guò)程呢?這就是VAO做的事情二驰,它將所有頂點(diǎn)繪制過(guò)程中的這些設(shè)置和綁定過(guò)程集中存儲(chǔ)在一起扔罪,當(dāng)我們需要時(shí),只需要使用相應(yīng)的VAO即可桶雀。
VAO的這種方式有點(diǎn)像一個(gè)中介矿酵,把所有繁瑣的綁定和頂點(diǎn)設(shè)置工作都集中起來(lái)處理,我們需要繪制時(shí)矗积,直接找這個(gè)中介就好了全肮。

所有教程代碼在此 : https://github.com/qingmomo/iOS-OpenGLES-

-(void)render
{
    //設(shè)置清屏顏色,默認(rèn)是黑色,如果你的運(yùn)行結(jié)果是黑色棘捣,問(wèn)題就可能在這兒
    glClearColor(0.3, 0.5, 0.8, 1.0);
    /*
    glClear指定清除的buffer
    共可設(shè)置三個(gè)選項(xiàng)GL_COLOR_BUFFER_BIT辜腺,GL_DEPTH_BUFFER_BIT和GL_STENCIL_BUFFER_BIT
    也可組合如:glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    這里我們只用了color buffer,所以只需清除GL_COLOR_BUFFER_BIT
     */
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_DEPTH_TEST);  //添加
    
    // Setup viewport
    glViewport(0, 0, self.frame.size.width, self.frame.size.height);
    
    GLfloat vertices[] = {
        -0.5f, -0.5f, 0.5f, 1.0, 0.0, 0.0, 1.0,     // red
        -0.5f, 0.5f, 0.5f, 1.0, 1.0, 0.0, 1.0,      // yellow
        0.5f, 0.5f, 0.5f, 0.0, 0.0, 1.0, 1.0,       // blue
        0.5f, -0.5f, 0.5f, 1.0, 1.0, 1.0, 1.0,      // white
        
        0.5f, -0.5f, -0.5f, 1.0, 1.0, 0.0, 1.0,     // yellow
        0.5f, 0.5f, -0.5f, 1.0, 0.0, 0.0, 1.0,      // red
        -0.5f, 0.5f, -0.5f, 1.0, 1.0, 1.0, 1.0,     // white
        -0.5f, -0.5f, -0.5f, 0.0, 0.0, 1.0, 1.0,    // blue
    };

//    GLfloat vertices[] = {
//        -0.5f, -0.5f, 0.5f,
//        -0.5f, 0.5f, 0.5f,
//        0.5f, 0.5f, 0.5f,
//        0.5f, -0.5f, 0.5f,
//        
//        0.5f, -0.5f, -0.5f,
//        0.5f, 0.5f, -0.5f,
//        -0.5f, 0.5f, -0.5f,
//        -0.5f, -0.5f, -0.5f,
//    };
    
    GLubyte indices[] = {
        // Front face
        0, 3, 2, 0, 2, 1,
        
        // Back face
        7, 5, 4, 7, 6, 5,
        
        // Left face
        0, 1, 6, 0, 6, 7,
        
        // Right face
        3, 4, 5, 3, 5, 2,
        
        // Up face
        1, 2, 5, 1, 5, 6,
        
        // Down face
        0, 7, 4, 0, 4, 3
    };
    
    GLuint vertexBuffer;
    glGenBuffers(1, &vertexBuffer);
    glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
    
    GLuint indexBuffer;
    glGenBuffers(1, &indexBuffer);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
    
    glVertexAttribPointer(_positionSlot, 3, GL_FLOAT, GL_FALSE, 7 * sizeof(float), 0);
    glVertexAttribPointer(_colorSlot, 4, GL_FLOAT, GL_FALSE, 7 * sizeof(float), (const GLvoid*)(3 * sizeof(GLfloat)));
    glEnableVertexAttribArray(_positionSlot);
    glEnableVertexAttribArray(_colorSlot);
    glDrawElements(GL_TRIANGLES, sizeof(indices)/sizeof(GLubyte), GL_UNSIGNED_BYTE, 0);
    
    [_context presentRenderbuffer:_renderBuffer];
    
    glDeleteBuffers(1, &vertexBuffer);
    glDeleteBuffers(1, &indexBuffer);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末乍恐,一起剝皮案震驚了整個(gè)濱河市评疗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茵烈,老刑警劉巖百匆,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異呜投,居然都是意外死亡加匈,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門仑荐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)雕拼,“玉大人,你說(shuō)我怎么就攤上這事粘招∩犊埽” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵男图,是天一觀的道長(zhǎng)示姿。 經(jīng)常有香客問(wèn)我甜橱,道長(zhǎng)逊笆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任岂傲,我火速辦了婚禮难裆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己乃戈,他們只是感情好褂痰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著症虑,像睡著了一般缩歪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谍憔,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天匪蝙,我揣著相機(jī)與錄音,去河邊找鬼习贫。 笑死逛球,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的苫昌。 我是一名探鬼主播颤绕,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼祟身!你這毒婦竟也來(lái)了奥务?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤袜硫,失蹤者是張志新(化名)和其女友劉穎汗洒,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體父款,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溢谤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了憨攒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片世杀。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖肝集,靈堂內(nèi)的尸體忽然破棺而出瞻坝,到底是詐尸還是另有隱情,我是刑警寧澤杏瞻,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布所刀,位于F島的核電站,受9級(jí)特大地震影響捞挥,放射性物質(zhì)發(fā)生泄漏浮创。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一砌函、第九天 我趴在偏房一處隱蔽的房頂上張望斩披。 院中可真熱鬧溜族,春花似錦、人聲如沸垦沉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)厕倍。三九已至寡壮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間讹弯,已是汗流浹背诬像。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闸婴,地道東北人坏挠。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像邪乍,于是被迫代替她去往敵國(guó)和親降狠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348