从子摄像机到场景的THREE.js光线投射

Ben

我正在尝试从相机射线照射鼠标以进行一些悬停并单击场景中的网格上的事件。

我的问题是,我的相机当前是另一个网格物体的子对象(为了使相机更容易移动/旋转),现在我的光线投射不起作用(我想是因为相机是网格物体的孩子,而不是场景的孩子)。

这是我的代码的一部分:

//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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在three.js中对“子场景”进行光线投射

来自分类Dev

如何环绕/缩放摄像机以进行贴花/光线投射?

来自分类Dev

Three.js光线投射THREE.Object3D

来自分类Dev

Three.js中的光线投射和容器

来自分类Dev

Three.js带有动画的光线投射对象选择

来自分类Dev

Three.js碰撞检测与光线投射优化

来自分类Dev

Three.JS-自定义网格上的光线投射

来自分类Dev

Three.js | 通过Blender光线投射导入的.obj模型

来自分类Dev

如何投射可见光线Three.js

来自分类Dev

Three.js:使用场景对象子集进行光线投射

来自分类Dev

three.js定向光跟随摄像机

来自分类Dev

Three.js-如何检查对象是否对摄像机可见

来自分类Dev

Three.js:分割摄像机视锥(例如在层叠阴影映射中)

来自分类Dev

Three.js旋转摄像机俯仰不起作用?

来自分类Dev

在GSAP补间/重新启动控件后,Three.js FirstPersonControls摄像机旋转跳回

来自分类Dev

Three.js:为相机添加光线

来自分类Dev

Three.js Raycaster未检测到场景网格

来自分类Dev

Three.js Raycaster未检测到场景网格

来自分类Dev

了解光线投射方法

来自分类Dev

简单的 OpenTK 光线投射

来自分类Dev

使用移动摄像机照明场景

来自分类Dev

如何从被其他光线投射击中的物体投射光线?

来自分类Dev

Three.js-当摄像机旋转90度角时,为什么在x轴和z轴上旋转具有相同的效果?

来自分类Dev

投射前从相机偏移光线

来自分类Dev

光线投射以计算空间的体积

来自分类Dev

渲染THREE.js后无法添加到场景

来自分类Dev

如何在Three.js中将画布绘图添加到场景?

来自分类Dev

取消在THREE.js中将对象加载到场景中

来自分类Dev

openGL:旋转整个场景或“环绕”摄像机

Related 相关文章

热门标签

归档