如果我的应用是修改对象顶点而不是使用glTranslatef
,会有性能提升吗?
NPC对象的顶点设置如下:由于先前调用了gl.glScalef()
protected float[] vertices = {
0f, 0f, -1f, //Bottom Left
1f, 0f, -1f, //Bottom Right
0f, 1f, -1f, //Top Left
1f, 1f, -1f //Top Right
};
目前我有一组NPC对象在屏幕上绘制,当它们移动时,X和Y值会更新,我的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(x,y)
- 在调用方法gl.glTranslatef()
时按下并弹出矩阵,进行与屏幕大小和比率相关的计算
npc.draw(gl)
- 启用客户端状态并绘制数组
如果移动函数改变了顶点和NPC对象,性能是否会提高?例如;
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);
}
我即将创建一个简短的测试,以确定我是否可以看到任何性能提升,但我想问一下是否有人之前有过这方面的经验。
答案 0 :(得分:2)
最好的方法是简单地使用translate函数,因为在平移过程中模型视图矩阵的变换包括3个浮点值的操作,而顶点信息的变化与你拥有的顶点数量成正比。
在充分尊重的情况下,你提出的方式非常不方便,你应该坚持使用矩阵操作代替顶点操作。
您可以参考此文档以获取有关翻译操作期间矩阵更改的更多信息:
http://www.songho.ca/opengl/gl_transform.html
干杯 莫里吉奥
答案 1 :(得分:0)
在我当前的Open GL应用程序中创建测试状态后,使用gl.glTranslatef()
答案 2 :(得分:0)
就像Maurizio Benedetti指出的那样,只有当您的顶点数量足够大时,您才会看到差异。