2017-10-09 152 views
0

我試圖使用光線投射來獲取球體和光線之間的交點,兩者都位於場景的中心。這是一個非常簡單的場景,但我無法使其工作。光線投射不給出任何交點

相關代碼:

// renderer, camera, etc... 

var material = new THREE.MeshStandardMaterial(); 
material.opacity = 0.25; 
material.transparent = true; 
sphere = new THREE.Mesh(new THREE.SphereGeometry(100, 32, 32), material); 
scene.add(sphere); 

var start = new THREE.Vector3(0, 0, 0); 
var direction = new THREE.Vector3(-84, 102, 97); 
var ray = new THREE.Raycaster(start, direction.normalize()); 
scene.updateMatrixWorld(); 
var rayIntersects = ray.intersectObjects([sphere], true); 

console.log(rayIntersects); // empty array 
+2

當您從對象內部投射光線時,它不計算背面。嘗試使用'var material = new THREE.MeshStandardMaterial({side:THREE.DoubleSide});' – prisoner849

回答

1

在情況下,如果你想獲得一個物體和光線,從對象的內部鑄造之間的交集,那麼,作爲一個選項,你應該使用雙面材料。

像這樣:

var material = new THREE.MeshStandardMaterial({ side: THREE.DoubleSide }); 

THREE.Raycaster()的文檔,在關於.intersectObject (object, recursive)方法解釋部分的結尾,他說:

注意,對於網格,面臨着必須指出朝光線的起源以便被檢測;沒有檢測到穿過臉部背部的光線的交點。要對對象的兩個面進行光線投射,您需要將材質的邊屬性設置爲THREE.DoubleSide。