0

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

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

4

1 回答 1

1

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

  1. 用于gluUnProject()获取要投射到场景中的光线的世界空间方向。射线的原点是相机位置。
  2. 通过矩形变换的倒数进行变换,将这条射线放入对象空间。请注意,您需要同时变换光线的原点和方向矢量。
  3. 使用标准的射线平面相交测试计算该射线与 XY 平面之间的交点。
  4. 检查交点的 x 和 y 值是否在矩形的范围内,如果是,那么这就是您想要的结果。

如果您对此处涉及的一些数学运算没有信心,诸如GLM之类的数学库将非常有用,它具有相应的函数,例如glm::unProject()反转矩阵和执行您需要的所有其他转换的函数。

于 2013-07-26T09:06:27.923 回答