我正在开发一个游戏,在屏幕上呈现类似的对象。问题是每次添加一个新对象,都需要处理更多的顶点,因此 FPS 会降低。
由于我是openGl的初学者,我对提高性能有一些一般性的想法,我只是不知道openGl允许我做什么。
由于我的大多数对象都是相同的(相同数量的顶点、相同的颜色、相同的 uv 和相同的法线),但只有对象的位置和旋转不同,是否可以在每个对象上只发送一次相似对象的顶点frame render ,然后为所有对象调用 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();
........
}