Domanda

Ho il progetto di costruzione con Three.js ... tela in cui è possibile trascinare oggetti e giocare con la telecamera, così ... c'è un famoso esempio- "Draggable Cubes", bene il mio progetto è abbastanza simile.

Il mio progetto ci sono 3 eventi principali: mouseup / mousedown / mousemove ...

Bene tutto era ok .... ma ora sto cercando di eseguire questo codice su iPhone, cambiare le mie eventi con TouchStart / touchmove / touchend ...

La funzione di oggetto in movimento sembra funzionare bene, ma quando sto cercando di selezionare l'oggetto facendo clic su di lui, è sempre lo stesso oggetto che state selezionate ... e non quello che sto puntando su ....

Credo che il problema è con questa funzione:

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;

                var intersects = ray.intersectObject( plane );
                offset.copy( intersects[ 0 ].point ).subSelf( plane.position );

            }
}

C'è qualcuno ha un'idea che cosa è il problema ???

È stato utile?

Soluzione

in questa linea:

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

È possibile utilizzare l'oggetto del mouse Vector2 ma non si inizializza esso.

Qualcosa del genere dovrebbe funzionare:

mouse.x = +(event.targetTouches[0].pageX / window.innerwidth) * 2 +-1;

mouse.y = -(event.targetTouches[0].pageY / window.innerHeight) * 2 + 1;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top