我希望能够检测物体是否处于阴影中。最好、最高效的方法是什么?
例如,场景中有棵树和定向光。将 Angular 色移到树下,他们现在就站在树转换的阴影中。您如何检测它们在什么时候进入/离开树的转换阴影?
最佳答案
这不是最终的解决方案,这只是您可以用作起点的选项。
这只是我在 stackoverflow.com 的另一个部分(专门针对 Three.js)的回答的翻译。
想法:设置一条从该点沿方向到光源的光线,如果它与任何对象相交,则该点位于阴影中,否则不在阴影中。
给定:平面上的点pointOnPlane
,定向光源位置的归一化向量(这将是我们的方向)direction
以及对象数组场景 sceneObjects
(我们想要找到与之交集的)。为了确定该点是否有阴影,我们需要一个简短的函数:
var raycasterPoint = new THREE.Raycaster();
var direction = new THREE.Vector3();// for re-use
function isShaded(pointOnPlane){
direction.copy(light.position).normalize();
raycasterPoint.set(pointOnPlane, direction); // ray's origin and direction
var retVal = false;
var pointIntersects = raycasterPoint.intersectObjects( sceneObjects );
if (pointIntersects.length > 0) retVal = true;
return retVal;
}
jsfiddle示例。
关于javascript - 检测 Object3D 是否正在接收阴影 (r86),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46767188/