网格和圆锥相交算法
Mesh and cone intersection algorithm
我正在寻找一种有效的网格(三角形集)和圆锥体(由原点、方向和与该方向的角度给出)相交的算法。更准确地说,我想找到最接近圆锥原点的交点。现在我能想到的就是用锥体原点的几条光线相交网格,得到最近的点。(当然会为网格构建一些空间结构,以拒绝不必要的交集)
我还发现了以下带有简要描述的算法:"锥体到网格的交点是在GPU上计算的,方法是用网格绘制圆锥几何体并读取标记交点的最小深度值"。不幸的是,它的实现对我来说并不明显。
那么谁能提出比我更有效的东西,或者更详细地解释如何使用OpenGL在GPU上完成它?
在 GPU 上我会这样做:
-
设置视图
- 到锥体原点
- 向外引导
- 覆盖最大的圆形切片
- 对于无限圆锥,请使用视图坐标系中网格顶点的最大 Z 值
-
清除缓冲区
-
绘制网格
- 但在片段着色器中只绘制与圆锥相交的像素
-
|fragment.xyz-screen_middle|=tan(cone_ang/2)*fragment.z
-
读取 z 缓冲区
- 读取片段并从有效(已填充)中选择最接近锥体原点的片段
[注释]
- 如果您的 GFX 引擎也可以处理片段着色器的输出值
- 然后,您可以跳过项目符号 4 并在项目符号 3 中进行最小距离搜索,而不是渲染......
- 这将大大加快该过程(只需要单个XYZ向量)
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 基于ELO的团队匹配算法
- C++选择排序算法中的逻辑错误
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 算法问题:查找从堆栈中弹出的所有序列
- 下面是排序算法O(n)吗
- KMP算法和LPS表构造的运行时间
- 用于查找网格中最短路径的算法
- 算法设计:用边界数字表示 2D 网格的最佳方式,以C++?
- 六边形网格上的算法
- 如何累积三维三角形网格的边?用c语言计算网格边的算法
- 网格和圆锥相交算法
- 从平面方程中生成点网格的算法
- 更好的计算网格点数的算法
- 在网格中寻找加号的算法
- 在网格上实现类dijkstra算法
- 使用 kinect 从点云生成三角形网格的算法