Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
3d 分析模型并以编程方式创建模型的外壳/层_3d_Three.js - Fatal编程技术网

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

3d 分析模型并以编程方式创建模型的外壳/层,3d,three.js,3d,Three.js,因此,我们使用WebGL和Three.js创建了一个用于查看CAD模型的查看器。 目前,我们正试图支持仅加载建筑的外壳,以降低查看多个大型建筑的内存成本和渲染速度。我们基本上想做的是拿一个有一座大建筑的模型,把里面的所有东西都移走,这样你看到的只有外墙、窗户和门 有人知道我该如何分析这一点并创建模型的外壳吗?每个墙、门、窗等现在都作为单独的对象加载,我当然可以访问顶点和面 一个相对简单的方法是从采摘中汲取灵感。您可以从左、右、前、后、上、下4到6个面渲染房屋。在每个渲染中,以不同的纯色渲染房屋的

因此,我们使用WebGL和Three.js创建了一个用于查看CAD模型的查看器。 目前,我们正试图支持仅加载建筑的外壳,以降低查看多个大型建筑的内存成本和渲染速度。我们基本上想做的是拿一个有一座大建筑的模型,把里面的所有东西都移走,这样你看到的只有外墙、窗户和门


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

一个相对简单的方法是从采摘中汲取灵感。您可以从左、右、前、后、上、下4到6个面渲染房屋。在每个渲染中,以不同的纯色渲染房屋的每个部分,无需照明。然后调用gl.readPixels或THREE.js equivalent并扫描所有像素以找出哪些对象仍然可见。看不见的都在里面

复杂的是窗户。如果你有任何类型的半透明物体,你不需要画它们,否则它们会挡住里面的东西,你应该能看穿它们

另一个并发症是半模糊的整体。比如,如果你有一个通风口,从某个角度你可以通过通风口看到里面的东西,但是这个角度在你的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;
     }
 }

这并不是要回答你的问题。只是出于好奇,你的模型有多大?我是说有多少个三角形?我们已经使用threejs加载了4500万个三角形的模型,没有使用实例,获得了60+fps。我认为你可以在不考虑fps的情况下加载更多。我们有100k-300k面的模型,可以看到一些fps下降到这些模型上。我们将支持同时加载10-20个模型,或者至少让您可以看到模型的轮廓。你用什么方法加载了那么多三角形?请记住,我们模型中的每个对象都必须是独立的和可选择的,因此使用相同材质合并几何体不适用于我们的选择。我们必须将所有几何体合并到单个几何体中,以获得45M三角形模型的90 fps。我们使用body vertex index map管理选择和其他功能。即便如此,我也不认为10-20次100K-300K三角形的抽签会将fps降低到60以下。10-20次抽签就可以了。我想,一栋大楼接到了多个电话。我想你可以试着把它简化为一个单独的drawcall。是的,如果我能让合并几何体与选择一起工作,那将是一个巨大的改进!现在我有20万张脸的10万个抽签电话,所以把抽签电话减少到10-100个会有很大帮助。是的,这是个好主意,但问题是建筑物从一个角度挡住了视线。就像一座有两座塔楼的建筑,所以每座建筑都挡住了另一座建筑的一个表面。我认为windows的问题不是什么大问题。我们可以将它们设置为实体而不是透明,因为我们仅在远处使用此视图查看模型。当您接近实际建筑时,我们会动态加载该建筑的更多细节。