【发布时间】:2019-11-12 14:17:52
【问题描述】:
我一直使用 .obj 文件将模型加载到 three.js 中。 我在某处读到首选方法是现在使用 .gltf。
当我开始这样做时,我意识到虽然使用 gltf 加载对象确实很简单,但一旦对象在内部,obj 似乎更加灵活。
比如:
- 改变材料属性
- 将阴影更改为平面
- 控制对象对特定输入的反应。
这些似乎都很困难/在 gltf 中不受支持,您可以使用 obj 轻松完成它们。
gltf 具体有什么好处?我假设文件大小,但似乎你必须放弃很多控制才能获得这个好处。
【问题讨论】:
-
你可以用任何格式控制上面的所有东西——一旦你将模型加载到threejs中,它就只是一个THREE.Scene或THREE.Mesh。不同之处可能是 OBJ 给了你一个单一的网格,glTF 文件可能在一个场景中有多个嵌套对象?这取决于模型,但可能需要稍微不同的代码来管理。
-
好吧,这是有道理的;如果有多个网格,那么我如何查询它们?更多解释:我已经用大约 80 个不同的对象构建了我的模型;我可以将它们合并,但我认为不支持 .glb 中的多材料,所以我可能只能合并到 12 个单独的网格。编辑:在这里找到一个教程:threejsfundamentals.org/threejs/lessons/threejs-load-gltf.html 看起来没有简单的方法,但你可以在控制台中注销层次结构,因为我已经建立了自己的模型,我应该能够使用正确的图层名称重新导出,然后能够访问。谢谢@don
-
object.traverse((o) => {...})或.getObjectByName(name)是使用嵌套对象的最常用方法。
标签: javascript three.js gltf