Triangle-Cube / Voxel交叉口

时间:2014-02-10 03:50:43

标签: c++ graphics geometry intersection voxel

在3D空间中检测三角形是否与体素/立方体相交的最佳算法是什么?我有这个来源,用C:http://tog.acm.org/resources/GraphicsGems/gemsiii/triangleCube.c编写。我试图重构并将此代码转换为C ++,但我意识到我真的不知道发生了什么。此外,注释说明三角形交叉点与单位立方体进行比较,但是我无法找到扩展算法以使用任何立方体/体素的方法。

检测三角形立方体交叉点是否有更清晰的实现(最好是用C ++)?如果没有,那么扩展C代码以使用任意多维数据集的最佳方式是什么?

提前谢谢

1 个答案:

答案 0 :(得分:0)

一个简单的算法是:

  • 计算三角形所在的平面。
  • 找到此平面与多维数据集(如果有)之间的交集。
  • 如果没有交叉点,那么问题就解决了。
  • 否则,找到贯穿每个三角形边缘的直线。
  • 对于每一行:如果交叉点位于“外部”,那么就没有交叉点。
  • 否则会有一个交叉点。

如果您对“最佳”算法的标准是简单性,那么这将是一个很好的标准。如果你在寻找性能,可能会有一些更快的。

您还可以尝试查看以下代码:

http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/code/