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