gpt4 book ai didi

javascript - THREE.js 从 child 相机到场景的光线转换

转载 作者:数据小太阳 更新时间:2023-10-29 05:12:17 25 4
gpt4 key购买 nike

我正在尝试从我的相机对鼠标进行光线转换,以便在场景中的网格上执行一些悬停和单击事件。

我的问题是,我的相机目前是另一个网格的子对象(以便于相机移动/旋转),现在我的光线转换不起作用(我假设是因为相机是网格的子对象,而不是场景)。

这是我的部分代码:

//camera setup
var camera = new THREE.PerspectiveCamera(60, window.innerWidth/window.innerHeight, 0.1, 1000);

var cameraTargetGeom = new THREE.SphereGeometry(0.5);
var cameraTargetMaterial = new THREE.MeshLambertMaterial({color: 0xff0000, ambient: 0xff0000});
var cameraTarget = new THREE.Mesh(cameraTargetGeom, cameraTargetMaterial);
cameraTarget.position.set(0.15, 0, 5);
scene.add(cameraTarget);
cameraTarget.add(camera);

camera.position.y = 18;
camera.rotation.x = Math.PI * -90 / 180;



// click event
renderer.domElement.addEventListener('click', clickedCanvas);

function clickedCanvas(e) {
e.preventDefault();

mouse.x = (e.clientX / renderer.domElement.width) * 2 - 1;
mouse.y = -(e.clientY / renderer.domElement.height) * 2 + 1;

raycaster.setFromCamera(mouse, camera);

var intersects = raycaster.intersectObjects(scene.children, true);
console.log(intersects);

if (intersects.length > 0) {
>... (redacted code)
}
}

在我将相机添加到 cameraTarget 对象之前它工作正常。既然它是 cameraTarget 的子项,我如何从相机进行光线转换?

最佳答案

您可以使用以下模式进行光线转换,即使相机是另一个对象的子对象,它也能正常工作。它适用于透视相机和正交相机。

var raycaster = new THREE.Raycaster(); // create once and reuse
var mouse = new THREE.Vector2(); // create once and reuse

...

mouse.x = ( event.clientX / renderer.domElement.clientWidth ) * 2 - 1;
mouse.y = - ( event.clientY / renderer.domElement.clientHeight ) * 2 + 1;

raycaster.setFromCamera( mouse, camera );

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

three.js r.84

关于javascript - THREE.js 从 child 相机到场景的光线转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28872583/

25 4 0
文章推荐: javascript - d3.event 在 debounced 函数中为 null
文章推荐: javascript - 如何使用 Cheerio js 删除
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com