2 つの異なるオブジェクトがあり、それらを 1 つのシーン内でレンダリングしたいと考えています。
最初のオブジェクトを初期化するときに、このコードを呼び出します。
float f[] = {
-0.1f, 0.1f, 0.1f,
0.1f, 0.1f, 0.1f,
0.1f,-0.1f, 0.1f,
-0.1f,-0.1f, 0.1f,
-0.1f, 0.1f,-0.1f,
0.1f, 0.1f,-0.1f,
0.1f,-0.1f,-0.1f,
-0.1f,-0.1f,-0.1f
};
float c[] = {
1.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 1.0f,
1.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 1.0f,
1.0f, 0.0f, 0.0f,
1.0f, 0.0f, 0.0f,
};
unsigned int indarr[] = {2,3,6,7,4,3,0,2,1,6,5,4,1,0};
glGenBuffers(2, vbo);
pos = vbo[0]; // Der Buffer für die Position
col = vbo[1]; // Der BUffer für die Farbe
glBindBuffer(GL_ARRAY_BUFFER, pos);
glBufferData(GL_ARRAY_BUFFER, sizeof(f),f,GL_STATIC_DRAW); // Befüllen
glBindBuffer(GL_ARRAY_BUFFER, col);
glBufferData(GL_ARRAY_BUFFER, sizeof(c),c,GL_STATIC_DRAW); // Befüllen
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, pos);
glVertexAttribPointer(0, 3, GL_FLOAT,GL_FALSE, 3*sizeof(float),0);
glBindBuffer(GL_ARRAY_BUFFER, col);
glVertexAttribPointer(1, 3, GL_FLOAT,GL_FALSE, 3*sizeof(float),0);
glGenBuffers(1, &ind);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ind);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indarr),indarr,GL_STATIC_DRAW);
render 関数内のコードは次のとおりです。
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ind);
glBindVertexArray( vao );
glDrawElements(GL_TRIANGLE_STRIP, 14, GL_UNSIGNED_INT, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
シーン内でこのオブジェクトをレンダリングすると、すべて正常に動作します。別のオブジェクトを作成しようとしたときに問題が発生しました。コードは上記のサンプルのように見えますが、唯一の違いは、f、c、および intarr 配列を変更したことです。オブジェクトが異なって見えるはずだからです。2 番目のオブジェクトでは、それほど多くの頂点は必要ないので、indarr[] を変更しました (短くしました)。問題は、最初のオブジェクトがその変更の影響を受けているように見えることです。
シーンは次のようになります
obj1->render();
obj2->render();
誰かが私を助けて、何が起こるか教えてもらえますか? 特に、なぜそれらが互いに影響し合っているのですか?
編集:
うーん、私は最終的にエラーを修正しました、
古いレンダリング関数は次のようになります。
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ind);
glBindVertexArray( vao );
glDrawElements(GL_TRIANGLE_STRIP, 14, GL_UNSIGNED_INT, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
私はこれを次のように変更しました:
glBindVertexArray( vao );
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ind);
glDrawElements(GL_TRIANGLE_STRIP, 14, GL_UNSIGNED_INT, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
そして今、それは機能します。エラーが発生した理由はまだわかりません。多分誰かが今それを説明できますか?