【问题标题】:glTFLoader vs ObjLoader in threejs?Threejs中的glTFLoader vs ObjLoader?
【发布时间】: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


【解决方案1】:

.obj 与 gltf 没有我能想到的优势。 Obj 不容易支持层次结构..它不支持现代材质,没有着色器,没有灯光/相机..没有几何组。 Obj 基本上是一种糟糕的格式,除了它是人类可读的(文本 gltf 也是)。此外.. gltf 支持网格压缩... 压缩纹理格式。二进制缓冲区,具有嵌入式资源的单个文件导出。 Obj 格式来自 70 年代后期的 iircs。 Gltf 是实时 3d 领域 4 多年发展的产物,专为 Web 3d 资产交付而设计。

【讨论】:

  • 有任何参考资料可以支持您的回答吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 2020-05-22
  • 1970-01-01
相关资源
最近更新 更多