OpenGLを使用してWRL(VRML)ファイルに記述されているオブジェクトをモデル化しようとしています。glDrawElementsを使用してWRL(VRML)ファイルからオブジェクトを描画する
私は実際にファイルを解析することには関心がありません。私はその部分がかなりストレートであると考えています。この段階では、頂点配列とインデックス配列をハードコードして、WRL入力ファイルを一般化できるようにこの関数の仕組みをよく理解できるようにしようとしています。
私は基本的なボックス(直角プリズム)モデルを最初に試しています。
GLfloat vertices[] = {
-0.200000, -0.025000, -0.050000,
-0.200000, -0.025000, 0.050000,
-0.200000, 0.025000, -0.050000,
-0.200000, 0.025000, 0.050000,
0.200000, -0.025000, -0.050000,
0.200000, -0.025000, 0.050000,
0.200000, 0.025000, -0.050000,
0.200000, 0.025000, 0.050000
};
と、このインデックス配列:
GLubyte indices[] = {
7, 3, 5, -1, 5, 3, 1, -1,
6, 2, 7, -1, 7, 2, 3, -1,
4, 0, 6, -1, 6, 0, 2, -1,
5, 1, 4, -1, 4, 1, 0, -1,
2, 0, 3, -1, 3, 0, 1, -1,
4, 6, 5, -1, 5, 6, 7, -1
};
WRLファイルCoordinate3 {point []}
とIndexedFaceSet {coordIndex []}
から直接来た私は現在、この頂点配列を持っています。
私はその後呼び出すことで、頂点配列の機能を有効にします。
glEnableClientState(GL_VERTEX_ARRAY);
とglVertexPointerを設定する:
glVertexPointer(3, GL_FLOAT, 0, vertices);
最終的に私はglDrawElementsボックスを描画する機能を使用します。
glDrawElements(GL_POLYGON, 24, GL_UNSIGNED_BYTE, indices);
と頂点配列の機能を無効にする:
glDisableClientState(GL_VERTEX_ARRAY);
正しいのであれば、この後、私は描画するボックスを期待する、と私はglDrawElements(GL_POINTS, 24, GL_UNSIGNED_BYTE, indices);
を使用するときにどのようにepectedとして、それは8つの頂点を示しています頂点が線で結合され、ボックスが期待通りに表示されます(途中にポイントがある場合を除き、カウント引数として26を使用すると、中央のポイントが消えます)
ただし、GL_POLYGONまたはGL_LINE_LOOP glDrawElementsの最初の引数で、私はゴミを得る。明らかに8つの頂点がありますが、それらは本当に奇妙な方法で結合されています。
私は今はかなり混乱しています。私はこれを正しくやっているのかどうかもわかりません。おそらく、誰かが少なくとも私を正しい方向に向けるだろうか?
これはもっと複雑な3Dシェイプでも機能しますか、これをレンダリングするより良い方法がありますか? – jacobappleton
多かれ少なかれ、すべてがレンダリングされる方法です。 'GL_TRIANGLE_STRIP'を使うこともできますが、セットアップ作業が必要です。インデックスリストを正しく作成する必要があります。 –