可恶的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个就够了。
 
其他的参考课本
《科学计算可视化算法与系统》 石教英等 科学出版社
posted @ 2009-03-25 22:50  Bobyguo  阅读(2347)  评论(2)    收藏  举报