检测 Object3D 是否正在接收阴影 (r86)
Detect if Object3D is receiving shadows (r86)
我希望能够检测物体是否在阴影中。执行此操作的最佳、最高效的方法是什么?
例如,场景中有一棵树和一个平行光。将一个角色移动到树下,他们现在正站在树的阴影中。您如何检测他们在什么时候进入/离开树的投射阴影?
这不是最终的解决方案,这只是您可以用作起点的一个选项。
这只是我从 whosebug.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 示例。
我希望能够检测物体是否在阴影中。执行此操作的最佳、最高效的方法是什么?
例如,场景中有一棵树和一个平行光。将一个角色移动到树下,他们现在正站在树的阴影中。您如何检测他们在什么时候进入/离开树的投射阴影?
这不是最终的解决方案,这只是您可以用作起点的一个选项。
这只是我从 whosebug.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 示例。