2015-12-31 58 views
1

光線投射選擇對於我的靜態網格物體工作正常,但對於動畫網格物體,光線選擇似乎看不到網格物體的運動,只響應網格物體的非動畫(原始)職位。Three.js使用動畫進行光線投射物體選擇

我的選擇代碼如下:

element.addEventListener('mouseup', function (event) 
{ 

    var vector = new THREE.Vector3((event.clientX/window.innerWidth) * 2 - 1, -(event.clientY/window.innerHeight) * 2 + 1, 0.5); 
    vector = vector.unproject(camera); 
    var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize()); 
    var intersects = raycaster.intersectObjects(pickable_objects, true); 

    if (intersects.length > 0) 
    { 
     //I change the object's material colour so that I can see the selection 
    } 
} 

哪裏pickable_objects是可選擇,這些不帶動畫的信息,據我所知three.js所網格對象的數組,這樣的結果我抱怨對一些人來說可能並不令人驚訝。

我沒有在這裏包含顏色變化代碼或JSON網格讀取器代碼,因爲我不相信它是相關的。

靜態

所以齧合的光線投射是非常準確的,但對於動畫網格我有對象的中心單擊或找到它的原始非動畫的位置,使評選工作。

回答

1

如果你看一下在GitHub庫,特別是Raycaster.js的源代碼,你會看到實際執行的幾何對象。例如,Mesh.js通過遍歷其三角形並檢查光線是否與其中任何一個相交來實現光線投射,但SkinnedMesh.js不覆蓋此方法。

最後,在問題頁面中快速搜索顯示這實際上是一個已知的限制 - https://github.com/mrdoob/three.js/issues/6440

你似乎留下了2個選項 - 在github中碰到問題,並要求ETA或自己實現(並希望後來發送拉請求)。

+0

謝謝您的回答,這是很煩人的,我會檢查出來的源和壓到git的頁面。 –