glnterleavedArrays

glinterleavedarrays.png

glnterleavedArrays(GLenum format, GLsizei stride, GLvoid* pointer);

format

GL_V2F
GL_V3F
GL_C4UB_V2F
GL_C4UB_V3F
GL_C3F_V3F
GL_N3F_V3F
GL_C4F_N3F_V3F
GL_T2F_V3F
GL_T4F_V4F
GL_T2F_C4UB_V3F
GL_T2F_C3F_V3F
GL_T2F_N3F_V3F
GL_T2F_C4F_N3F_V3F
GL_T4F_C4F_N3F_V4F
Cはカラー,Tはテクスチャ座標,Nは法線ベクトル,Vは頂点座標を示し,数字は要素数を示しており,Fはfloat型,UBはunsigned byteを意味しています。
第二引数のstrideには,配列内でのバイトのオフセットを指定します。
第三引数のpointerには,インターリーブ配列内での位置を指定するポインタを指定します。
あとは,glDrawElement()関数を呼び出して一気に描画します。glDrawElements()関数の第一引数にはglBegin()関数の引数で指定するのと同じようにプリミティブの種類を指定します。第二引数にはレンダリング要素の数を指定します。第三引数にはインデックスデータのデータ型を指定します。ほとんどの場合はunsigned short型かunsigned int型でインデックスデータを定義すると思うので,GL_UNSIGNED_SHORTまたはGL_UNSIGNED_INTを指定しておけばいいと思います。第四引数にはインデックス指標を保存する配列へのポインタを指定します。しかし今回はBuffer Objectを使うので,第四引数はヌルポインタを渡しておきます。
一応こんな感じで描画できることはできたんですが,合っているんですかね?合っていないかもしれないので注意してください。

サポートサイト Wikidot.com