什么使算法“困难”是大数(256 {8 个点 每个点有两种状态 2^8})的可能的组合
和需要得到一个一致的小的组合,每个解决方案,使相邻的网格单元的各个方面正
确地连接在一起。
第一部分的算法使用一个表(edgetable)映射到顶点的等值面相交的边缘下。在
每一个位对应一个顶点的位置形成一个 8 位索引。
cubeindex = 0;
if (grid.val[0] < isolevel) cubeindex |= 1;
if (grid.val[1] < isolevel) cubeindex |= 2;
if (grid.val[2] < isolevel) cubeindex |= 4;
if (grid.val[3] < isolevel) cubeindex |= 8;
if (grid.val[4] < isolevel) cubeindex |= 16;
if (grid.val[5] < isolevel) cubeindex |= 32;
if (grid.val[6] < isolevel) cubeindex |= 64;
if (grid.val[7] < isolevel) cubeindex |= 128;
查找边缘表返回一个 12 位号码,每个点对应一个边,0 如果边缘不被等值面,1
如果切边采用等值面。
如果边缘没有把表返回 0,这发生在 cubeindex 0(低于等值面的所有顶点)或
0xff(所有顶点以上等值面)。
使用前面的例子只有顶点 3 低于等值面,cubeindex 等于 0000 1000 或 8。
edgetable [ 8 ] = 1000 0000 1100。这意味着边缘 2,3 和 11 相交的等值面
该算法的最后一部分涉及与等值面相交形成的网格边缘位置正确的方面。又一个表
(tritable)是用这段时间使用相同的 cubeindex 但允许顶点序列要抬头为许多三
角形面片是必要的代表的网格单元内等值面。在大多数 5 个三角面有必要
回到我们的例子,在上一步中,我们计算的交叉点沿边缘 2,3,和 11。在 tritable
第八元
{3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}
这是一个特别简单的例子,可以肯定的是,在表中的许多情况下,小关节的组合并
不那么明显