gpt4 book ai didi

javascript - 使用 FBXLoader 加载相交对象——Three.js

转载 作者:行者123 更新时间:2023-11-30 20:53:45 26 4
gpt4 key购买 nike

我正在使用 FBXLoader 加载一个 fbx 文件。它已成功加载并添加到场景对象中。我想通过单击来获取此对象以应用变换控件。除了通过 FBXLoader 加载外,所有其他对象都是可点击的。

var loader = new THREE.FBXLoader( manager );
loader.load( 'assets/models/fbx/iphone_ascii.fbx', function( object ) {
scene.add( object );
}, onProgress, onError );

这是我的路口代码:

onMouseDown(event) {
event.preventDefault();
event.stopPropagation();
event.stopImmediatePropagation();
let rect = this.renderer.domElement.getBoundingClientRect();

this.mouse.x = ((event.clientX - rect.left) / (this.viewportWidth)) * 2 - 1;
this.mouse.y = - ((event.clientY - rect.top) / (this.viewportHeight)) * 2 + 1;
let vector = new THREE.Vector3( this.mouse.x, this.mouse.y, 1 );

vector.unproject(this.camera);

let ray = new THREE.Raycaster( this.camera.position, vector.sub(this.camera.position).normalize() );

let intersects = ray.intersectObjects(this.scene.children);

if (intersects.length > 0) {
if (this.activeobject !== intersects[0].object) {
this.activeobject = intersects[0].object;
this.transformControls.detach(this.activeobject);
this.transformControls.attach(this.activeobject);
}
}

this.renderer.render(this.scene, this.camera); }

最佳答案

来自THREE.Raycaster docs ,请注意 intersectObjects(objects, recursive) 采用第二个参数。因为像 FBX 这样的模型通常是嵌套对象的集合,所以您需要使用 recursive 选项。

let intersects = ray.intersectObjects(this.scene.children, true);

关于javascript - 使用 FBXLoader 加载相交对象——Three.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47892541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com