2017-10-16 2 views
0

オブジェクトが影になっているかどうかを検出できるようにしたいと思います。これを行うには最高のパフォーマンスを発揮する方法は何でしょうか?Object3Dが影を受け取っているかどうかを検出する(r86)

例:シーンにはツリーと方向性のある光があります。木の下のキャラクターを動かすと、彼らは今それが投げる木の影に立っています。あなたはどのような時点で彼らがツリーのキャストシャドウに入り/残っているかを検出できますか?

+0

あなたの質問は、あなたが正確にしたいことを理解するのはあまり明確ではありません。あなたはそれを再加工する必要があります。明確にするために、希望する結果の画像を追加することもできますか? – prisoner849

+0

@ prisoner849更新 –

答えて

1

これは究極の解決策ではありません。これは開始点として使用できる単なる選択肢です。

これは、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; 
} 

Is point shaded

jsfiddle例:ポイントは網掛けされているかどうかを決定するために、我々は短いの機能が必要になります。

+0

はい!問題のオブジェクトから光源に光線を投射して、それがシャドウキャスティングオブジェクトに当たったかどうかを確認することもできます。私の唯一の懸念は、おそらく、このソリューションは指向性の光以外の影によって隠されていないことでしょう。しかし、光の種類に応じて解決策を変える必要があるかもしれません。 –

+0

光源の位置から物体の位置を引くことができます(指向性の光でない場合)。次に正規化して、方向を取得します。 – prisoner849

関連する問題