algorithm - 将 3D 模型转换为体素场

标签 algorithm model 3d voxel

我需要编写一些代码将四边形数组转换为体素场。 使其正常工作应该很容易,但要使其快速运行也并非易事。

有人知道我可以使用的库或源代码吗?我敢肯定以前一定有人这样做过。

编辑: 该算法也需要用体素填充模型内部。仅仅一个 shell 是不行的。

最佳答案

@Alexandre C. 发布的体素链接看起来不错。

这里简要概述了我们在将常规四边形/三角形模型转换为用于光子学/EM 模拟的折射率/epsilon 值的立方体阵列时如何解决此问题。

  1. 创建场景的 BSP 树。 (是的,真的)
  2. 在您的模型或解决方案空间的 X、Y、Z 上定期迭代。 (每个轴的间隔应等于所需的体素尺寸。)
  3. 在 x/y/z 循环中的每个点,对照 BSP 树检查该点。如果它在实体内部,则在该点创建一个体素,并根据源模型(从您的 BSP 节点引用)设置它的属性(颜色、纹理坐标等)。 (优化提示:如果您的最内层循环沿 Y 轴(垂直轴)并且您正在创建地形或面向 XZ 的表面,则您可以随时退出 Y 循环创建一个体素。)

  4. 保存

  5. 利润!

构建 BSP 是唯一半复杂的部分(它比第一眼看上去容易得多),但它已在整个网络的 ying-yang 中被记录下来。这几乎适用于任何模型形状,还为您提供了一棵漂亮的树,您可以将其用于碰撞检测和可见性确定等。

另外,请注意,整个过程应该在编译时或使用专用工具进行(显然,这会生成一个包含您将在运行时使用的树和体素字段的文件)。如果您使用的是 XNA,那么将任何内容导入内容管道都非常容易。

关于algorithm - 将 3D 模型转换为体素场,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4293120/

相关文章:

algorithm - 关于 AVL 旋转

algorithm - 将数据添加到文件可以压缩更多吗?

c++ - QSortFilterProxyModel 对多列进行排序

c++ - OpenGL 深度无法按预期工作

r - 生成包含 n 个元素的所有 k-排列的矩阵的好算法?

algorithm - 什么是大 O 表示法,我该如何计算它?

asp.net-mvc-2 - 在mvc2中创建ModelStateErrorMessage

ruby-on-rails - Rails : change column type, 但保留数据

javascript - 给定 3D 空间中的一条线,我如何找到从它到一个点的 Angular ?

c# - 四 View 编辑器应用的最佳 3D 引擎/软件