如何为three.js模型加载器将对象转换为json文件
Posted
技术标签:
【中文标题】如何为three.js模型加载器将对象转换为json文件【英文标题】:How to convert object to json file for three.js model loader 【发布时间】:2013-03-31 01:04:21 【问题描述】:我正在使用 three.js
构建一个浏览器游戏,并且我想将 Maya 2013 中的模型加载到我的场景中。我已将模型导出为 obj 文件。
现在我需要知道如何将其转换为three.js
-loader 的JS 文件。
到目前为止,这是我的加载器:
var jsonLoader = new THREE.JSONLoader();
jsonLoader.load( "models/model.js", addModelToScene );
提前致谢
【问题讨论】:
How could i convert a maya file into a json file and use it with three.js 的可能副本 ...直接来自侧边栏。 或者,既然你已经转成obj了,可以使用OBJLoader或者OBJMTLLoader直接加载到three.js中 我尝试了 OBJLoader,但我得到了一个类型错误:THREE.MTLLoader 不是 costructor。但包含 OBJLoader 您还需要包含 MTLLoader.js。 使用 OBJloader 和 MTLloader 不是最佳解决方案,因为应用程序必须在每次加载时解析几何。目前,我正在尝试(并尝试)让 Blender 识别导出器插件,(在插件列表中仍然显示为灰色。) 【参考方案1】:如果你不想使用blender,mrdoob(madethreejs) 有一个简单的python 脚本可以将obj 转换为json。只需像这样在终端中运行--this script--:
python convert_obj_three.py -i infile.obj -o outfile.js
【讨论】:
关于如何自动化的任何想法?导出几个模型也是一件繁琐的工作。【参考方案2】:使用搅拌机。
Blender 3D
然后安装这个插件:
Three.js exporter
【讨论】:
【参考方案3】:这是一个很晚的回复。我编写了一个转换器来读取 obj 文件并转换为 ThreeJS 支持的 JSON 格式: https://github.com/theMaxscriptGuy/Windows_Programs/tree/master/Obj_To_ThreeJS
将所有文件以 zip 格式下载并运行 converter.exe...
【讨论】:
我已经在 Windows 8 上尝试过,但它不起作用。你测试过吗? 嘿,我无法在 Windows 8 上测试它。你能分享一下问题/截图吗? 不幸的是,在对各种工作流程进行大量试验后,我发现使用 converter.exe 导出的顶点法线并不总是与 .3ds 文件匹配。我使用vertexNormalsHelper
来检查缺陷。但是,可以肯定的是convert_obj_three.py
python 脚本。它似乎给出了预期的结果。【参考方案4】:
注意:python转换器脚本已更新为基于js的工具https://github.com/mrdoob/three.js/tree/dev/utils/converters
用法:
node obj2three.js model.obj
【讨论】:
【参考方案5】:使用[convert_obj_three.py][1]
脚本将3ds max 模型导出到three.js 时,可以在cmd promt 中使用以下命令来实现一定程度的自动化:
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 脚本,它将打印多个模型的 phyton 脚本命令,以及一个带有模型相对 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"
)
创建一个新的 txt 文件,将其重命名为 coordinates.mcr
并将文件拖放到 3ds max 窗口中。它将自动打开 MaxScript Listener 窗口并打印结果。将python命令复制粘贴到cmd中。使用打印的 json 在项目中批量加载模型。
此外,可以将脚本分配给 3dsMax 工具栏中的按钮,以便快速访问。
上述脚本可以进一步调整。不是最好的解决方案,但至少它可以加快速度,希望如此。
使用 Jos Balcaen 的 exporting obj files in batch 脚本 (3ds Max)
编辑:
在对脚本进行了一些试验后,我做了一个设置,允许我在 1 分钟内从 3ds max 导出我的模型(超过 20 个)以打开浏览器选项卡。当然,您可能需要根据自己的喜好调整 json 输出。希望你会发现这很有用。
【讨论】:
【参考方案6】:创建一个名为 conversion.py
的 Python 文件,其内容如下:click here to see it。
然后在你的终端中运行这个命令:
python conversion.py -i file.obj -o file.js
【讨论】:
以上是关于如何为three.js模型加载器将对象转换为json文件的主要内容,如果未能解决你的问题,请参考以下文章
有啥方法可以从 three.js Object3D 中获取边界框?
如何为从 .dae 文件导入的对象生成 ID,在下一次加载时将是相同的?
Three.js 在通过 OBJMTLLoader 加载的对象上的多种材质