three.js加载obj模型和材质
1.Vue中安装three.js和加载用的包
安装three.js使用npm install three --save
安装加载obj和mtl文件的包npm install three-obj-mtl-loader
2.Vue中引用three.js和加载用的包
这里threejs我是作为全局变量引入的
main.js的代码如下:
import * as THREE from 'three'
Vue.prototype.THREE = THREE
组件中引入相应的加载类
import { OBJLoader, MTLLoader } from 'three-obj-mtl-loader'
3.对于obj和mtl文件说明
3D软件导出的文件包含:obj是3D模型,mtl是材质路径,还有一些图片。
这些图片就是所谓的材质,mtl文件规定了这些贴图所对应的模型,一个大型的obj文件会有很多个子模型,在mtl中也会有很多个子模块,每个模块都有对应的贴图以及贴图的路径,即mtl是联系obj和图片文件的桥梁。
4.加载obj模型和材质
var mtlLoader = new MTLLoader()// mtl材加载器
mtlLoader.setTexturePath('/data/tex/')// 材质加载路径
mtlLoader.load('/data/Shuriken.mtl', materials => {
materials.preload()
var objLoader = new OBJLoader()
objLoader.setMaterials(materials)
objLoader.load('/data/Shuriken.obj', (obj) => {
obj.traverse((child) => {
if (child instanceof that.THREE.Mesh) {
child.material.side = that.THREE.DoubleSide
child.scale.set(50, 50, 50)
}
})
that.scene.add(obj)
})
})
mtlLoader.setTexturePath('/data/tex/')
这个是材质加载路径,这个要和mtl文件中的路径结合起来才是对应材质图片的路径。obj.traverse((child) => {}
用来遍历obj文件中的每一个子模型,注意一定需要if (child instanceof that.THREE.Mesh)
这个判断,因为遍历返回的child不光有Mesh还有Group,我们这里只需要对Mesh操作就可以啦。
5.遇到的问题
(一)文件路径问题
3D软件导出文件都要放在静态文件夹下面,对于Vue3+而言是public文件,所以在引用的时候要用“/”。mtlLoader.load('/data/Shuriken.mtl'
单斜杠的意思就是public文件夹,这个静态文件夹在编译的时候是不会编译其地址的,所以放在服务器上也就是这个地址。
(二)threejs版本问题
报错:xxx has been removed,plase use loadingManager…
这个问题的原因是在加载mtl文件的时候用了旧版本的方式。
解决方案:
1.打开对应的index.js文件
2.找到对应位置更改
我的问题是因为Handler.get方法已经不用啦,用的是manager.getHandler(),即将下图中箭头的代码删去后半部分,将框中的代码恢复就行。
上一篇: threejs中的阴影
下一篇: mac下安装zsh
推荐阅读
-
Tensorflow加载预训练模型和保存模型的实例
-
tensorflow三种模型的加载和保存的方法(.ckpt,.pb,SavedModel)
-
图解JVM类加载机制和双亲委派模型
-
【java基础】面试常见问题:类和对象,封装继承多态,final关键字,static关键字,类加载过程,双亲委派模型
-
类加载器和双亲委派模型
-
PyTorch(七)——模型的训练和测试、保存和加载
-
DirectX11 With Windows SDK--19 模型加载:obj格式的读取及使用二进制文件提升读取效率
-
Three.js加载外部模型的教程详解
-
three.js加载obj模型的实例代码
-
threejs导入本地obj模型和材质