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

标签 java opengl jogl

具有以下 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/

相关文章:

java - Java2D 可以像 LWJGL 和 JOGL 一样快吗?

java - OpenGL 中的厚贝塞尔曲线

java - 无法运行spring web socket demo

java - 无法弄清楚为什么 ArrayList.add() 对我不起作用

c++ - 如何在 nvidia 驱动程序中使用 opengl?

java - glTranslate/rotate 在我的代码中不起作用

java - JOGL白色质地?

java - JSP Scriptlet中文字符串比较

java - 在java中尝试/捕获堆栈溢出?

c++ - 引起问题的纹理