Android OpenGL ES-使用GLTRANSTEF或直接更新顶点

Android OpenGL ES-使用GLTRANSTEF或直接更新顶点,android,opengl-es,Android,Opengl Es,如果我的应用程序修改对象顶点而不是使用glTranslatef,性能会提高吗 NPC对象的顶点设置如下:;由于以前调用了gl.glScalef() 目前,我在屏幕上绘制了一组NPC对象,当它们移动时,X和Y值会更新,myonDraw会访问这些对象以将NPC绘制到正确的位置 onDraw(GL10 gl){ for(int i=0; i<npcs.size(); i++){ NPC npc = npcs.get(i); npc.move();

如果我的应用程序修改对象顶点而不是使用
glTranslatef
,性能会提高吗

NPC对象的顶点设置如下:;由于以前调用了
gl.glScalef()

目前,我在屏幕上绘制了一组NPC对象,当它们移动时,X和Y值会更新,my
onDraw
会访问这些对象以将NPC绘制到正确的位置

onDraw(GL10 gl){
    for(int i=0; i<npcs.size(); i++){
        NPC npc = npcs.get(i);
        npc.move();
        translate(npc.x, npc.y);
        npc.draw(gl);
    }
}

我将创建一个简短的测试,看看是否可以看到任何性能提升,但我想问一下是否有人有过这方面的经验

最好的方法是简单地使用translate函数,因为在平移过程中,模型视图矩阵的变换包括操纵3个浮点值,而顶点信息的变化与您拥有的顶点数成正比

恕我直言,您提出的方法非常不方便,您应该坚持使用矩阵操作代替顶点操作

有关转换操作期间矩阵更改的更多信息,请参阅本文档:

干杯
Maurizio

在我当前的OpenGL应用程序中创建一个测试状态后,直接更改顶点时,与使用
GL.glTranslatef()
相比,性能似乎没有提高,正如Maurizio Benedetti指出的,只有当顶点计数足够大时,您才会开始看到差异

onDraw(GL10 gl){
    for(int i=0; i<npcs.size(); i++){
        NPC npc = npcs.get(i);
        npc.move();
        translate(npc.x, npc.y);
        npc.draw(gl);
    }
}
move(){
    // ... do normal movement calculations
    float[] vewVertices = {
    x, y, 0f,
    x+npc.width, y, z,
    x, y+npc.height, z,
    x+npc.width, y+npc.height, z
    }
    vertexBuffer.put(newVertices);
    vertexBuffer.position(0);
}