具有以下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调用之后),并开始将其转换为另一个tranXtranYtranZ值。

考虑上述gl.glPushMatrix()gl.glPopMatrix()如何保存该对象位置?

最佳答案

推送/弹出矩阵在那里积累了复杂的矩阵转换,否则将很难手动完成。对于存储和移动对象位置,保持变量不变是正确的。要扩展此功能,并像您说的那样开始在另一个方向上移动,请添加一个directionX / y / Z。例如,tranX + = directionX等。然后,当您要更改方向时,只需将directionX / Y / Z设置为其他值即可。

速度将根据计算机的速度而变化。您将要查找自上一帧(或上一次显示呼叫)以来的时间,并执行以下操作:transX + = velocityX * deltaTime等。

如果要将对象从一个点移动到另一特定点,则需要查看关键帧插值。例如,位置= pointA *(1.0-x)+ pointB * x,并使x从0移到1(x + =速度* deltaTime)。当x大于1时,pointA变为pointB,pointB设置为列表中的下一个位置。然后从x减去1.0并继续。

关于java - 如何使用gl.glTranslatef()定期更改坐标?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18256613/

10-10 05:57