如何在透视投影中检查点是否在四边形内?

时间:2013-07-25 12:41:16

标签: c++ opengl transformation

我想测试世界上任何给定点是否在四/平面上?四边形/平面可以通过任何值进行平移/旋转/缩放,但它仍然应该能够检测给定点是否在其上。如果四边形未应用任何旋转/缩放/平移,我还需要获得该点所在的位置。

例如,考虑尺寸为100x100的0,0,0的四边形,沿z轴以45度角旋转。如果我在世界上的鼠标位置是(x,y,0,),我需要知道该点是否落在当前转换中的四边形上?如果是的话,那么我需要知道是否没有对四边形应用变换,那个点就在那里?任何代码示例都会有很大的帮助

1 个答案:

答案 0 :(得分:1)

光线投射方法可能最简单:

  1. 使用gluUnProject()获取投射到场景中的光线的世界空间方向。光线的原点是相机位置。
  2. 将此光线转换为对象空间,方法是将其转换为矩形变换的反转。请注意,您需要变换光线的原点和方向矢量。
  3. 使用标准光线平面相交测试计算此光线与XY平面之间的交点。
  4. 检查交叉点的x和y值是否在矩形的范围内,如果它们是你想要的结果。
  5. 如果你对这里涉及的一些数学没有信心,那么像GLM这样的数学库将非常有用,它具有相应的功能,如glm::unProject()以及反转矩阵的函数和做你需要的所有其他转换。