openGlでobjビューアを作成しようとしています。このプログラムはモデルの顔の線だけを描く必要があるので、ロードする必要があります:
- 頂点:3Dの場合もあれば、4Dの場合もあります。
- 面:ランダムな長さのインデックスリスト。
ここで、面ごとに3つの要素を持つobjファイルのみをロードするので、要素をGL_TRIANGLEモードで描画できますが、一部のモデルで問題が発生しています。
http://people.sc.fsu.edu/~jburkardt/data/obj/icosahedron.obj
ロードフェーズはうまく機能しているようです。問題はrender()関数にあると思います。
static void render(void)
{
glClearColor( 0.0f, 0.0f, 0.0, 0.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBindBuffer(GL_ARRAY_BUFFER, g_resources.vertex_buffer);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(
3, /* size */
GL_FLOAT, /* type */
3*sizeof(GLfloat), /* stride */
(void*)0 /* array buffer offset */
);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_resources.element_buffer);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glDrawElements(
GL_TRIANGLES, /* mode */
theModel->face.size(), /* count */
GL_UNSIGNED_INT, /* type */
(void*)0 /* element array buffer offset */
);
glDisableClientState(GL_VERTEX_ARRAY);
glutSwapBuffers();
}
私もいくつか質問があります:
- インデックスは1または0から始まりますか?
- indeces列挙についてはどうですか?時計回りですか?
- 3つ以上のインデックで顔を三角測量するのは良い解決策ですか?