2

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

NPC对象的顶点设置如下;这允许它们是屏幕宽度的 1/10,因为之前调用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);
}

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

4

3 回答 3

2

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

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

有关翻译操作期间矩阵更改的更多信息,您可以参考此文档:

http://www.songho.ca/opengl/gl_transform.html

干杯毛里齐奥

于 2012-04-30T10:24:29.723 回答
0

就像 Maurizio Benedetti 指出的那样,只有当您的顶点数足够大时,您才会开始看到差异。

于 2012-05-02T08:36:54.420 回答
0

在我当前的 Open GL 应用程序中创建测试状态后,直接更改顶点时似乎没有性能提升,超过使用gl.glTranslatef()

于 2012-05-02T07:54:43.030 回答