2014-12-30 83 views
0


您好所有,
COLLADA 3D對象的鼠標事件

我wnat改變3D物體的顏色(COLLADA文件)的孩子,當鼠標滑過。
我嘗試使用Raycaster方法,但它不起作用。
this樣本。
但我想改變顏色或突出顯示模型子當鼠標懸停。

這是我的代碼。

   var oLoader = new THREE.ColladaLoader(); 
       oLoader.load('model/sample.dae', function (collada) { 

        var object = collada.scene; 
        var skin = collada.skins[0]; 

        object.rotation.x = -Math.PI/2; 
        object.rotation.z = Math.PI/2; 
        object.position.x = 0; 
        object.position.y = 0; 
        object.position.z = 0; 
        object.scale.set(0.025, 0.025, 0.025); 
        object.updateMatrix(); 
        scene.add(object); 

請告訴我該怎麼做。
非常感謝。

回答

0

巧合的是,我也在研究一個需要鼠標事件的項目,並編寫了一個小對象來使用。

var mouse = { 
    getIntersects: function(camera, sceneChildren, event){ 
     event = event || window.event; 

     var mouseX = (event.clientX/window.innerWidth) * 2 - 1; 
     var mouseY = -(event.clientY/window.innerHeight) * 2 + 1; 

     var vector = new THREE.Vector3(mouseX, mouseY, camera.near); 
      vector.unproject(camera); 

     var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize()); 

     var intersects = raycaster.intersectObjects(sceneChildren); 

     if (intersects.length > 0) { 
      //console.log(intersects); 
      return intersects; 
     } 
     return false; 
    }, 

    Position3D: function(sceneChildren){ 
     var intersects = mouse.getIntersects(sceneChildren); 
     return intersects[0].point 
    } 
} 

我不知道,如果你想使用自己的這個對象,或者將其作爲參考,以自己的代碼的東西,但這裏是你如何使用它:

document.addEventListener('click', function(event){ 
    var intersectObj = mouse.getIntersects(camera, scene.children, event)[0]; 
    if(window.console){ 
     console.log(intersectObj); 
    } 
    else{ 
     alert(intersectObj); 
    } 
}); 

現在你有被點擊的對象全部整理出來,您可以開始使用這些功能。最簡單的方法是將它們添加到網格中。所以:

var mesh = new THREE.Mesh(geometry, material); 
    mesh.click = function(){ 
     alert('object was clicked'); 
    } 
+0

感謝您的回答,我嘗試了。 – Michelle