最近在学习three.js的时候 ,发现按照官网的例子导入FBX模型,模型显示黑色 ,没有材质显示。故特此记录解决方法
1.引入FBXLoader 与 TGALoader
import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader
import { TGALoader } from 'three/examples/jsm/loaders/TGALoader
const fbxloader =new FBXLoader()
fbxloader.load('fbx模型路径',(fbx)=>{
console.log(fbx) //打印fbx信息
//遍历fbx 根据name的不同加载不同的图片
fbx.traverse((child)=>{
if(child.isMesh){
//此处更新fbx 模型的贴图信息 ,需要在引入GTALoader.js
const tgaloader=new TGALoader()
if(child.name ==='Face_001'){
tgaloader.load('name对应的贴图文件',(texture)=>{
//模型使用新的贴图纹理
texture.needsUpdate=true
child.material.map =texture
})
}
//==============替换多个贴图需要进行多个判断 ,有点繁琐 ! fbxloader.js源码 不支持tga ,也没有在源码上更改 ,只能这样子先处理了 !
}
})
})
小插曲
在使用 vue3的时候 我定义了 一个全局变量 !但是我在渲染的时候 这个变量还没有被初始化 ,没有对应的方法,导致报错! 这里我是用 **?.**这个 运算符 解决问题
let mixer =ref(null)
//代码赋值
//渲染调用
animate=()=>{
mixer.update?.(clock.getDelta())
//这个运算符 表示 如果存在下面的属性或者方法 才调用 ,不会出现警告
}
animate()