GLM:获取平面线交点的位置

Posted

技术标签:

【中文标题】GLM:获取平面线交点的位置【英文标题】:GLM: Get position of plane-line-intersection 【发布时间】:2017-03-30 12:21:38 【问题描述】:

我对 C++ 的 GLM 库还很陌生,所以我遇到了一些问题。 我有一个由一个位置和两个跨越向量组成的平面,以及一条包含它的位置和方向的线 - 所有值都是 glm::vec3

struct Plane 
  glm::vec3 position;
  glm::vec3 spanVec1;
  glm::vec3 spanVec2;


struct Line 
  glm::vec3 start;
  glm::vec3 direction;

现在我需要两者的交点。 我知道我可以通过线性方程找到点,但我想确保没有来自 glm 的 INBUILD 解决方案可用,这样我就不必编写自己的扩展(主要是由于性能原因)。

那么在图书馆里有没有一种方便的方法来做到这一点?或者至少该库是否包含某种线性方程求解?

PS:glm::gtx::intersect 函数不是我想要的,因为我需要交点,而那些只返回它们是否相交 (boolean)。

【问题讨论】:

glm::gtx::intersect 中的大多数函数实际上会将交点位置作为输出参数返回给您。 【参考方案1】:

glm::gtx::intersect没有线平面相交功能,但有intersectRayPlane

您可以通过调用该例程两次(一次使用Line.direction,一次使用-line.direction)来构建射线平面相交。不是最有效的选择,但可能适用于许多应用程序。

注意intersectRayPlane 不直接返回交点位置,但最后一个(输出)参数是沿射线到交点位置的距离。所以你会得到与orig + intersectionDistance*dir的交点位置

【讨论】:

以上是关于GLM:获取平面线交点的位置的主要内容,如果未能解决你的问题,请参考以下文章

glm::unProject 问题,世界到屏幕空间对齐错误

使用 GLM 功能放大 OpenGL 中的当前鼠标位置

判断一条线与四边形的交点

通过 3D 向量拟合线并找到与平面的交点

鼠标坐标的3d点三角形交点?

如何移动 3D 盒子以保持在旋转平面上?