4

我正在尝试相对于原点 (0,0,0) 在 3D 空间中定位一个点。我有 3 个值来计算这一点:关于 x 和 y 轴的旋转度数以及“视距”。使用这些值,我如何定位 3D 空间中相对于原点的点?我尝试过使用基本的三角函数,但结果似乎是随机的。下图直观地说明了需要做什么。

在此处输入图像描述

  • 'vd' 是“视距”
  • 'c' 是价值持有者
  • '(x,y,z)' 是我要查找的坐标

我要做的是找到玩家在一定距离外注视的点(在玩家的直接视线中找到一定距离外的点)。请记住,围绕 x 和 y 轴的旋转不断变化,但视图距离保持不变。如果有人对此有任何建议、方法或需要澄清,请在下面发表评论/回答。

我在 LWJGL 中这样做,我使用的代码如下:

    float c = (float)(Math.cos(Math.toRadians(A00.rot.y)) * view_distance);
    locate.y = (float)(Math.sin(Math.toRadians(rot.y)) * view_distance);
    locate.x = (float)(Math.cos(Math.toRadians(rot.x)) * c);
    locate.z = (float)(Math.sin(Math.toRadians(rot.x)) * c);

编辑:

我的问题是这个当前的设置由于某种原因不起作用。数学对我来说似乎是合理的,但我在图表的实际设置中一定有什么问题..

4

1 回答 1

1

我建议查找四元数。无需完全了解它们的工作原理。您也可以在 Internet 上找到现成的 Java 类。四元数允许您表示 3D 空间中的旋转。

然后我要做的是从一个向量开始,该向量表示从原点指向前方的方向,并应用玩家当前拥有的相同旋转。现在它指向与玩家相同的方向。现在,如果您采用玩家的当前点和方向矢量,我们现在就有了一条描述玩家正在注视的位置的射线。

我建议使用此链接以获取有关四元数的更多信息。它们可能看起来很复杂,但正如我所说,你不需要完全理解它们是如何工作的以及为什么能够使用它们。只需复制公式并了解它们的使用方式。一旦你弄清楚如何使用它们,它们就会使 3d 旋转变得非常容易。

http://content.gpwiki.org/index.php/OpenGL:Tutorials:Using_Quaternions_to_represent_rotation

于 2012-12-10T01:16:21.653 回答