如何将图像和纹理添加到 Three.js JSON 对象文件

Posted

技术标签:

【中文标题】如何将图像和纹理添加到 Three.js JSON 对象文件【英文标题】:How to add images & textures to Three.js JSON object file 【发布时间】:2018-03-25 20:04:42 【问题描述】:

我的主要目标是使用出色的 Three.js 库将在 3DS/MAX 中创建的 3D 模型加载到 WebGL。我已经朝着这个目标完成了以下步骤。

    尝试将 MAX 插件导出器直接用于 Three.js JSON。这是有问题的,而且没有用。 已将 MAX 模型导出为 OBJ 格式。 使用 Three.js 转换器 Obj2Three.js 将 OBJ 模型转换为 JSON 格式。 这很好用,我现在可以将我的模型加载到 Three.js 中,但它没有应用任何纹理/图像。 检查了 JSON 文件,其中包含几何、材料、元数据和对象部分。 Three.ObjectLoader 显然也可以处理图像和纹理,如果这些部分在文件中定义的话。

所以我的问题是这是如何完成的?是否有任何实用程序可以帮助将纹理添加到 JSON 文件?

【问题讨论】:

【参考方案1】:

您根本不需要转换。查看 three.js 的示例文件夹,您应该会看到一大堆加载器。如果您想要被广泛使用的东西,请使用 OBJLoader,否则我建议查看 FBXLoader 或 ColladaLoader2,因为这些文件的大小比 .obj 或 JSON 小得多。这是使用 FBXLoader 并添加纹理的演示,但您可以在每个加载器中使用相同的概念:

loadFBX = function(modelPath, texturePath) 

  var container = new THREE.Object3D();

  fbxLoader.load(modelPath, function( object ) 

        container.add(object);

   object.traverse (function (child) 

        if (child instanceof THREE.Mesh) 
           //here's how we add the texture, you may need to
           //UV Unwrap your model first in 3Ds
           child.material = new THREE.MeshLambertMaterial();
           child.material.map = textureLoader.load(texturePath);
        

     );

    , onProgress, onError );

    return container;


var model = loadFBX('../models/model.fbx', '../textures/texture.png');
scene.add(model);

当您可以直接加载 .obj 甚至 .fbx 格式时,为什么要转换?但是如果你真的想要,有一个非常简单的方法可以将纹理添加到你的 JSON 模型中。 使用在线 Three.js 编辑器并将您的 .obj 或任何模型拖到场景中。从那里您可以使用可视化编辑器添加图像纹理,然后将对象导出为 .json。然后,您可以简单地将其加载到场景中,纹理将包含在 JSON 文件中。

【讨论】:

谢谢。我尝试使用 FBXLoader 并没有成功。我想知道我是否在 3DS//MAX 中使用了正确的导出设置。你知道FBX格式应该是二进制还是ASCII?它应该导出到什么 FBX 文件版本?导出的默认值为二进制和 FBX 版本 2014/2015。 标准 fbx 应该是二进制的,确保在加载器之前包含inflate.min.js

以上是关于如何将图像和纹理添加到 Three.js JSON 对象文件的主要内容,如果未能解决你的问题,请参考以下文章

如何等待纹理完成从 Three.js 中的 JSON 模型加载?

THREE.JS 从搅拌机中导出 JSON 模型(包括纹理)

如何禁用three.js以以2的幂调整图像大小?

如何使用 THREE.js 向 collada 文件 (.dae) 添加纹理?

深入理解Three.js(WebGL)贴图(纹理映射)和UV映射

如何使用Three.js获取纹理尺寸