You need to enable JavaScript to run this app. 如何使用TypeScript与Three.js为导入的3D模型添加纹理
优惠活动
大模型
产品
解决方案
定价
更多

如何使用TypeScript与Three.js为导入的3D模型添加纹理

Matterport Showcase SDK 技术栈说明

该SDK的3D渲染层基于Three.js构建,SDK官方的类型定义、演示示例全部采用TypeScript编写,和你了解的技术栈方向一致。

导入外部3D模型的纹理实现方法

SDK内置的FBX、OBJ、DAE加载组件,本质是对Three.js对应格式加载器的上层封装,模型加载完成后会将解析得到的Three.js Mesh对象挂载到组件输出上,添加纹理的核心流程分为三步:

  • 监听模型加载完成的回调事件,等待模型资源全部解析完成
  • 提前完成目标纹理的异步加载,确保纹理资源可被Three.js正常访问
  • 遍历模型下所有网格对象,给对应材质赋值纹理资源

适配现有代码的实现参考

在你当前导入FBX椅子模型的代码基础上,调整后的完整逻辑如下:

const modelNode = await sdk.Scene.createNode();
const fbxComponent = modelNode.addComponent(sdk.Scene.Component.FBX_LOADER, {
    url: '对应FBX椅子模型的可访问路径',
});
// 配置模型缩放
fbxComponent.inputs.localScale = {
    x: 0.01,
    y: 0.01,
    z: 0.01
};
// 监听FBX模型加载完成事件
fbxComponent.outputs.onLoadComplete.watch((loadedModel) => {
    // 遍历模型内所有网格节点
    loadedModel.traverse((node) => {
        // 筛选带渲染材质的网格对象
        if (node.isMesh) {
            // 将已加载好的纹理赋值给材质漫反射通道
            node.material.map = 已加载完成的纹理资源对象;
            // 标记材质更新,确保纹理修改生效
            node.material.needsUpdate = true;
        }
    })
});
// 设置模型空间位置
modelNode.obj3D.position.set(-5, 0, -5);
// 启动模型节点
modelNode.start();

新手实现注意事项

  • 纹理资源存放的服务需要配置CORS跨域规则,否则Three.js会因安全限制无法正常解析纹理内容
  • 如果源格式的3D模型已经内置了纹理关联关系,SDK会在加载流程中自动解析并绑定对应纹理,无需手动重复赋值
  • 加载OBJ、DAE格式模型时,仅需将组件类型替换为对应的OBJ_LOADER、COLLADA_LOADER即可,后续修改纹理的遍历逻辑完全通用
  • 禁止在组件刚创建时就操作模型材质,此时模型资源尚未加载完成,无法获取到有效的Mesh对象

内容的提问来源于stack exchange,提问作者Raffy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 00:15:09