現在地 >> メニュー >> 基本編10 >> VertexBufferObject(part3)
関連:VertexBufferObject VertexBufferObject(part2)

インデックスとVBO


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);

サンプルコード

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます