Javascript 为什么我的飞机要剪我的OBJ?
我目前正在使用three.js和react进行一个项目 我必须加载一个OBJ并显示它。一切都很好,直到我尝试在场景中添加更多元素,使其更加美丽 只要我添加另一个网格,如平面或长方体(在本例中为长方体),我的OBJ就会被剪切,我们只能看到裤子的纽扣。有人能解释一下为什么会这样吗?我找不到任何理由让飞机或箱子来切割我的obj 下面是我用来加载对象的两个函数。我知道我并没有在应该的时候使用setState,现在只是为了kick原型Javascript 为什么我的飞机要剪我的OBJ?,javascript,reactjs,three.js,Javascript,Reactjs,Three.js,我目前正在使用three.js和react进行一个项目 我必须加载一个OBJ并显示它。一切都很好,直到我尝试在场景中添加更多元素,使其更加美丽 只要我添加另一个网格,如平面或长方体(在本例中为长方体),我的OBJ就会被剪切,我们只能看到裤子的纽扣。有人能解释一下为什么会这样吗?我找不到任何理由让飞机或箱子来切割我的obj 下面是我用来加载对象的两个函数。我知道我并没有在应该的时候使用setState,现在只是为了kick原型 createPlane = (scene) => {
createPlane = (scene) => {
var planeGeometry = new THREE.BoxGeometry( 1, 1, 1 );
const planeMaterial = new THREE.MeshBasicMaterial({color: '#E8E8E8', side: THREE.DoubleSide})
this.setState({plane:new THREE.Mesh(planeGeometry, planeMaterial)}, () => {
this.state.plane.frustumCulled = false;
this.state.plane.scale.set(1, 1, 1);
scene.add(this.state.plane)
})
}
loadObj = (scene) => {
//const loader = new OBJLoader()
const mtlloader = new MTLLoader()
const textureLoader = new THREE.TextureLoader()
textureLoader.load('models/jeans2_tex.png', (tex) => {
tex.wrapS = THREE.RepeatWrapping;
tex.wrapT = THREE.RepeatWrapping;
//tex.repeat.set( 4, 4 );
new OBJLoader().load('models/Jeans2_blue.OBJ', (object) => {
console.log('TEXTURE', tex)
console.log('OBJECT', object)
//let new_mat = new THREE.MeshBasicMaterial( {map: tex, side: THREE.DoubleSide} )
let new_mat = new THREE.MeshStandardMaterial({map: tex, metalness: 0.1, roughness: 0.9})
object.position.y = -2.0
object.frustumCulled = false
object.children.map((child) => {
console.log('CHILD')
child.material = new_mat
})
this.setState({object: object}, () => {scene.add(this.state.object)})
}, (xhr) => {
console.log((xhr.loaded / xhr.total * 100) + '% loaded')
},
(error) => {
console.log('AN error happened')
}
)
})
这只是一个暗中操作,但是当您执行
This.setState({object:object})时,您确定没有混淆React框架吗代码>object
是JavaScript中的保留关键字,当您将plane
设置为状态时,它可能会覆盖以前的object
。尝试this.setState({jeans:object})
@MarquizzoObject
(大写O)是保留字,Object
(小写O)可以。