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值会更新,myonDraw
会访问这些对象以将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);
}