2016-11-01 6 views
0

Ich verwende THREE.js und OrbitControls.js. Ich möchte ein Objekt doppelklicken und dann Sachen machen. Dies ist der Code, den ich verwende. cube1 ist das Objekt, das ich doppelklicken möchte.Javascript DREI OrbitControls: doubleclick Objekt

var projector = new THREE.Projector(); 

document.addEventListener('dblclick', ondblclick, false); 

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

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

    var intersects = ray.intersectObjects(cube1); 

    if (intersects.length > 0) 
    { 
     alert("hit"); 
    } 
} 

Leider funktioniert der Code nicht. Ich freue mich über jede Hilfe. Dies ist die Kamera ich benutze:

var camera = new THREE.PerspectiveCamera(45, WIDTH/HEIGHT, 0.1, 10000); 
     camera.position.z = 1500; 
     camera.position.y = -1800; 
     scene.add(camera); 

Und das ist OrbitControls:

var controls = new THREE.OrbitControls(camera, renderer.domElement); 
+0

[jsfiddle] (https://jsfiddle.net/prisoner849/gre9ubys/) Beachten Sie, dass es ein Ex ist reichlich für Doppelklick mit 'THREE.Raycaster()'. – prisoner849

Antwort

2

korrigierte ich nur die ondblclick Funktion

function ondblclick(event) { 
    x = (event.clientX/window.innerWidth) * 2 - 1; 
    y = -(event.clientY/window.innerHeight) * 2 + 1; 
    dir = new THREE.Vector3(x, y, -1) 
    dir.unproject(camera) 

    ray = new THREE.Raycaster(camera.position, dir.sub(camera.position).normalize()) 
    var intersects = ray.intersectObject(sphere); 
    if (intersects.length > 0) 
    { 
     alert("hit"); 
    } 
} 

Hier ist die Arbeitsprobe: http://jsfiddle.net/ddbTy/241/