我正在尝试使用射线将鼠标悬停在对象上,但是只有3D素材文件加载的网格才被它击中。由诸如CylinderGeometry
或BoxGeometry
之类的原始几何体创建的任何网格都将被忽略。
我要命中的对象是CameraPole
,它是扩展THREE.Group
并包含pole
网格的类。
export default class CameraPole extends Group {
public pole: Mesh;
constructor() {
super();
this.name = 'CameraPole';
this.pole = new Mesh(
new CylinderGeometry(.25, .25, 5, 32),
new MeshPhongMaterial({color: 0xffffff})
);
this.position.x = -34;
this.position.y = 5;
this.position.z = 17.8;
this.add(this.pole);
}
}
这只是一个例子,但是我的场景中还有其他原始对象,而且射线广播都没有发现它们。
我构造并将其添加到场景:
const cameraPole = new CameraPole();
scene.add(cameraPole);
但是,当我尝试使用射线投射命中来检测它时,我只会命中从3D资产文件加载的对象。返回的数组永远不会包含从原始几何体生成的任何对象。
document.addEventListener('mousemove', (e) => {
const mouse = {
x: (e.clientX / window.innerWidth) * 2 - 1,
y: (e.clientY / window.innerHeight) * 2 - 1
};
const ray = new Raycaster();
ray.setFromCamera(mouse, camera);
console.log(ray.intersectObjects(scene.children, true)); // Only returning complex meshes, not geometric objects created dynamically.
});
我也尝试过专门寻找摄像头,但这样我仍然一无所获:
ray.intersectObject(cameraPole, true);
编辑:如果相关,则说明摄像头为OrthographicCamera
。
编辑2:所以我发现,如果不更改CameraPole
的位置,它将可以正常工作。更新位置后,光线投射将不再检测到该位置。关于如何解决此问题的任何消息?