如何将对象转换为JSON文件以供three.js模型加载器使用

16

我正在使用 three.js 构建一个浏览器游戏,我想要将来自 Maya 2013 的模型加载到场景中。我已经将模型导出为 obj 文件。

现在我需要知道如何将它转换为 three.js -loader 所需的 JS 文件。

这是我的加载器:

 var jsonLoader = new THREE.JSONLoader();
 jsonLoader.load( "models/model.js", addModelToScene );

提前致谢


1
可能是重复的问题:如何将Maya文件转换为JSON文件并在three.js中使用……直接来自侧边栏。 - Matt Ball
1
或者,既然你已经将它转换为obj格式,你可以使用OBJLoader或OBJMTLLoader直接将其加载到three.js中。 - gaitat
你需要同时包含MTLLoader.js。 - gaitat
我已经包含了这两个文件:<script src="js/OBJLoader.js"></script><script src="js/OBJMTLLoader.js"></script> - user2259103
1
使用OBJloader和MTLloader不是最优的解决方案,因为应用程序每次加载时都必须解析几何图形。目前,我正在尝试(并一直尝试)让Blender识别出导出插件(在插件列表中仍然灰色)。 - Jack
显示剩余2条评论
6个回答

13
如果您不想使用blender,mrdoob(制作了threejs)有一个简单的Python脚本将obj转换为json。只需像这样在终端中运行--此脚本--即可:
python convert_obj_three.py -i infile.obj -o outfile.js

有没有想法可以自动化这个过程?导出几个模型都是很繁琐的工作。 - Adrian Moisa

11

6

我已经在Windows 8上尝试过了,但它不起作用。你测试过吗? - Sébastien Gicquel
嘿,我还没有在Windows 8上测试过它。你可以分享一下问题或截图吗? - Videep Mishraa
很不幸,在尝试了多种工作流程后,我发现使用converter.exe导出的顶点法线并不总是与.3ds文件匹配。我使用vertexNormalsHelper检查缺陷。然而,可以确定有效的是convert_obj_three.py Python脚本。它似乎提供了预期的结果。 - Adrian Moisa

6

3

使用[convert_obj_three.py][1]脚本将 3ds max 模型导出到 three.js 时,可以通过以下命令在 cmd 命令提示符中实现一定程度的自动化:

cd C:\Python27 &
python convert_obj_three.py -i _obj\chromeBand.obj -o _json\chromeBand.js &
python convert_obj_three.py -i _obj\controlPanelCover.obj -o _json\controlPanelCover.js

我写了一个3ds Max脚本,可以打印多个模型的Python脚本命令,并生成包含模型相对URL和坐标的JSON文件。该JSON文件可用于在场景中将多个模型置于正确位置。
(
local inputPath = "D:\Archive\Work\_Dev\_Convert\Obj\\"
local outputPath = "C:\Server\htdocs\viewer\assets\models\my-project\\"
local jsonPath = "assets/models/my-project/"
local myListEntry = "\n"

for o in selection do
    (
        myListEntry +=
        "\"" + o.name + "\": {\n" +
            "\t\"url\": \"" + jsonPath + o.name + ".js\",\n" +
            "\t\"position\": {\n" +
                "\t\t\"x\": \"" + o.position.x as string + "\",\n" +
                "\t\t\"y\": \"" + o.position.z as string + "\",\n" +
                "\t\t\"z\": \"" + (o.position.y * -1) as string + "\"\n" +
            "\t}\n" +
        "},\n"
    )

myListEntry += "\n\n\n=== Run this using cmd promt: ===\n"
myListEntry += "cd C:\Python27 &\n"

for o in selection do
    (
        myListEntry += "python D:\Archive\Work\_Dev\_Convert\convert_obj_three.py -i " + 
            inputPath + o.name + ".obj -o " + 
            outputPath + o.name + ".js & \n"
    )

myListEntry += "exit \n"
print myListEntry
actionMan.executeAction 0 "40472"
)
  • 创建一个新的文本文件,将其重命名为coordinates.mcr并将文件拖放到3ds max窗口中。它将自动打开MaxScript Listener窗口并打印结果。复制粘贴python命令到cmd中。使用打印的json批量加载您项目中的模型。
  • 此外,脚本可以分配给3dsMax工具栏中的按钮,以便快速访问。
  • 上述脚本可能需要进一步调整。虽然不是最好的解决方案,但至少可以加速操作,希望有帮助。
  • 使用Jos Balcaen的脚本批量导出obj文件(3ds Max)

编辑:

在尝试过脚本后,我做了一个设置,使我能够在不到1分钟的时间内从3ds max将我的模型(超过20个)导出到打开的浏览器标签页中。当然,您可能需要调整json输出以适应您的需求。希望这对您有用。


2

创建一个名为conversion.py的Python文件。点击此处了解如何创建

然后在您的终端中执行以下命令:

python conversion.py -i file.obj -o file.js

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接