计算3D空间中的点

时间:2012-12-08 02:58:38

标签: java 3d floating-point trigonometry lwjgl

我试图在相对于原点(0,0,0)的3D空间中找到一个点。我有3个值来计算这个点:围绕x轴和y轴的旋转度以及“视距”。使用这些值,如何在相对于原点的3D空间中定位点?我尝试过使用基本的三角函数,但结果似乎是随机的。下图显示了需要完成的工作。

enter image description here

  • '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);

编辑:

我的问题是这个当前设置由于某种原因不起作用。数学对我来说似乎是合法的,但我必须在图形的实际设置中的某处出错。

1 个答案:

答案 0 :(得分:1)

我建议查找四元数。无需完全理解 的工作方式。您也可以在互联网上找到现成的java课程。四元数允许您在3D空间中表示旋转。

然后我会做的是从表示从原点指向前方的向量开始,并应用玩家当前具有的相同旋转。现在它指向与玩家相同的方向。现在,如果您获取玩家的当前点和方向向量,我们现在有一条描述玩家所在位置的光线。

我建议使用此链接获取有关四元数的更多信息。它们可能看起来很复杂,但正如我所说,你不需要完全理解它们如何以及为什么能够使用它们。只需复制公式并了解它们的使用方法。一旦你弄明白如何使用它们,它们就可以轻松实现3d旋转。

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