0

ユーザーがキャンバスをクリックして頂点を指定し、頂点を使用してポリゴンを描画できるグラフィックアプリを構築中です。

アプリは、ライン、トライアングル、ポリゴン モードをサポートしています。線と三角形の描画は、クリック数をカウントすることによって行われます。次に、頂点配列が作成され、データがバッファにバインドされ、 を使用してレンダリングされますglDrawArrays()。難しいのはポリゴンモードです。ユーザーは任意の数の頂点を指定でき、マウスの右ボタンをクリックすると描画がトリガーされます。最初は を使用する予定でしたglMultiDrawElementsが、どういうわけか出力が得られませんでした。そこでglDrawElements()、ループで呼び出してみました。まだ運がない。glDrawElements()/glMultiDrawElements()VBO と VAO の使用、glVertexPointer()およびとの使用に関する多くのドキュメントを検索して読みましたglColorPointer。まだ運がありません。

頂点属性を追跡するために以下を使用しました。

GLfloat ** polygonVertices; //すべてのポリゴン頂点リストがこれに入る..
Gluint * polygonIndicesCounts; //各ポリゴンが持っている頂点の数を保持するポインター
** polygonIndices; //ポリゴンに対応する頂点のインデックスを保持するポインタの配列
GLfloat * polygonColors; //マウスをクリックするたびに、色がランダムに生成されます。

およびレンダリング用のコード:

glVertexPointer(4, GL_FLOAT, 0, (GLvoid*)polygonVertices);
glEnableClientState(GL_VERTEX_ARRAY);

glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_FLOAT, 0, (GLvoid*)polygonColors);

//glMultiDrawElements(GL_POLYGON, polygonIndicesCounts, GL_UNSIGNED_INT, polygonIndices, polygonCount);

for(int i = 0 ; i < polygonCount; i ++)
    glDrawElements(GL_POLYGON, polygonIndicesCounts[i], GL_UNSIGNED_INT, polygonIndices[i]);
4

1 に答える 1

1

ポインターへのpolygonVerticesポインターはなぜですか? それをキャストすると(void*)、OpenGLが見るのは、それぞれが指すポインターの値だけです。それらをフラットな配列にする必要があるため、型シグネチャはfloat*(not float**) と互換性がある必要があります。ポインターへのポインターは、glMultiDrawArrays呼び出しに対してのみ意味があります。

于 2013-09-09T10:20:32.270 に答える