可恶的marching Cube 可爱的lookuptable
如果你也不幸地跟我一样在做marching Cube 提取等值面。
呵呵,下面网址很适合你。
特别它做好了2个lookuptable,哈哈哈哈,太爽了。
mmd,明天还要交矩阵,疯了....
我简要说下:
把8个顶点和12条边编号。

线性插值找等值点。略。
把体素顶点根据“+”“-”的状态构造index字(8位 一个bit代表一个顶点)
比如只有第3个点是"+" 则 index 为 0000 1000(2进制) (注意顺序是从低位往高位)
然后映射到边表edgeTable【256】(因为各个顶点的状态组合有256种)
查到edgeTable[8] = 1000 0000 1100.
表示编号为 2,3和 11的 边 与等值面相切。(这三条边存在与等值面的交点)
然后三角片怎么画呢
再使用查找表triTable[256][16]
一个index在表中有一项 代表三角片顶点的位置
比如 index 0000 1000 (实际就是8)
triTable[8] 为 {3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 表示三角片连接的顺序: 边3上的交点 ->边11上的交点 ->边2上的交点
后面-1表示空的 没有三角片了
而假设哪项triTable表为{9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
则连接 边9上的交点 ->边5上的交点 ->边4上的交点
边2上的交点 ->边3上的交点 ->边11上的交点
因为立方体里最多可能会有5个三角片 就是5*3个点,所以呢 triTable[256][16]取16个就够了。
其他的参考课本
《科学计算可视化算法与系统》 石教英等 科学出版社

浙公网安备 33010602011771号