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

时间:2012-12-08 19:47:43

标签: java 3d rotation trigonometry lwjgl

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

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轴旋转。

1 个答案:

答案 0 :(得分:2)

假设旋转顺序先是X然后是Y旋转,那么矩阵计算将是:

V * RY *的Rx

由于V矢量已建立,因此。

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)

表达式可以简化一些,因为例如视图距离可以从所有表达式中计算出来。由于计算这个有点无意义且容易出错,因此喜欢使用带有数值的矩阵函数作为更容易的东西。

PS:矩阵符号在您的眼睛和编程体验上更容易。