gpt4 book ai didi

java - 如何使用 gl.glTranslatef() 定期更改坐标?

转载 作者:行者123 更新时间:2023-12-02 06:49:04 25 4
gpt4 key购买 nike

具有以下 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() ,我怎样才能保存这个对象位置?

最佳答案

插入/弹出矩阵用于累积复杂的矩阵变换,否则手动完成这些变换会很痛苦。对于存储和移动对象位置,按照您所做的那样保留变量是正确的。要对此进行扩展,并且正如您所说的开始向另一个方向移动,请添加一个方向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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com