Three.js Raycaster使用鼠标而不是触摸

时间:2017-02-27 04:27:22

标签: javascript three.js

我有一个令人烦恼的问题,我的光线投射可以用鼠标,但不能用触摸。

我设置了这样的事件

   $(document).bind('mousedown', onDocumentMouseDown);
   $(document).bind('mousewheel', onDocumentMouseWheel);
   $(document).bind('touchstart', onDocumentTouchStart);
   $(document).bind('touchmove', onDocumentTouchMove);

我的鼠标事件

    function onDocumentMouseDown(e) {

    e.preventDefault();
    detectHotspotClick(e.pageX,e.pageY);

}

我的触摸事件

function onDocumentTouchStart(e) {

    e.preventDefault();

    var event = e.originalEvent;

    if (event.touches.length == 1) {
        var t=event.touches[0];
        draggingY = t.pageY;
        detectHotspotClick(t.pageX,t.pageY);
    }

    if (event.touches.length == 2) {

        var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;
        var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;
        _touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );

    }
}

我的侦测

function detectHotspotClick(x,y){

    console.log('detectHotspotClick('+ x + "," + y+ ")" );

    var raycaster = new THREE.Raycaster();
    var mouse = new THREE.Vector2();

    mouse.x =  ( x / renderer.domElement.width ) * 2 - 1;
    mouse.y = - ( y / renderer.domElement.height ) * 2 + 1;

    raycaster.setFromCamera( mouse, camera );

    var intersects = raycaster.intersectObjects( targetList, true );

    if ( intersects.length > 0)
        hotspotClick(intersects[ 0 ].object);
}

使用鼠标可以正常工作,但我注意到Touch,mouse.x值似乎总是很重要,我不确定是对的。

还有其他方法可以考虑吗?

1 个答案:

答案 0 :(得分:0)

不知道为什么..但它与touchevent上的detectHotspotClick(t.pageX * 2,t.pageY * 2)一起使用,它必须向鼠标事件报告不同的数字。