java - 计算 3D 空间中相对于另一个点的点

标签 java 3d rotation trigonometry lwjgl

这将是一个相当复杂的解释,所以请耐心等待。在 3D 空间中,玩家有 2 个旋转值用于观察周围,即绕 x 轴和 y 轴的旋转。给定一个 View 距离,我计算了玩家视口(viewport)中心的点,即 View 距离(如下所示)。

enter image description here

  • 'vd'是视距
  • “c”是值持有者
  • '(x,y,z)'是要计算的点
  • “rot.x”和“rot.y”分别是绕 x 轴和 y 轴的旋转。

给定这个点(x,y,z),我需要计算相对于这个位置的四个点(如下所示)

enter image description here

  • “(x2,y2,z2)”、“(x3,y3,z3)”等是我需要计算的点。
  • 果岭平面的宽度和高度已知。让我们分别将每个称为“w”和“h”。

现在,鉴于我仍然可以访问第一个图表中的所有值(例如旋转等),我如何计算四个点中的每一个?

一点背景知识..我这样做是为了一种称为截头体剔除的剔除方法。我正在尝试使用 LWJGL 来实现此目的,以加快渲染速度并减少 GPU 的负担。我一直无法计算出这个计算的三角函数,在过去的几个小时里我一直在尝试。任何帮助表示赞赏。如果需要更多解释/澄清,请告诉我。谢谢。

编辑:此外,这些点必须位于同一平面上,并与点 (x,y,z) 绕 x 和 y 轴旋转。

最佳答案

假设旋转顺序为先 X 旋转,然后 Y 旋转,则矩阵计算为:

V*Ry*Rx

自从V vector 建立以来。

V = [view_distance, tan(22.5)*view_distance, tan(22.5)*view_distance*(WIDTH/HEIGHT)]

那么这意味着:

X2 = cos(rot.Y) * view_distance - 
     (tan(22.5) * WIDTH * view_distance * sin(rot.Y))/HEIGHT
Y2 = tan(22.5) * cos(rot.X) * view_distance + 
     (tan(22.5) * WIDTH * cos(rot.Y) * view_distance * sin(rot.X))/HEIGHT +
      view_distance * sin(rot.X) * sin(rot.Y)
Z2 = (tan(22.5) * WIDTH * cos(rot.X) * cos(rot.Y) * view_distance)/HEIGHT - 
     tan(22.5) * view_distance * sin(rot.X) +
     cos(rot.X) * view_distance * sin(rot.Y)

表达式可以进一步简化,因为例如 View 距离可以从所有表达式中分解出来。由于计算这个有点毫无意义并且容易出错,所以我更喜欢使用带有数值的矩阵函数,因为它更容易。

PS:矩阵表示法对您的眼睛和编程体验来说更容易。

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

相关文章:

java - JRMP 连接建立错误

java - Primefaces 异常 INFO : java. lang.ArithmeticException :/by zero java. lang.ArithmeticException:/by zero

javascript - 获取相机当前的旋转 Angular

opengl - 在面之间共享顶点值得吗?

c - 3d 网格中的转发(绘图)线

c++ - DirectX 3D 围绕 lookAt 旋转 eyePt

javascript - 如何使用 jquery 在悬停时旋转图像?

java - 无法使用 rmic 编译 .class 文件,类不是文件

java - 如何制作一个类似JPopupMenu的消息框?

c++ - Opengl 使用鼠标旋转对象 (C++)