2012-12-05 17 views
5

稍複雜,所以裸跟我說:three.js所:雷路口使用morphtargets不工作時

  • 雷相交的作品完美地當一個對象沒有morphTargets。

  • 當一個對象具有morphTargets只有原來的位置可以相交,也就是說,如果我變形的模型從0,0,050,50,50射線不會與對象在50,50,50相交,相反,當我將鼠標移過0,0,0我得到一個十字路口(即使對象已不在那裏!?)。

是否有某種標誌我需要打開使three.js意識到verts已經移動?

編輯,添加代碼。

這使我目,並將其添加到對象數組(射線相交用途):

function createDeer(deerGeometry, materials) { 
    mesh = new THREE.MorphAnimMesh(deerGeometry, new THREE.MeshLambertMaterial({ color: 0xE8E8E8, ambient: 0xE8E8E8, morphTargets: true, vertexColors: THREE.FaceColors })); 
    mesh.scale.set(3, 3, 3); 
    mesh.position.set(0, -3, 0); 
    mesh.rotation.set(0, 0, 0); 
    mesh.castShadow = true; 
    mesh.receiveShadow = true; 
    mesh.geometry.dynamic = true; 
    scene.add(mesh); 
    objects.push(mesh); 
} 

雷路口發生在鼠標按下(有一個鼠標懸停還有,同樣的事情),就像我說的,代碼工作正常,它只是與原來的unmorphed目相交:

function onDocumentMouseDown(event) { 

    event.preventDefault(); 

    var vector = new THREE.Vector3(mouse.x, mouse.y, 0.5); 
    projector.unprojectVector(vector, camera); 

    var ray = new THREE.Ray(camera.position, vector.subSelf(camera.position).normalize()); 

    var intersects = ray.intersectObjects(objects); 

    if (intersects.length > 0) { 

     SELECTED = intersects[ 0 ].object; 

     for(var i=0; i<objects.length; i++) 
      { 
       if(SELECTED.position.x == objects[0].position.x) { 
        thisObject = i; 
        } 
       } 

      } 

     var intersects = ray.intersectObject(plane); 

     container.style.cursor = 'pointer'; 
    } 

} 

我已經決定的問題必須進行相關的事實,鹿的位置(如在網格變換)永遠不會改變,但是頂點確實移開,並且射線相交爲com削減對象的位置也許問題在這裏?

+0

的充分程度提供您所編寫的代碼,請加入 – Ocelot

+0

代碼:)感謝。 – Ian

回答

0

MorphTarget動畫完全在GPU(在着色器代碼中)發生,而射線相交始終在CPU上計算。所以實際上,沒有簡單的方法來實現你在這裏描述的內容。

+1

那麼對於邊界框的光線投射可能會更容易(但並非完美),我想呢? – vincent

2

我編了一個pull request已合併並修復此問題。

注意,爲它工作,對象的boundingSphere需要包含的變形