gpt4 book ai didi

javascript - Three.js raycast 产生空的相交数组

转载 作者:行者123 更新时间:2023-12-03 09:43:49 25 4
gpt4 key购买 nike

我正在尝试检测用户何时单击了我的 3d 场景中的特定立方体我见过一些类似的问题,但似乎没有一个问题与我完全相同。

我有一个 3D 立方体数组,可以很好地填充和显示,但是当我的鼠标按下函数被调用时,相交数组总是空的 - 我看不出有什么问题,希望能得到任何帮助。

我的渲染器是这样设置的:

function setupRenderer()
{
renderer = new THREE.WebGLRenderer({antialias: true});
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColorHex( 0xEEEEEE, 1 );
renderer.domElement.addEventListener( 'mousedown', onDocumentMouseMove, false );
$('body').append(renderer.domElement);
}

事件处理程序是:

function onDocumentMouseDown(event)
{
console.log("mouse clicked!");
event.preventDefault();
if(event.target == renderer.domElement)
{
var mouseX = (event.clientX / window.innerWidth)*2-1;
var mouseY = -(event.clientY /window.innerHeight)*2+1;

var vector = new THREE.Vector3(mouseX, mouseY, 0.5);
projector.unprojectVector(vector, camera);

var raycaster = new THREE.Raycaster(camera.position, vector.subSelf(camera.position).normalize());
var intersects = raycaster.intersectObjects(cubes);
console.log("intersects.length: " + intersects.length);
if ( intersects.length > 0 ) {
console.log("intersected objects");
/* do stuff */
}
}
}

您可以在 http://kev-adsett.co.uk/experiments/three.js/experiment1/ 查看当前正在运行的项目

最佳答案

你需要传入一个对象数组

var intersects = raycaster.intersectObjects( objects );

如果对象数组是分层的(即其中一个对象有一个子对象),那么您需要这样指定:

var intersects = raycaster.intersectObjects( objects, true );

你也可以传入scene.children

此函数不适用于您的“立方体”数据结构。

three.js r.54

关于javascript - Three.js raycast 产生空的相交数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14130825/

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