Three.js 在threejs中选择一个对象?
我认为问题可能是因为它是一个加载的对象,而不是“创建”的几何体,但我希望能够选择一个对象并显示它已被选中,如示例所示 我在中加载多个对象,并跟踪每个对象的索引(因此加载的第一个对象的objIndex=0,等等),我知道当我从控制台“按下鼠标”时,代码可以识别。但是,它表示intersects.length=0,因此跳过函数的其余部分 我也不确定什么“intersects.length”实际上是指长度 所以我想我的问题是:Three.js 在threejs中选择一个对象?,three.js,Three.js,我认为问题可能是因为它是一个加载的对象,而不是“创建”的几何体,但我希望能够选择一个对象并显示它已被选中,如示例所示 我在中加载多个对象,并跟踪每个对象的索引(因此加载的第一个对象的objIndex=0,等等),我知道当我从控制台“按下鼠标”时,代码可以识别。但是,它表示intersects.length=0,因此跳过函数的其余部分 我也不确定什么“intersects.length”实际上是指长度 所以我想我的问题是: 什么是“相交长度”取长度 为什么我的对象的“intersects.leng
function onDocumentMouseDown(event) {
event.preventDefault();
// default action of event will not be triggered
var vector = new THREE.Vector3(mouse.x, mouse.y, 0.5).unproject(camera);
// used to pass 3D positions and directions
var raycaster = new THREE.Raycaster(camera.position,
vector.sub(camera.position).normalize());
var intersects = raycaster.intersectObjects(objects);
console.log('Mouse is down.');
console.log(intersects.length);
if (intersects.length > 0) {
controls.enabled = false;
SELECTED = intersects[0].object;
var intersects = raycaster.intersectObjects(plane);
offset.copy(intersects[0].point).sub(plane.position);
container.style.cursor = 'move';
console.log('Clicked object: ' + object.name);
}
}
如果你需要看更多,请告诉我!谢谢。:) 回答您的问题: 下面是一篇有关raycast的有趣文章,有助于澄清raycast: 所以光线投射基本上就是投射一条假想的光线。当你“按下鼠标”时,你的程序将在场景中投射一个直线阵列。现在回答你的问题: 对于问题1(1)和问题2(2):现在,当您投射光线时,它可能与对象相交,也可能不相交。例如,如果在空白处单击,光线将捕捉不到对象。但是,顾名思义,光线投射会投射一条光线,并且它也可能会沿途击中多个对象。例如,如果一个对象和另一个对象位于第一个对象的正后方,则将光线投射到第一个对象中也会与第二个对象相交。光线投射将“捕捉”两个对象,并将两个对象放入数组“相交”。因此,命令
if (intersects.length > 0)
声明如果光线投射“捕捉”对象,请执行以下操作。此外,它不断调用intersects[0]来引用intersects数组中的第一个对象。在本例中,光线投射捕捉的最前面的对象。您可以通过创建数百个对象来测试我的答案,并声明对于相交数组中的每个成员,您可以将颜色更改为红色(例如)。您将看到,如果光线投射捕捉到多个对象,所有对象都将变成该颜色。希望是前两个问题
第三个问题我不知道你在问什么。你能进一步澄清吗?识别对象的一种方法是将它们放入场景中,并在场景中放置光线投射。但是,我不太确定您想要什么样的答案。您使用的是哪个版本的There.js?应该是最新的版本。