具有以下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()
如何保存该对象位置? 最佳答案
推送/弹出矩阵在那里积累了复杂的矩阵转换,否则将很难手动完成。对于存储和移动对象位置,保持变量不变是正确的。要扩展此功能,并像您说的那样开始在另一个方向上移动,请添加一个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/