Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Three.js-如何检查摄影机是否可以看到对象_Javascript_Three.js - Fatal编程技术网

Javascript Three.js-如何检查摄影机是否可以看到对象

Javascript Three.js-如何检查摄影机是否可以看到对象,javascript,three.js,Javascript,Three.js,我一直很难找到最好的方法来检查Object3d是否对相机的眼睛可见 我在屏幕中间有一个球体。一些立方体被随机添加到它的表面上。我需要的是一种方法来检查哪些立方体对相机的眼睛是可见的(在球体的前半部分),哪些是不可见的(在球体的后半部分) 到目前为止,我所发现的似乎是正确的方向——但我肯定错过了THREE.Raytracer类的某些内容 下面是我正在使用的一些代码:。我已经尽力把它说得尽可能清楚 小提琴的这一部分可能包含错误代码: var raycaster = new THREE.Raycast

我一直很难找到最好的方法来检查Object3d是否对相机的眼睛可见

我在屏幕中间有一个球体。一些立方体被随机添加到它的表面上。我需要的是一种方法来检查哪些立方体对相机的眼睛是可见的(在球体的前半部分),哪些是不可见的(在球体的后半部分)

到目前为止,我所发现的似乎是正确的方向——但我肯定错过了THREE.Raytracer类的某些内容

下面是我正在使用的一些代码:。我已经尽力把它说得尽可能清楚

小提琴的这一部分可能包含错误代码:

var raycaster = new THREE.Raycaster();
var origin = camera.position, direction, intersects, rayGeometry = new THREE.Geometry(), g;
pointGroup.children.forEach(function(pointMesh) {
    direction = pointMesh.position.clone();
    // I THINK THIS CALCULATION MIGHT BE WRONG - BUT DON'T KNOW HOW TO CORRECT IT
    raycaster.set(origin, direction.sub(origin).normalize());
    // if the pointMesh's position is on the back half of the globe, the ray should intersect with globe first and the hit the point as second target - because the cube is hidden behind the bigger sphere object
    intersects = raycaster.intersectObject(pointMesh);
    // this is always empty - should contain objects that are located on the back of the sphere ...
    console.log(intersects);
}); 
截头体剔除未按此处堆栈溢出问题中所述工作:

这个和这个都很好地解释了这个话题,但不适合这种情况


谢谢你的帮助

您想了解遮挡剔除技术。截头体剔除效果很好,并不是您所描述的。平截体剔除仅检查对象(或其边界框)是否位于摄影机棱锥体内。除平截头体消隐外,还可以执行遮挡消隐,特别是当要消除被视图平截头体内其他对象遮挡的对象时。但这不是一项容易的任务

我刚刚解决了一个类似的问题,当时我正试图检测世界空间中的一个点何时超出摄影机的视野,并在场景中特定对象的后面。我为它创建了一个JSFIDLE(见下文)。当红色“目标”经过三堵“墙”中的任何一堵墙后时,将从“目标”到相机绘制一条蓝线。我希望这能有所帮助。

谢谢您提供的宝贵信息。到目前为止,我还从未听说过遮挡剔除,但这似乎是一条路要走。我们必须深入研究。如果有人提出另一个解决方案,请稍等。这方面运气好吗?我们现在正在尝试,但使用raycaster.intersectObjects(复数)没有任何效果,尽管当我们的相机实际撞到阻挡对象时,它确实会给我们一个打击。Raycaster.intersectObject(单数)总是不给我们任何东西。在另一种情况下对我有效的是使用intersectObject的递归参数(toTest,true)。我完全忽略了这个参数。看到了吗