gpt4 book ai didi

javascript - 在 THREE.js 中检测点击对象

转载 作者:IT王子 更新时间:2023-10-29 03:23:20 27 4
gpt4 key购买 nike

我有一个 THREE.js 场景,其中出现了很多元素,我需要检测用户点击的是什么对象。

到目前为止,我所做的如下。相机不会移动太多——它只会有限地改变垂直位置,始终注视同一点。我的大致方法如下:

  • 如果点击相对于 Canvas ,我取坐标
  • 我通过简单的重新缩放将它们转换为 webGL 场景中的水平和垂直坐标,并添加一个足够远的 Z 坐标。
  • 我从上面的点开始拍摄水平光线,由 THREE.Ray() 构造
  • 我使用 ray.intersectObjects() 找到沿射线的第一个元素。

此方法大致可行,但有时会偏离实际点几个像素。

Is there a more reliable technique to find out the object where a user has clicked?

最佳答案

取决于您使用的是哪种相机。

1) PerspectiveCamera:Mr.doob 提供的链接。
2)OrthographicCamera:完全不同:

var init = function() {
camera = new THREE.OrthographicCamera( SCREEN_WIDTH / - 2, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, SCREEN_HEIGHT / - 2, NEAR, FAR);
document.addEventListener( 'mousedown', onDocumentMouseDown, false );
}

function onDocumentMouseDown( e ) {
e.preventDefault();
var mouseVector = new THREE.Vector3();
mouseVector.x = 2 * (e.clientX / SCREEN_WIDTH) - 1;
mouseVector.y = 1 - 2 * ( e.clientY / SCREEN_HEIGHT );
var raycaster = projector.pickingRay( mouseVector.clone(), camera );
var intersects = raycaster.intersectObject( TARGET );
for( var i = 0; i < intersects.length; i++ ) {
var intersection = intersects[ i ],
obj = intersection.object;
console.log("Intersected object", obj);
}
}

关于javascript - 在 THREE.js 中检测点击对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7956442/

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