模型重建

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 );
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1-------- 走进前端 2-------- jQuery 3-------- CSS 4-------- A...
    依依玖玥阅读 2,366评论 0 34
  • 将睡未睡的时刻,思维活跃度常常让人难以想象。而我想你的时刻,钝痛则需要平心静气,跟随血液的流动,沿着脉络一丝丝的找...
    李星岚阅读 268评论 0 0
  • 也许就是这样吧!最没出息的做法就是埋怨运气不好。心中有着无比宏达的志向,可是自己的实力配不上自己的野心。远...
    呆萌扑克脸阅读 261评论 0 0
  • 活了那么多年我才知道自己是卷发,我果然很聪明!沉浸在自己的美里无法自拔,哦哈哈哈…… 今天去剪头发,发现理发的小哥...
    基尼小南瓜阅读 2,194评论 0 1