网格和圆锥相交算法

Mesh and cone intersection algorithm

我正在寻找网格(一组三角形)和锥体(由原点、方向和与该方向的角度给定)相交的有效算法。更准确地说,我想找到最接近圆锥体原点的交点。现在我能想到的就是用来自圆锥体原点的几条光线与网格相交并获得最近点。 (当然会为mesh构建一些空间结构,拒绝不必要的交集)

我还发现了以下带有简要说明的算法: "Cone to mesh intersection is computed on the GPU by drawing the cone geometry with the mesh and reading the minimum depth value marking the intersection point"。 不幸的是,它的实现对我来说并不明显。

那么谁能提出比我更高效的建议或更详细地解释如何使用 OpenGL 在 GPU 上完成它?

在 GPU 上我会这样做:

  1. 设置视图

    • 到圆锥原点
    • 向外指向
    • 覆盖最大圆片
    • 对于无限圆锥,使用视图坐标系中网格顶点的最大 Z 值
  2. 清除缓冲区

  3. 绘制网格

    • 但在片段着色器中仅绘制与圆锥相交的像素
    • |fragment.xyz-screen_middle|=tan(cone_ang/2)*fragment.z
  4. 读取 z 缓冲区

    • 读取片段并从有效(已填充)select最接近视锥细胞原点的片段

[注释]

  • 如果您的 gfx 引擎也可以处理片段着色器的输出值
  • 然后您可以跳过项目符号 4,并在项目符号 3 内进行最小距离搜索而不是渲染 ...
  • 这将大大加快该过程(只需要一个 xyz 向量)