【问题标题】:Select specific mesh in obj file or edit file在 obj 文件或编辑文件中选择特定网格
【发布时间】:2020-04-12 12:46:41
【问题描述】:

我买了一个 3d 网格包here,但我不知道如何一个接一个地加载这个包中的对象。我将它们加载到我的巴比伦游戏中:

BABYLON.SceneLoader.ImportMesh("", "./", "./resources/objects/house pack.obj", scene, function (newMeshes) { } )

但它会像上面链接的第一个屏幕截图一样加载整个网格。抱歉,使用网格有点菜鸟,但我可以单独加载子网格吗?或者一次全部,但通过某种方式从另一个解析一个?如果没有,知道如何轻松编辑网格以为每个网格创建单独的文件吗?我尝试了 meshlab,但它一直在崩溃并且行为怪异。

【问题讨论】:

    标签: 3d mesh .obj babylonjs meshlab


    【解决方案1】:

    假设您的输入 obj 文件按组进行组织,SceneLoader.ImportMesh 会从文件中加载网格并将它们附加到场景中。第一个参数可以设置为空来加载所有网格,也可以给出你感兴趣的网格列表

    BABYLON.SceneLoader.ImportMesh(["chair1", "desk1"], "./", "./resources/objects/house pack.obj", scene, function (newMeshes) 
    {
        // do something with the meshes
        var meshes = newmeshes.meshes;
        var materials = newMeshes.materials;
    });
    

    您需要知道集合内的网格列表,在资产手册中列出或使用编辑器阅读 house pack.obj 文件。

    另外,您可以改为使用 SceneLoader.LoadAssetContainer 从文件中加载所有资源,直到稍后才将它们附加到场景中。

    BABYLON.SceneLoader.LoadAssetContainer("./", "house pack.obj", scene, function (container) {
        var meshes = container.meshes;
        var materials = container.materials;
        //...
    
        // Adds all elements to the scene
        container.addAllToScene();
    });
    

    【讨论】:

    • 如果我尝试你提到的第二个 sn-p 并在其中添加一个“console.log(meshes)”,输出是一个长度为 1 的数组,其中包含一个包含一堆不同的对象特性。这是否意味着我的 obj 文件没有以正确的方式设置来解析项目,或者是一个长度为 1 的数组,我需要深入研究该对象中的一个属性以获取子网格?
    • 不能说不看文件。我想该文件是按组组织的(在 obj 文件中以字母 g 开头的行)
    • 是的,我打开了文件,只有一行以 g 开头的“g g0”。所以我想这一切都在一个组中:/
    • 那么你的下一个选择是在meshlab或blender中加载文件并手动分离成几个独立的.obj文件。如果您对一两个资产感兴趣,这很容易,如果您想将文件中的每个资产分开,则很繁琐。
    猜你喜欢
    • 2012-06-15
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多