java - 计算 3D 空间中的一个点

标签 java 3d floating-point trigonometry lwjgl

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

enter image description here

  • 'vd' 是“视距”
  • 'c' 是值(value)持有者
  • '(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);

编辑:

我的问题是当前设置出于某种原因无法正常工作。数学对我来说似乎是合理的,但我一定在图表的实际设置中某处有问题..

最佳答案

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

然后我会做的是从表示从原点向前指向的方向的 vector 开始,然后应用玩家当前对其进行的相同旋转。现在它指向与玩家相同的方向。现在,如果您获取玩家的当前点和方向 vector ,我们现在就有了一条描述玩家注视位置的射线。

我建议此链接以获取有关四元数的更多信息。它们可能看起来很复杂,但正如我所说,您无需完全理解它们的工作原理和原因就可以使用它们。只需复制公式并了解它们的使用方法。一旦您了解了如何使用它们,它们就可以非常轻松地进行 3d 旋转。

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

关于java - 计算 3D 空间中的一个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13774003/

相关文章:

Java:双舍入算法

java - 使用 json 发出 HTTP post 请求

c++ - GLM 翻译问题

c# - .Net Matrix3D Transform() 究竟做了什么/为什么我得到 "- infinity"?

javascript - HTML5/CSS3 - 除了 z-index 之外的深度替代方案?

Java 模运算符

java - 为什么在预热阶段浮点运算要快得多?

java - hibernate HQL 查询 : How to properly use ANY function in where clause?

java - 如何按照说明显示两个数组

java - JJWT/Jackson 改变了使用的 ObjectMapper