Java 计算相对于三维空间中另一点的点

Java 计算相对于三维空间中另一点的点,java,3d,rotation,trigonometry,lwjgl,Java,3d,Rotation,Trigonometry,Lwjgl,这将是一个相当复杂的解释,请耐心听我说。在3D空间中,玩家有两个用于环视的旋转值,即绕x轴和y轴旋转。给定一个视距,我已经计算了玩家视角端口中心的点,即视距(如下所示) “vd”是视图距离 “c”是一个价值持有者 “(x,y,z)”是要计算的点 “rot.x”和“rot.y”分别是围绕x轴和y轴的旋转 给定这个点(x,y,z),我需要计算相对于这个位置的四个点(如下所示) “(x2,y2,z2)”,(x3,y3,z3)”等是我需要计算的点 绿色平面的宽度和高度是已知的。让我们分别称它们

这将是一个相当复杂的解释,请耐心听我说。在3D空间中,玩家有两个用于环视的旋转值,即绕x轴和y轴旋转。给定一个视距,我已经计算了玩家视角端口中心的点,即视距(如下所示)

  • “vd”是视图距离
  • “c”是一个价值持有者
  • “(x,y,z)”是要计算的点
  • “rot.x”和“rot.y”分别是围绕x轴和y轴的旋转
给定这个点(x,y,z),我需要计算相对于这个位置的四个点(如下所示)

  • “(x2,y2,z2)”,(x3,y3,z3)”等是我需要计算的点
  • 绿色平面的宽度和高度是已知的。让我们分别称它们为“w”和“h”
现在,如果我仍然可以访问第一个图形中的所有值(如旋转等),我如何计算四个点中的每一个

有点背景。。我这样做是为了一种叫做截锥剔除的剔除方法。我正试图用LWJGL来实现这一点,以加快渲染速度并减少GPU的开销。我还没能计算出这个计算的三角学,在过去的几个小时里我一直在努力。感谢您的帮助。如果需要更多的解释/澄清,请告诉我。谢谢


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

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

V*Ry*Rx

因为V向量是建立在

V=[视角距离,棕褐色(22.5)*视角距离,棕褐色(22.5)*视角距离*(宽度/高度)]

那就是说:

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:矩阵表示法对你的眼睛和编程经验来说要容易得多。

用矩阵数学计算位置,将其形成一个矩阵,然后将其与投影矩阵相乘,这不是很简单吗?或者你的问题是如何形成一个投影矩阵?所以在这种情况下,只需要制作旋转矩阵和位置矩阵,并将它们与投影矩阵相乘。我对矩阵没有任何经验。到目前为止,我一直在设法使用它们。因此,一个不需要提取透视矩阵或任何计算点的方法的答案更可取。使用矩阵的确切意义在于,实际上不需要完全理解数学。矩阵就是三角函数,很好地组合成矩阵形式。因为矩阵可以相乘,形成一个实体,一次完成全部工作。这样就不需要同时执行所有步骤,因为一次只能设计任何一个子步骤。事实上,分叉消隐可以表示为矩阵形式,就好像点在分叉空间之外-1比1。省去你很多计算,但我真的不想用矩阵。必须使用矩阵的“加法”、“减法”等方法进行内部计算,对计算几乎没有改进。这只会让用一种方法做所有的数学题变得更容易。这与查找点是否位于平截头体空间内是一样的。所以一个没有矩阵的方法会很好…只是简单的旧三角三角形!但trig仍然更好:P@MrDoctorProfessorTyler是的,只是很快就变得复杂起来了使用wolfram alpha。