2017-01-06 12 views
0

私は三次元シーンでRaycasterを使用して、VR相互作用の一種を作成しようとしています。 ノーマルモードではすべて正常に動作しますが、ステレオエフェクトを有効にすると動作しません。threejs raycasterは立体モードで交差できません

次のコードスニペットを使用しています。私は通常モードで上記のコードスニペットをしようとしたとき、私はで心配した3Dオブジェクトのいずれかを探していたときに

// "camera" is a ThreeJS camera, "objectContainer" contains objects (Object3D) that I want to interact with 
var raycaster = new THREE.Raycaster(), 
origin = new THREE.Vector2(); 
origin.x = 0; origin.y = 0; 

raycaster.setFromCamera(origin, camera); 

var intersects = raycaster.intersectObjects(objectContainer.children, true); 

if (intersects.length > 0 && intersects[0].object.visible === true) { 
    // trigger some function myFunc() 
} 

はしたがって、基本的に、myFuncというがトリガされます。 しかし、私がステレオモードに切り替えるとすぐに動作を停止します。すなわち、myFuncがトリガーされることはありません。

origin.xの値を-0.5に更新しようとしました。 VRモードでは、画面が2つに分割されるため、私はそれを行いました。しかし、それはどちらもうまくいかなかった。

VRモードで3Dオブジェクトをレイキャスターと交差させるにはどうすればよいですか(ステレオ効果がオンの場合)?

答えて

1

コードをjsfiddleに教えてください。

基本的には、アプリでステレオを使用している場合は2台のカメラを使用しているため、両方のカメラビューで交差を確認する必要があります。

var cameras = 
    { 'camera1': new THREE.PerspectiveCamera(50, window.innerWidth/window.innerHeight, 1, 10000), 
    'camera2': new THREE.PerspectiveCamera(50, window.innerWidth/window.innerHeight, 1, 10000) 
    }; 

for (var cam in cameras) { 
    raycaster.setFromCamera(origin, cameras[cam]); 
    //continue your logic 
} 

カメラの交差点をシミュレートするベクトルオブジェクトを使用して、2回のチェックを避けることができますが、これは達成しようとしているものによって異なります。

+0

ありがとうございます。ステレオモードでは、ThreeJSは2つの別々のカメラを利用しています。私は私の必要に応じてStereoEffect.jsライブラリファイルを更新しようとします。それがうまくいくなら、私はここに返信します。 – gdebojyoti

0

同様の問題が発生しましたが、私は結局その理由を発見しました。実際にはステレオエフェクトTHREE.js は、両目のメッシュをと表示していますが、現実には、現実には実際には、左目のメッシュの真ん中に正確に1つのメッシュが追加されます< - >右目メッシュ、ビューアに隠されています。

レイキャスターを使用する場合、真のメッシュで使用する必要があります。これは各目に表示される錯覚ではありません。

私はそれを、それはあなたの問題を解決ホープス

Three.js StereoEffect displays meshes across 2 eyes

を行う方法をここにdetailled!

関連する問題