前言:最近用vue+threre.js实现3d页面的时候,发现导入obj模型时模型在页面中显示不出来的问题。也纠结了好几天,换了好几种方式去试,到底是模型有问题还是代码有问题?真是个令人头痛的问题啊!
一、关于obj模型存放的目录
- 这里我用的vue是4.x版本的。
- 在vue中存放obj模型必须要放在静态资源(static)文件下,否则会出错。
- 由于4.x版本的vue没有static这个文件夹,但是他的静态资源文件夹是叫
public
,这样我在public下面创建一个文件夹叫static,再在static文件夹下存放的我的obj模型文件以及mtl文件。 - 文件目录如下:
二、关于obj模型的导入
直接上代码吧:
<template>
<div id="academy">
</div>
</template>
<script>
import * as THREE from "three";
import {
OBJLoader,MTLLoader} from "three-obj-mtl-loader";
const OrbitControls = require('three-orbit-controls')(THREE);
export default {
name:'academy',
data(){
return{
}
},
methods: {
/**加载模型 */
loadPlant() {
let that = this;
let objLoader = new OBJLoader();
let mtlLoader = new MTLLoader();
mtlLoader.load("/static/academic/bluegrayhome.mtl", function(materials) {
// materials.preload();
objLoader.setMaterials(materials);
objLoader.load(
"/static/academic/bluegrayhome.obj",
function(obj) {
obj.position.set(0, 0,0);
obj.scale.set(0.01, 0.01, 0.01);
that.scene.add(obj);
},
// called while loading is progressing
function(xhr) {
console.log((xhr.loaded / xhr.total) * 100 + "% loaded");
},
// called when loading has errors
function(error) {
console.log("An error happened");
}
);
});
},
},
mounted() {
this.loadPlant();
}
}
</script>
这里关于相机,场景等初始化的内容没有放上去。
在导入obj之前还要 npm install three-obj-mtl-loader
,并在组件中引入。
三、关于obj模型显示不出来的问题
敲黑板,这个问题真的是!!!!!一言难尽!!!
在我的这里obj模型已经是加载出来了,但就是在页面中显示不出来,也就是我看不到它!!!!
那这是为什么呢?为什么显示不出来呢?于是我又发现控制台中报了warnings,起初我以为是这个warning的问题,可后来经过多种方法的调试发现并不是这个问题。
于是乎我又开始崩溃了,怎么就是看不到呢?后来我又以为是模型太大的问题,但其实并不是。一次偶然我向页面中添加了轨道控制器,使场景可以旋转起来,然后我就发现!!!!!原来我的模型一直都在,只是它在我看不到的地方!!也就是我的相机根本照不到我的物体,所以我什么也看不到。(不要问我为什么起初没考虑这