그림자가 있는지 여부를 감지하고 싶습니다. 가장 효과적인 방법은 무엇입니까?Object3D가 그림자를 받고 있는지 감지하십시오 (r86)
예 : 장면에 나무가 있으며 방향성이 있습니다. 나무 아래에있는 한 캐릭터를 움직이면 이제는 나무가 던져 놓은 그림자에 서 있습니다. 그들이 나무의 주조 된 그림자를 입력/떠난 지점을 어떻게 감지 할 수 있습니까?
그림자가 있는지 여부를 감지하고 싶습니다. 가장 효과적인 방법은 무엇입니까?Object3D가 그림자를 받고 있는지 감지하십시오 (r86)
예 : 장면에 나무가 있으며 방향성이 있습니다. 나무 아래에있는 한 캐릭터를 움직이면 이제는 나무가 던져 놓은 그림자에 서 있습니다. 그들이 나무의 주조 된 그림자를 입력/떠난 지점을 어떻게 감지 할 수 있습니까?
이것은 궁극적 인 해결책이 아니며 시작점으로 사용할 수있는 옵션입니다.
그리고 이것은 Three.js 전용 인 stackoverflow.com의 다른 세그먼트에서 얻은 나의 답을 번역 한 것입니다.
아이디어 : 광원을 향한 방향에서 광선을 설정하고 어떤 물체와 교차하는 경우 그 점은 그림자에 있어야합니다. 그렇지 않으면 그렇지 않습니다.
감안할 때 : 점 비행기 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 예 : 지점이 음영 처리 여부되어 있는지 확인하려면, 우리는 짧은 기능이 필요합니다.
예! 문제의 대상에서 나오는 광선을 광원에 던져서 그림자가 드리 워진 물체에 닿았는지 여부를 확인할 수도 있습니다. 나의 유일한 관심사는 아마도이 솔루션이 방향성 조명 이외의 것으로 인한 그림자를 덮을 수 없다는 것입니다. 하지만 조명 유형에 따라 솔루션을 변경해야 할 수도 있습니다. –
광원의 위치에서 대상의 위치를 뺄 수 있습니다 (방향 조명이 아닌 경우). 그런 다음이를 정규화하면 방향을 알 수 있습니다. – prisoner849
정확하게 원하는 것을 이해하는 데 귀하의 질문이 너무 명확하지 않습니다. 다시 작업해야합니다. 명확히하기 위해 원하는 결과가있는 이미지를 추가 할 수 있습니까? – prisoner849
@ prisoner849 업데이트 됨 –