Pregunta

Tengo un proyecto de construcción con tres.js ... lienzo donde puedes arrastrar objeto y jugar con la vista de la cámara también ... Hay un ejemplo famoso: "cubos arrastrables", bueno, mi proyecto es bastante similar.

En mi proyecto hay 3 eventos principales: mouseup / mousedown / mousemove ...

Bueno, todo estaba bien ... pero ahora estoy tratando de ejecutar este código en iPhone, cambiando mis eventos con touchstart / touchmove / touchend ...

La función del objeto en movimiento parece funcionar bien, pero cuando intento seleccionar el objeto haciendo clic en él, siempre es el mismo objeto que se ha seleccionado ... y no el que estoy apuntando ...

Supongo que el problema es con esta función:

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 );

            }
}

¿Alguien tiene una idea de cuál es el problema?

¿Fue útil?

Solución

En esta línea:

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

Utiliza el objeto Vector2 mouse pero no lo inicializa.

Algo como esto debería funcionar :

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

mouse.y = -(event.targetTouches[0].pageY / window.innerHeight) * 2 + 1;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top