Storing Vertex Attributes
各メッシュデータには、
- 頂点座標(v)
- 法線(n)
- テクスチャ座標(tc)
を準備し、サーバにストアする必要がある。
サーバにストアするとき、データの格納方法は2通りある。
サーバにストアするとき、データの格納方法は2通りある。
- 各データを配列で格納
- 構造体で格納
各データを配列で格納
v | v | v | v | v | v |
n | n | n | n | n | n |
tc | tc | tc | tc | tc | tc |
glFloat v[] = { ... };
glFloat n[] = { ... };
glFloat tc[] = { ... };
glVertexAttribPointer(vIndex, 3, GL_FLOAT, GL_FALSE, 0, v);
glVertexAttribPointer(nIndex, 3, GL_FLOAT, GL_FALSE, 0, n);
glVertexAttribPointer(tcIndex, 2, GL_FLOAT, GL_FALSE, 0, tc);
glEnableVertexAttribArray(vIndex);
glEnableVertexAttribArray(nIndex);
glEnableVertexAttribArray(tcIndex);
構造体で格納
struct VertexData { GLfloat tc[2]; GLfloat n[3]; GLfloat v[3]; };
tc | n | v | tc | n | v | tc | n | v |
VertexData verts[];
glVertexAttribPointer(vIndex, 3, GL_FLOAT, GL_FALSE, sizeof(VertexData), verts[0].v);
glVertexAttribPointer(vIndex, 3, GL_FLOAT, GL_FALSE, sizeof(VertexData), verts[0].n);
glVertexAttribPointer(vIndex, 2, GL_FLOAT, GL_FALSE, sizeof(VertexData), verts[0].tc);
glEnableVertexAttribArray(vIndex);
glEnableVertexAttribArray(nIndex);
glEnableVertexAttribArray(tcIndex);
ストア時は、パラメータにオフセットを与える。