gpt4 book ai didi

java - 跟随和旋转 OpenGL 中的路径

转载 作者:行者123 更新时间:2023-11-30 11:38:28 27 4
gpt4 key购买 nike

我正在尝试车辆跟随 Lemniscate of Bernoulli 的练习(或更简单地说,8 字形轨道)。我想使用 glTranslatefglRotatef 来实现这一点。到目前为止,我已经能够通过使用如下参数形式成功地让车辆沿着这条路径跟随/平移:

X = (width * cos(t)) / (1+sin^2(t))
Y = (width * cos(t) * sin(t)) / (1+sin^2(t))
Where t is in -pi, pi

在代码中,是这样的:

carX = (float) ((Math.cos(t) / (1 + Math.sin(t)*Math.sin(t))));
carY = 0.0f;
carZ = (float) ((Math.cos(t) * (Math.sin(t))) / (1 + Math.sin(t)*Math.sin(t)));
gl.glTranslatef(carX,carY,carZ);

这样效果很好。我现在的问题是旋转车辆,使其遵循伯努利双纽线定义的路径。我想通过使用 glRotatef 绕 Y 轴旋转来实现此目的,但我不确定如何继续寻找要在 glRotatef 中输入的角度。旋转目前已就位,因此它仅操纵车辆,似乎只需要正确的数学运算即可遵循路径。

我尝试过的事情:

  • 使用上面列出的 X 和 Y 形式的派生词。我彼此独立地使用它们,因为我不确定如何/是否需要将它们组合起来用于角度。和一些轻微的操纵他们沿着原点附近的直线区域,但在曲线周围崩溃了。
  • 直接求切线t 值并转换为度数。导致旋转不稳定。

如果有人有任何可能比 glRotatef 方法更好的建议,我们也将不胜感激。我已经看到 gluLookAt may be helpful ,我可能会尝试使用它找到解决方案。

(注意:我在使用 Java 和 FFP 的 JOGL 中工作,但我对 C/C++ 代码片段很满意。)

最佳答案

假设摄像头 View 是驾驶员的 View ,gluLookAt 正是您所需要的!根据您的 carX,carY,carZ 计算(假设数学很好),您可以存储以前的值并使用它:

//globals & imports:
import javax.vecmath.*;

Vector3f current = new Vector3f();
Vector3f prev = new Vector3f();

计算如下:

//on drawing:
prev.set(current);
current.x = (float) ((Math.cos(t) / (1 + Math.sin(t)*Math.sin(t))));
current.z = (float) ((Math.cos(t) * (Math.sin(t))) / (1 + Math.sin(t)*Math.sin(t)));

glu.gluLookAt(current.x, 0f, current.z,
current.x - prev.x, 0f, current.z - prev.z,
0f, 1f, 0f);

我会在回家后对其进行测试,以确保其正常工作,但据我所知,这应该可以解决问题。

关于java - 跟随和旋转 OpenGL 中的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13619709/

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