我正在尝试使用带有OBJLoader和Webpack的three.js (docs) - vue-threejs。
var OBJLoader = require('three-obj-loader')
OBJLoader(THREE)
var loader = new THREE.OBJLoader()
loader.load( require('./sphere.obj'), function ( geometry ) {
var material = new THREE.MeshBasicMaterial( { color: 0xffffff } )
var mesh = new THREE.Mesh( geometry, material )
return mesh
})
然而,这不起作用。我已尝试延迟网格创建,如this answer并使用webpack raw-loader和file-loader。仍然有这个错误。
答案 0 :(得分:0)
感谢fritx粘贴了这个答案 来自:https://github.com/fritx/vue-threejs/issues/2
感谢您使用该库!
现在,组件假设网格在创建时存在,如<object3d :obj="mesh"></object3d>
。
如果您使用的是异步加载程序,则代码可能如下所示:
<template>
<object3d v-if="mesh" :obj="mesh"></object3d>
</template>
<script>
export default {
data () {
return {
mesh: null // <----
}
},
methods: {
createBox () {
objLoader.load(xxx, geometry => {
let mesh = new THREE.Mesh(geometry, material)
this.mesh = mesh // <----
})
}
}
}
</script>
关键字user:fritx "Loader.load(":
(包括vue-threejs和react-threejs中的代码)
https://github.com/search?q=user%3Afritx+%22Loader%28%29.load%28%22&ref=opensearch&type=Code
在&#34; ExSpaceFighter.js&#34;中,我还有一个包含MTLLoader和OBJLoader的片段:
希望有所帮助。
var mtlLoader = new MTLLoader();
mtlLoader.setBaseUrl( 'SpaceFighter03/' )
mtlLoader.setPath( 'SpaceFighter03/' )
mtlLoader.load( 'SpaceFighter03.mtl', ( materials ) => {
materials.preload();
var objLoader = new OBJLoader();
objLoader.setMaterials( materials );
objLoader.setPath( 'SpaceFighter03/' )
objLoader.load( 'SpaceFighter03.obj', ( group ) => {
const body = group.children[0]
body.material.color.set(0xffffff)
this.setState({ body })
})
})
如果我错了,请告诉我;)