这将是一个相当复杂的解释,所以请耐心等待。在3D空间中,玩家有2个旋转值用于环视它们,围绕x和y轴的旋转。给定一个视距,我计算了玩家视口中心的点,即视距(如下图所示)。
考虑到这一点(x,y,z),我需要计算相对于这个位置的四个点(如下所示)
现在我仍然可以访问第一张图中的所有值(例如旋转等),如何计算四个点中的每一个?
一点背景..我这样做是为了一种叫做视锥体剔除的剔除方法。我试图用LWJGL来做这件事,以加快渲染速度并减少GPU上的收费。我无法弄清楚这个计算的三角学,我在过去的几个小时里一直在努力。任何帮助表示赞赏。如果需要更多解释/说明,请告诉我。感谢。
编辑:此外,这些点必须位于同一平面上,并使用点(x,y,z)围绕x和y轴旋转。
答案 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:矩阵符号在您的眼睛和编程体验上更容易。