分析模型并以编程方式创建它的外壳/层

时间:2017-03-20 13:07:47

标签: 3d three.js

因此我们创建了一个使用WebGL和Three.js查看CAD模型的查看器。 现在我们正在尝试支持仅加载建筑物的外壳以降低内存成本并提高查看多个大型建筑物的速度。我们基本上想做的是用一个大型建筑物取一个模型并移除建筑物内的所有东西,这样你唯一能看到的就是外墙,门窗。

有没有人知道如何分析这个并创建模型的外壳?每个墙,门,窗等现在作为单独的对象加载,我当然可以访问顶点和面。

1 个答案:

答案 0 :(得分:1)

一种相对简单的方法是从挑选中汲取灵感。你从4到6边(左,右,前,后,顶,底)渲染房子。在每个渲染中,您将以不同的纯色渲染房屋的每个部分(无照明)。然后,您可以调用gl.readPixels或THREE.js,并扫描所有像素以找出哪些对象仍然可见。无论哪一个都不可见都在里面。

复杂的是窗户。如果您有任何类型的半透明物体,您不需要绘制它们,否则它们会阻挡您应该能够透过它们看到的内部物体。

另一个复杂因素是半遮蔽的整体。就像你有一个通风口并且从某个角度看你可以通过通风口看到里面的东西,但是从你的6个视图中看不到那个角度,那么里面的东西就不会显示为可见。

在伪代码中

 for (ndx = 0 to numObjects) {
     someMaterial.color = ndx;
 }
 visibleObjects = [];
 for each camera position {
     render scene
     read pixels
     for each pixel {
         visibleObjects[pixelValue] = true
     }
 }
 notVisibleObjects = [];
 for (ndx = 0 to numObjects) {
     if (!visibleObjects[ndx]) {
         notVisibleObjects[ndx] = true;
     }
 }