【发布时间】:2012-12-08 19:47:43
【问题描述】:
这将是一个相当复杂的解释,请耐心等待。在 3D 空间中,玩家有 2 个用于环顾四周的旋转值,即围绕 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 轴旋转。
【问题讨论】:
-
通过将位置形成为矩阵然后将其与投影矩阵相乘,使用矩阵数学进行计算不是很简单吗?还是您的问题实际上是如何形成投影矩阵?所以在这种情况下,只需制作旋转矩阵和位置矩阵,然后将它们与投影矩阵相乘。
-
我对矩阵没有任何经验。到目前为止,我已经设法使用它们。因此,无需提取透视矩阵或任何计算点的答案将是可取的。
-
问题是使用矩阵的确切意义在于实际上消除了完全理解数学的需要。矩阵就是很好地打包成矩阵形式的三角函数。因为矩阵可以组合在一起形成一个实体,可以一次性完成整个事情。这消除了一起执行所有步骤的需要,因为您一次只能设计任何一个子步骤。事实上,furstrum culling 可以表示为矩阵形式,就好像点在 furstrum 空间 -1 到 1 之外一样。为您节省大量计算。
-
但我真的宁愿不使用矩阵。必须使用矩阵的“加法”、“减法”等方法完成的内部计算对计算几乎没有改进。只用一种方法就可以更轻松地完成所有数学运算。这与查找一个点是否位于平截头体空间内是一样的。所以没有矩阵的方法会很好..
-
只是简单的旧三角法
标签: java 3d rotation trigonometry lwjgl