对于只有大约500个单独对象的3D世界,每个对象只能绘制大约20个三角形,这样可以更快地模拟x-y平面中的滚动:翻译所有对象' x和y OR为每个绘制的帧更改setLookAtM参数?
(假设每帧都可以在屏幕上显示所有对象,而且大多数对象都像小扁平(薄)盒子。)
我想这个问题归结为"哪个花费更少的时间?":
或
或者是否有更好(更快)的方法来模拟使用OpenGl ES 2.0进行滚动?
答案 0 :(得分:0)
我不完全确定翻译每个对象的意思。每个对象都应根据其位置进行翻译 - 这意味着每个对象都有一个定义的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应该检查对象的位置离玩家位置的距离(因为如果它太远,它将在摄像机外部,因此不需要绘制它)。
无需更改外观矩阵,在根据实际位置单独翻译每个对象之前,您只需要一个全局翻译。