网格和锥体交叉算法

时间:2015-02-03 14:53:39

标签: c++ performance opengl 3d intersection

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

我还发现以下算法简要说明: “通过用网格绘制锥形几何体并读取标记交叉点的最小深度值,在GPU上计算锥形网格交叉点”。 不幸的是,它的实现对我来说并不明显。

那么有人可以建议比我更高效的东西,或者更详细地解释如何使用OpenGL在GPU上完成它吗?

1 个答案:

答案 0 :(得分:0)

在GPU上

我会这样做:

  1. 设置视图

    • to cones origin
    • 向外指导
    • 覆盖bigest圆片
    • 用于无限锥体使用视图坐标系中网格顶点的最大Z值
  2. 清除缓冲区

  3. 绘制网格

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

    • 读取片段并从有效(已填充)中选择最接近锥体原点的片段
  5. [注释]

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