柏拉图(阿基米德)实体的3d点到面的映射

时间:2013-03-15 11:05:43

标签: mesh surface cgal voxel

我想计算每个面部使用置换贴图应用的柏拉图(或者可能是archimedian)实体的结果表面网格。网格应显示位移图的精细细节,并且是水密和多样的(用于3D打印)。

http://oi47.tinypic.com/4tlgy9.jpg

为此,我考虑过使用CGALs隐式函数3d surface mesher。然后,我将每个体素点映射到相应的面,应用从体素空间到面部的坐标系变换,并查找面部的高度场。我知道如何为每个面构建变换矩阵,所以我考虑了以下算法来测试体素是否包含在实体中:

  1. 找到离A点最近的面
    • 对于给定的点A,通过迭代所有顶点并将距离与A
    • 进行比较,找到柏拉图(archimedian)实体的3个最近顶点。
    • 根据顶点数组中的最小索引对3个顶点进行排序
    • 从顶点索引中构建整数(lexicographix index):( v [0] n n + v [1] * n + v [3] * 1)其中n是顶点数
    • 迭代一系列tupples(lexicographix index,face)并找到具有相同词典索引的面部
  2. 每个面具有预先计算的变换矩阵和高度场。应用变换矩阵并查找高度字段以了解A是否在实体
  3. 的内部或外部

    我想有更好的解决方案,特别是找到合适的脸?另一种方法可能是不使用表面网格划分器,而是从面构建表面:获取每个面的置换贴图并将变换矩阵应用于它以构建实体,但是我需要简化每个面网并将它们结合起来某种程度上,结果是水密和多样的(如果位移图具有某些值,则面应该支撑孔),所以我认为基于体素的方法具有隐函数是最常用的工具。

1 个答案:

答案 0 :(得分:0)

基于体素的方法并不成功:对于许多工件,低分辨率。我最终创建了2d高度贴图,为它们提供了简化算法,然后将它们投影到实体的面上,最后通过自定义算法将面网格合并为一个单独的网格。