有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java OpenGL ES 2.0屏幕滚动:translate vs.setLookatM

对于一个只有大约500个独立对象的3D世界,每个对象只需绘制大约20个三角形,在x-y平面上模拟滚动会更快:平移所有对象的x和y,还是为每个绘制的帧更改setLookAtM参数

(假设每一帧屏幕上都可以显示所有对象,并且大多数对象都像小的扁平(薄)盒子。)

我想问题可以归结为“哪个花费的时间更少?”

  1. 执行(1000)个浮点加法(1000个加法=500个对象x 2个浮点加法[x+x_offset&;y+y_offset]进行平移)。无论是否执行滚动,我都必须在每一帧使用translateM更新所有对象的x和y。)

或者

  1. 一个更改setLookAtM参数的调用

或者有没有更好(更快)的方法来模拟OpenGl ES 2.0的滚动


共 (1) 个答案

  1. # 1 楼答案

    我不完全明白你翻译每一个物体是什么意思。无论如何,每个对象都应该根据其位置进行转换——也就是说,每个对象都有一个定义的x/y,当您绘制它时,您可以执行以下操作:

    glPushMatrix()
    glTranslate(position.x, position.y);
    
    // Draw object
    
    glPopMatrix()
    

    现在,你要确保你的相机总是在一个移动的特定位置居中。例如,假设你总是以球员的位置为中心,这个位置可以移动

    glLoadIdentity()
    glTranslate(-playerPosition.x, -playerPosition.y);
    
    for each drawable object:
      if (isObjectWithinCamerasView(object)) // no need to draw objects outside of the viewport
        object.draw()
    

    isObjectWithCamerasView方法应该检查对象的位置距离玩家的位置有多远(因为如果距离太远,它将在相机之外,因此无需绘制)

    无需改变注视矩阵,只需在根据每个对象的实际位置单独平移之前进行一次全局平移