具有以下 display()
-
float tranX , tranY , tranZ ;
public void display(GLAutoDrawable gLDrawable) {
final GL gl = gLDrawable.getGL();
gl.glLoadIdentity();
gl.glPushMatrix();
gl.glTranslatef(tranX ,tranY ,tranZ);
gl.glCallList(i);
gl.glPopMatrix();
tranX += 0.05;
tranY += 0.05;
tranZ += 0.05;
}
如您所见,每个 display()
调用保存在 gl.glCallList(i)
中的对象矩阵,并通过 gl.glTranslatef 获取坐标变化(tranX,tranY,tranZ)
.
假设在某个阶段我想将此对象保存在其当前位置(在 gl.glTranslatef
调用之后)并开始将其转换为另一个 tranX
,tranY
、tranZ
值。
考虑到上述 gl.glPushMatrix()
和 gl.glPopMatrix()
,我怎样才能保存这个对象位置?
最佳答案
插入/弹出矩阵用于累积复杂的矩阵变换,否则手动完成这些变换会很痛苦。对于存储和移动对象位置,按照您所做的那样保留变量是正确的。要对此进行扩展,并且正如您所说的开始向另一个方向移动,请添加一个方向X/y/Z。例如,tranX += DirectionX 等。然后,当您想改变方向时,只需将 DirectionX/Y/Z 设置为不同的值即可。
速度会根据您的计算机的速度而变化。您需要找到自最后一帧(或上次调用显示)以来的时间,并执行如下操作:transX +=velocityX * deltaTime 等。
如果您想将对象从一个点移动到另一个特定点,您需要研究关键帧插值。例如位置 = pointA * (1.0 - x) + pointB * x 并使 x 从 0 移动到 1 (x += speed * deltaTime)。当 x 大于 1 时,pointA 变为 pointB,并将 pointB 设置为列表中的下一个位置。然后从 x 中减去 1.0 并继续。
关于java - 如何使用 gl.glTranslatef() 定期更改坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18256613/