javascript - 检测 Object3D 是否正在接收阴影 (r86)

标签 javascript three.js collision-detection shadow

我希望能够检测物体是否处于阴影中。最好、最高效的方法是什么?

例如,场景中有棵树和定向光。将 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;
}

Is point shaded

jsfiddle示例。

关于javascript - 检测 Object3D 是否正在接收阴影 (r86),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46767188/

相关文章:

dom - 将 javascript 函数注入(inject) Iframe

javascript - Aurelia - 如何从多个表单字段捕获数据并将其存储在模型中

Three.js地形阴影

ios - 如何让一个自由下落的 Sprite 节点坐在另一个水平移动的 Sprite 身上

python - Pygame 碰撞检查错误

javascript - JavaScript 中的数字反转

Javascript 类型错误 : undefined is not a function when initializing an instance

javascript - Three.js 旋转面向对象

javascript - 用户在 three.js 中上传纹理

javascript - html5 canvas中的碰撞检测