2012-10-05 23 views
5

Bir ışınım ve bir uçağım var. Ray uçağı kesişiyor ve nerede olduğunu bilmek istiyorum. Bu intersetionun dünya-koordinatlarını nasıl alabilirim?Ray ve Düzlem arasındaki kesişim koordinatları

(My özellikle vaka ben kameraya ekran koordinatları unproject ve ışın oluşturun. Düzlem sahnenin zeminidir)

var vector = new THREE.Vector3(mousePosition.x, mousePosition.y, 1); 
projector.unprojectVector(vector, camera); 
var ray = new THREE.Ray(
    camera.position, 
    vector.subSelf(camera.position).normalize() 
); 
+0

varsayar .. "* yeniden adlandırıldı' Vektör */Matris */Kuaternion addSelf()/subSelf()/crossSelf() ... 'ila eklemek()/sub()/cross() ...'. –

cevap

9

Bu olağan kalıptır. Özel durumunuza uyacak şekilde uyarlamanız gerekebilir. Burada

var raycaster = new THREE.Raycaster(); // create once and reuse 
var mouse = new THREE.Vector2(); // create once and reuse 

... 

mouse.x = (event.clientX/renderer.domElement.clientWidth) * 2 - 1; 
mouse.y = - (event.clientY/renderer.domElement.clientHeight) * 2 + 1; 

raycaster.setFromCamera(mouse, camera); 

var intersects = raycaster.intersectObjects(objects, recursiveFlag); 

if (intersects.length > 0) { 

    console.log(intersects[ 0 ].point;); 

} 

, objects bir dizidir. Örneğin,

var objects = []; 

objects.push(plane_mesh); 

DÜZENLEME: R55 itibariyle Three.js r.84

+1

Oh 'nokta' adı verilen bir özellik var. Thats easy .. teşekkür ederim :) –

+0

r58 için güncellediğiniz için teşekkür ederiz. WorldToLocal işlevini kullanarak bir düzlemde (yeni THREE.PlaneGeometry (400, 400, 10, 10)) konum elde etmeye çalışıyorum, ancak koordinatları görünmüyor gibi görünüyor, X doğru aralığa sahip gibi görünüyor (- 200 ila 200), ama Y biraz kısa gibi görünüyor. Bu normalde nasıl yapılır? –

+0

@djj Yeni bir soru göndermek zorundasınız. Kodunuzu eklediğinizden emin olun. – WestLangley

0

için güncellenmiş, bu kısayolu kullanabilirsiniz. Benzer, ancak unprojectVector() hakkında endişelenmenize gerek olmayan noktaya raycasting'i basitleştirir. İşte

WestLangley en örneğinin değiştirilmiş bir versiyonu:

var vector = new THREE.Vector3(( 
     event.clientX/window.innerWidth) * 2 - 1, 
     - (event.clientY/window.innerHeight) * 2 + 1, 
     0.5 
    ); 

    var ray = projector.pickingRay(vector.clone(), camera); 

    var intersects = ray.intersectObjects(objects); 

    if (intersects.length > 0) { 

     console.log(intersects[ 0 ].point;); 

    } 

Bu ÜÇ son README aynı nesneler dizisi

var objects = []; 

objects.push(plane_mesh); 
İlgili konular