OpenGL - 關(guān)于頂點(diǎn)屬性的理解

標(biāo)準(zhǔn)化設(shè)備坐標(biāo)

標(biāo)準(zhǔn)化設(shè)備坐標(biāo)

坐標(biāo)

    GLfloat vertex[4*3] =
    {
        -0.5f,  0.5f, 0.0f,     //x,y,z
         0.5f,  0.5f, 0.0f,       
        -0.5f, -0.5f, 0.0f,     
         0.5f, -0.5f, 0.0f,       
    };
坐標(biāo)

坐標(biāo) + 顏色

    GLfloat vertex[ 4* (3+4)] =
    {
        -0.5f,  0.5f, 0.0f,       0.0f, 0.0f, 0.5f, 1.0f, //x,y,z,   r,g,b,a
         0.5f,  0.5f, 0.0f,       0.0f, 0.5f, 0.0f, 1.0f,
        -0.5f, -0.5f, 0.0f,       0.5f, 0.0f, 1.0f, 1.0f,
         0.5f, -0.5f, 0.0f,       0.0f, 0.0f, 0.5f, 1.0f,
    };
坐標(biāo) + 顏色

坐標(biāo) + 顏色 + 紋理

    GLfloat vertex[ 4* (3+4+2)] =
    {   //x,y,z,                  r,g,b,a                  s,t
        -0.5f,  0.5f, 0.0f,       0.0f, 0.0f, 0.5f, 1.0f,  0.0f, 1.0f,
         0.5f,  0.5f, 0.0f,       0.0f, 0.5f, 0.0f, 1.0f,  1.0f, 0.0f,
        -0.5f, -0.5f, 0.0f,       0.5f, 0.0f, 1.0f, 1.0f,  0.0f, 1.0f,
         0.5f, -0.5f, 0.0f,       0.0f, 0.0f, 0.5f, 1.0f,  1.0f, 1.0f,
    };
坐標(biāo) + 顏色 + 紋理

VBO - VAO - EBO(或者叫IBO)

VBO - VAO
VBO - VAO - EBO

關(guān)于OpenGL ES 的頂點(diǎn)屬性配置 :

// Named vertex attributes for mapping GLKEffects logic to client vertex attrib enables
typedef NS_ENUM(GLint, GLKVertexAttrib)
{
    GLKVertexAttribPosition,    //坐標(biāo)
    GLKVertexAttribNormal,      //這個(gè)暫時(shí)不知道是什么.
    GLKVertexAttribColor,       //顏色
    GLKVertexAttribTexCoord0,   //紋理0
    GLKVertexAttribTexCoord1    //紋理1
} NS_ENUM_AVAILABLE(10_8, 5_0);

OpenGL ES - GLKBaseEffect中知道

 // 為每個(gè)頂點(diǎn)屬性創(chuàng)建和初始化VBO
  // 下面的例子顯示了一個(gè)建立position vertex屬性的例子纺铭。
  // 對(duì)每個(gè)附加的所需屬性重復(fù)以下步驟:normal粘拾,color,texCoord0弓乙,texCoord1渔欢。

  glGenBuffers(1, &positionVBO);
  glBindBuffer(GL_ARRAY_BUFFER, positionVBO);
  glBufferData(GL_ARRAY_BUFFER, vboSize, dataBufPtr, GL_STATIC_DRAW);
  glVertexAttribPointer(GLKVertexAttribPosition, size, type, normalize, stride, NULL);
  glEnableVertexAttribArray(GLKVertexAttribPosition);

  ... 對(duì)其他所需的頂點(diǎn)屬性重復(fù)上述步驟

注意 :

頂點(diǎn)索引的描述順序 :

  • 正面 : 逆時(shí)針
  • 反面 : 順時(shí)針

在Xcode中開(kāi)發(fā)的話. 形式可以為 :

//頂點(diǎn)數(shù)據(jù)游桩,前三個(gè)是頂點(diǎn)坐標(biāo)桩皿, 中間三個(gè)是頂點(diǎn)顏色,    最后兩個(gè)是紋理坐標(biāo)
    GLfloat attrArr[] = {
        -0.5f,  0.5f, 0.0f,  0.0f, 0.0f, 1.0f, 1.0f,    0.0f, 1.0f,
         0.5f,  0.5f, 0.0f,  0.0f, 1.0f, 0.0f, 1.0f,    1.0f, 1.0f,
        -0.5f, -0.5f, 0.0f,  1.0f, 0.0f, 1.0f, 1.0f,    0.0f, 0.0f,
         0.5f, -0.5f, 0.0f,  0.0f, 0.0f, 1.0f, 1.0f,    1.0f, 0.0f,
    };
    //頂點(diǎn)索引
    GLuint indices[] = {
        0, 1, 2,
        1, 2, 3,
    };
    
    GLuint buffer;
    glGenBuffers(1, &buffer);
    glBindBuffer(GL_ARRAY_BUFFER, buffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(attrArr), attrArr, GL_STATIC_DRAW);
    
    GLuint index;
    glGenBuffers(1, &index);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
    
    //坐標(biāo)
    glEnableVertexAttribArray(GLKVertexAttribPosition);
    glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 9, (GLfloat *)NULL);

    //頂點(diǎn)顏色
    glEnableVertexAttribArray(GLKVertexAttribColor);
    glVertexAttribPointer(GLKVertexAttribColor, 4, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 9, (GLfloat *)NULL + 3);
   
    //紋理屬性0
    glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
    glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 9, (GLfloat *)NULL + 3 + 4);

    //紋理屬性1
    glEnableVertexAttribArray(GLKVertexAttribTexCoord1);
    glVertexAttribPointer(GLKVertexAttribTexCoord1, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 9, (GLfloat *)NULL + 3 + 4);
    
    //加載紋理
    NSString* filePath0 = [[NSBundle mainBundle] pathForResource:@"texture0.jpg" ofType:@""];
    NSDictionary* options0 = [NSDictionary dictionaryWithObjectsAndKeys:@(1), GLKTextureLoaderGenerateMipmaps, nil];
    GLKTextureInfo* textureInfo0 = [GLKTextureLoader textureWithContentsOfFile:filePath0 options:options0 error:nil];
    self.mEffect.texture2d0.enabled = GL_TRUE;
    self.mEffect.texture2d0.name = textureInfo0.name;
    
    //加載紋理
    NSString* filePath1 = [[NSBundle mainBundle] pathForResource:@"texture1.png" ofType:@""];
    NSDictionary* options1 = [NSDictionary dictionaryWithObjectsAndKeys:@(1), GLKTextureLoaderOriginBottomLeft, nil];
    GLKTextureInfo* textureInfo1 = [GLKTextureLoader textureWithContentsOfFile:filePath1 options:options1 error:nil];
    self.mEffect.texture2d1.enabled = GL_TRUE;
    self.mEffect.texture2d1.name = textureInfo1.name;

PS : self.mEffect

- (GLKBaseEffect *)mEffect {
    if (_mEffect == nil) {
        _mEffect = [[GLKBaseEffect alloc]init];
    }
    return _mEffect;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谒获,一起剝皮案震驚了整個(gè)濱河市蛤肌,隨后出現(xiàn)的幾起案子壁却,更是在濱河造成了極大的恐慌,老刑警劉巖裸准,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件展东,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡炒俱,警方通過(guò)查閱死者的電腦和手機(jī)盐肃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)权悟,“玉大人砸王,你說(shuō)我怎么就攤上這事÷透螅” “怎么了谦铃?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)榔昔。 經(jīng)常有香客問(wèn)我驹闰,道長(zhǎng),這世上最難降的妖魔是什么撒会? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任嘹朗,我火速辦了婚禮,結(jié)果婚禮上诵肛,老公的妹妹穿的比我還像新娘屹培。我一直安慰自己,他們只是感情好怔檩,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布褪秀。 她就那樣靜靜地躺著,像睡著了一般珠洗。 火紅的嫁衣襯著肌膚如雪溜歪。 梳的紋絲不亂的頭發(fā)上若专,一...
    開(kāi)封第一講書(shū)人閱讀 49,785評(píng)論 1 290
  • 那天许蓖,我揣著相機(jī)與錄音,去河邊找鬼调衰。 笑死膊爪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嚎莉。 我是一名探鬼主播米酬,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼趋箩!你這毒婦竟也來(lái)了赃额?” 一聲冷哼從身側(cè)響起加派,我...
    開(kāi)封第一講書(shū)人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎跳芳,沒(méi)想到半個(gè)月后芍锦,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡飞盆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年娄琉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吓歇。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡孽水,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出城看,到底是詐尸還是另有隱情女气,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布测柠,位于F島的核電站主卫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鹃愤。R本人自食惡果不足惜簇搅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望软吐。 院中可真熱鬧瘩将,春花似錦、人聲如沸凹耙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肖抱。三九已至备典,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間意述,已是汗流浹背提佣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留荤崇,地道東北人拌屏。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像术荤,于是被迫代替她去往敵國(guó)和親倚喂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

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