我想计算得到的柏拉图(或者可能是阿基米德)实体的表面网格,并为每个面应用置换贴图。网格应显示位移图的精细细节,并且是水密和多方面的(用于 3D 打印)。
为此,我考虑过使用 CGAL 隐式函数 3d 曲面网格划分器。然后,我会将每个体素点映射到相应的面部,应用从体素空间到面部的坐标系变换,并查找面部的高度场。我知道如何为每个面构建变换矩阵,所以我想到了以下算法来测试实体中是否包含体素:
- 找到离点A最近的人脸
- 对于给定的点 A,通过迭代所有顶点并比较与 A 的距离,找到柏拉图式(阿基米德)实体的 3 个最近顶点
- 根据顶点数组中最小的索引对3个顶点进行排序
- 从顶点索引中构建一个整数(字典索引): (v[0] n n+v[1]*n+v[3]*1) 其中 n 是顶点的数量
- 迭代一个元组数组(字典索引,人脸)并找到具有相同字典索引的人脸
- 每个面都有一个预先计算的变换矩阵和一个高度场。应用变换矩阵并查找高度场以了解 A 是在实体内部还是外部
我想存在更好的解决方案,尤其是寻找合适的面孔?另一种方法可能是不使用表面网格器,而是从面中构建表面:获取每个面的位移图并将变换矩阵应用于它以构建实体,但是我需要简化每个面网格并将它们合并不知何故,结果是水密和多方面的(如果置换贴图具有某些值,则面应该支持孔),所以我认为具有隐式函数的基于体素的方法是最通用的工具。