最終更新: mikk_ni3_92 2010年01月27日(水) 18:12:05履歴
現在地 >> メニュー >> 基本編10 >> VertexBufferObject(part3)
関連:VertexBufferObject VertexBufferObject(part2)
glDrawElements関数などのインデックス配列とVBOを使う場合は、
「GL_ARRAY_BUFFER」で頂点座標等のバッファを用意する事に加え、
「GL_ELEMENT_ARRAY_BUFFER」でインデックス用のバッファを用意する。
【例】
関連:VertexBufferObject VertexBufferObject(part2)
glDrawElements関数などのインデックス配列とVBOを使う場合は、
「GL_ARRAY_BUFFER」で頂点座標等のバッファを用意する事に加え、
「GL_ELEMENT_ARRAY_BUFFER」でインデックス用のバッファを用意する。
【例】
float PointAry[6][4][3] ={... ...}; float NormalAry[6][4][3] ={... ...}; float ColorAry[6][4][3] = {... ...}; GLuint idxAry[]={... ...}; //VBO用ID GLuint VboId[3];//3つ分 GLuint VboIdx;//インデックス用 … … glGenBuffers(3, &VboId[0]); //発生 //頂点 glBindBuffer(GL_ARRAY_BUFFER, VboId[0]); //バインド glBufferData(GL_ARRAY_BUFFER, sizeof(PointAry), PointAry, GL_STATIC_DRAW); //法線 glBindBuffer(GL_ARRAY_BUFFER, VboId[1]); //バインド glBufferData(GL_ARRAY_BUFFER, sizeof(NormalAry), NormalAry, GL_STATIC_DRAW); //色 glBindBuffer(GL_ARRAY_BUFFER, VboId[2]); //バインド glBufferData(GL_ARRAY_BUFFER, sizeof(ColorAry), ColorAry, GL_STATIC_DRAW); //インデックス glGenBuffers(1,&VboIdx); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,VboIdx); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(idxAry), idxAry, GL_STATIC_DRAW); … … //格納場所を伝える glBindBuffer(GL_ARRAY_BUFFER, VboId[0]); //バインド glVertexPointer(3, GL_FLOAT, 0, 0); glBindBuffer(GL_ARRAY_BUFFER, VboId[1]); //バインド glNormalPointer(GL_FLOAT, 0, 0); glBindBuffer(GL_ARRAY_BUFFER, VboId[2]); //バインド glColorPointer(3,GL_FLOAT, 0, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,VboIdx);//インデックスをバインド //有効化して描画 glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glDrawElements(GL_QUADS,24,GL_UNSIGNED_INT,0);//描画 glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_VERTEX_ARRAY);