模型重建

1、通过marching cubes 算法

Marching Cubes算法是三维离散数据场中提取等值面的经典算法,其主要应用于医学领域的可视化场景,例如CT扫描和MRI扫描的3D重建等。

算法主要的思想是在三维离散数据场中通过线性插值来逼近等值面,具体如下:三维离散数据场中每个栅格单元作为一个体素,体素的每个顶点都存在对应的标量值。如果体素顶点上的值大于或等于等值面值,则定义该顶点位于等值面之外,标记为“0”;而如果体素顶点上的值小于等值面值,则定义该顶点位于等值面之内,标记为“1”。由于每个体素单元有8个顶点,那么共存在2^8 = 256种情形,下图是Marching Cubes算法的15种基本情形,其他241种情形可以通过这15种基本情形的旋转、映射等方式实现。

FYI:https://www.cnblogs.com/shushen/p/5542131.html

DEMO:基于Marching Cubes

https://stemkoski.github.io/Three.js/Marching-Cubes.html

https://stemkoski.github.io/Three.js/Metaballs.html

https://stemkoski.github.io/Three.js/Metabubbles.html

2、通过多个模型的交叉并生成新的模型

19.png

FYI:

https://github.com/chandlerprall/ThreeCSG

https://stemkoski.github.io/Three.js/CSG.html

用例

var sphere_geometry = new THREE.SphereGeometry( 2, 16, 16 );
var sphere_bsp = new ThreeBSP( sphere_geometry );

var cube_geometry = new THREE.CubeGeometry( 7, .5, 3 );
var cube_bsp = new ThreeBSP( cube_geometry );

var union_bsp = sphere_bsp.union( cube_bsp );

var result = union_bsp.toMesh( new THREE.MeshLambertMaterial({
    shading: THREE.SmoothShading,
    map: new THREE.TextureLoader().load('texture.png')
}));
result.geometry.computeVertexNormals();
scene.add( result );

你可能感兴趣的:(模型重建)