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

Posted

技术标签:

【中文标题】如何使用 THREE.js 向 collada 文件 (.dae) 添加纹理?【英文标题】:How can I add textures to collada file (.dae) using THREE.js? 【发布时间】:2018-02-26 00:40:31 【问题描述】:

我需要使用 three.js 显示 collada 文件 (.dae),我可以加载模型但它显示时没有纹理,使用此代码

var loader = new THREE.ColladaLoader( loadingManager );
            loader.options.convertUpAxis = true;
            loader.load( './car.dae', function ( collada ) 

                car = collada.scene;

                car.material = 
     THREE.TextureLoader("../model/car_white.jpg");

我尝试了其他代码,只有这个代码适用于模型但没有纹理 需要您的支持来添加我的纹理。

【问题讨论】:

如果您的纹理在 collada 模型中,那么您需要按照github.com/mrdoob/three.js/blob/master/examples/… 的示例进行操作。如果 collada 模型没有直接引用您的纹理,则需要一个 collada 编辑器(添加它们)。从 three.js 向模型添加纹理会非常困难,因为您需要计算 UV 坐标……这对于非简单模型来说并不容易。 【参考方案1】:

一般来说,您可以像这样向模型添加纹理:

var textureLoader = new THREE.TextureLoader();
var texture = textureLoader.load('../model/car_white.jpg');

loader.load( './car.dae', function ( collada ) 

  collada.scene.traverse(function (node) 
    if (node.isMesh) 
      node.material.map = texture;
    
  );

);

有关详细信息,请参阅 THREE.Material 和 THREE.TextureLoader 的文档。

注意:正如@gaitat 在评论中提到的,如果它们不是为彼此设计的,并且模型不是很简单,则您的纹理可能无法正确包裹在模型上。如果是这种情况,您可能需要在 Blender(或其他软件)中添加纹理,您可以在其中创建 UV,并导出结果。

【讨论】:

以上是关于如何使用 THREE.js 向 collada 文件 (.dae) 添加纹理?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Three.js 中克隆包含多个网格的 Collada 对象

如何将 collada 对象加载到 three.js?

如何在 Three.js 中用 ShaderMaterial 替换 Collada 导入的纹理?

如何使用 Three.js 和 Collada Loader 更新 .dae 文件中模型的特定部分

更改 Three.js collada 对象的纹理和颜色

Collada 模型面无法在 three.js 中正确显示