java OpenGL ES 2.0屏幕滚动:translate vs.setLookatM
对于一个只有大约500个独立对象的3D世界,每个对象只需绘制大约20个三角形,在x-y平面上模拟滚动会更快:平移所有对象的x和y,还是为每个绘制的帧更改setLookAtM参数
(假设每一帧屏幕上都可以显示所有对象,并且大多数对象都像小的扁平(薄)盒子。)
我想问题可以归结为“哪个花费的时间更少?”
- 执行(1000)个浮点加法(1000个加法=500个对象x 2个浮点加法[x+x_offset&;y+y_offset]进行平移)。无论是否执行滚动,我都必须在每一帧使用translateM更新所有对象的x和y。)李>
或者
- 一个更改setLookAtM参数的调用李>
或者有没有更好(更快)的方法来模拟OpenGl ES 2.0的滚动
# 1 楼答案
我不完全明白你翻译每一个物体是什么意思。无论如何,每个对象都应该根据其位置进行转换——也就是说,每个对象都有一个定义的x/y,当您绘制它时,您可以执行以下操作:
现在,你要确保你的相机总是在一个移动的特定位置居中。例如,假设你总是以球员的位置为中心,这个位置可以移动
isObjectWithCamerasView方法应该检查对象的位置距离玩家的位置有多远(因为如果距离太远,它将在相机之外,因此无需绘制)
无需改变注视矩阵,只需在根据每个对象的实际位置单独平移之前进行一次全局平移