2 つの異なるモデルの頂点データを格納する構造体があります。1 つは立方体で、もう 1 つはピラミッドです。
struct Model{
GLuint vboID;
GLfloat* vbo;
GLuint vaoID;
GLfloat* vao;
GLuint vertexStart;
GLuint vertexCount;
};
vbo を作成し、次のようにバッファーを生成します。
Model cubeModel;
Model pyramidModel;
cubeModel.vbo = cubeVerts; //A GLfloat array I created earlier in code earlier.
cubeModel.vertexCount= sizeof(cubeVerts);//size of the GLfloat array in bytes
pyramidModel.vbo = pyVerts;
pyramidModel.vertexCount= sizeof(pyVerts);
glGenBuffers(1, &cubeModel.vboID); //Generate a buffer for the vertices
glBindBuffer(GL_ARRAY_BUFFER, cubeModel.vboID); //Bind the vertex buffer
glBufferData(GL_ARRAY_BUFFER, cubeModel.vertexCount, cubeModel.vbo, GL_STATIC_DRAW);
そして、私が使用する描画する:
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, cubeModel.vertexCount);
glDisableClientState(GL_VERTEX_ARRAY);
どちらが機能し、立方体をうまく描画できますが、ピラミッドを描画する方法も複数試しています。
両方を同時に画面に表示するにはどうすればよいですか?
編集:ここで私が具体的に試したのは、glBufferData() 呼び出しを複製してピラミッド データを渡し、次に glDrawArays(GL_TRIANGLES,0,cubeModel.drawcount+pyramidModel.drawCount) を作成して、頂点データがスタックし、glDrawArrays がすべて通過することです。ジオメトリは一度に渡されました。
また、glGenBuffers() から glDisableClientState() までの 2 セットの命令を作成しようとしましたが、代わりにすべてのピラミッド モデルのデータを使用しました。私のglDrawArraysは次のとおりだったので、これは興味深いものでした。
glDrawArrays(GL_TRIANGLES, 0, cubeModel.drawCount);
glTranslatef(4.0f,0.0f,0.0f);
glDrawArrays(GL_TRIANGLES, 0, pyramidModel.drawCount);
そして、本当にめちゃくちゃなピラミッドを2回描画することになり、2回目に glBufferData() を呼び出すと、以前に渡されたデータが上書きされると信じるようになりました。
編集 2:Andon のコメントを読んだ後、コードの一部を編集して明確にしました。drawCount は vertexCount になり、m_vertexBuffer は、以前使用していた古いクラス変数を使用する代わりに、cubeModel に保存したハンドルを正しく参照するようになりました。ハンドルを収納。