似たようなオブジェクトが画面に表示されるゲームを開発しています。問題は、新しいオブジェクトが追加されるたびに、より多くの頂点を処理する必要があるため、FPSが低下することです。
私はopenGlの初心者なので、パフォーマンスを改善するための一般的なアイデアがいくつかあります。openGlで何ができるのかわかりません。
ほとんどのオブジェクトは同一ですが(同じ数の頂点、同じ色、同じuv、同じ法線)、オブジェクトの位置と回転のみが異なるため、類似したオブジェクトの頂点をそれぞれに1回だけ送信できます。フレームレンダリングしてから、すべてのオブジェクトに対してdrawElementsを呼び出し、オブジェクトの位置のみを変更しますか?
さらに進んで、シーンが最初に作成されたときに一度だけ、それらの同様の頂点をアップロードし、各フレームレンダリングで各オブジェクトのdrawElementsを呼び出すことは可能ですか?
現在、次のように各オブジェクトの頂点を送信しています。
.......
gl.glNormalPointer(GL10.GL_FLOAT, 0, normals);
gl.glColorPointer(4, GL10.GL_UNSIGNED_BYTE, 0, colors);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertices);
gl.glPushMatrix();
gl.glTranslatef(position);
gl.glRotatef(rotation);
gl.glScalef(scale);
gl.glDrawElements(renderType,nr,GL10.GL_UNSIGNED_SHORT, faces);
gl.glPopMatrix();
........
私はこのような何かをすべきだと思っています:
.......
gl.glNormalPointer(GL10.GL_FLOAT, 0, normals);
gl.glColorPointer(4, GL10.GL_UNSIGNED_BYTE, 0, colors);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertices);
for(eachObject)
{
gl.glPushMatrix();
gl.glTranslatef(position);
gl.glRotatef(rotation);
gl.glScalef(scale);
gl.glDrawElements(renderType,nr,GL10.GL_UNSIGNED_SHORT, faces);
gl.glPopMatrix();
........
}