Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在three.js.中缩放夹点事件上的相交对象。?_Javascript_Three.js_Webgl - Fatal编程技术网

Javascript 如何在three.js.中缩放夹点事件上的相交对象。?

Javascript 如何在three.js.中缩放夹点事件上的相交对象。?,javascript,three.js,webgl,Javascript,Three.js,Webgl,我目前正在从事一个three.js项目,在该项目中,我将TrackballControls.js用于相机控制。 在我的场景中,使用OBJMTLLoader加载的对象很少。我必须从场景中选择单独的对象,并需要放大和缩小这些单独的对象。我能够使用鼠标事件和以下函数获得结果 function onDocumentMouseDown( event ) { myobj = null; mouse_obj=null; e

我目前正在从事一个three.js项目,在该项目中,我将TrackballControls.js用于相机控制。 在我的场景中,使用OBJMTLLoader加载的对象很少。我必须从场景中选择单独的对象,并需要放大和缩小这些单独的对象。我能够使用鼠标事件和以下函数获得结果

      function onDocumentMouseDown( event ) {

            myobj = null; 
            mouse_obj=null;
            event.preventDefault();
            controls.enabled = false;

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

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

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

            if ( intersects.length > 0 ) {


                SELECTED = intersects[ 0 ].object.parent;
                myobj = intersects[ 0 ].object.parent; // selects the intersected object

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

                container.style.cursor = 'move';

            }

        }
上面的代码选择对象,下面的代码在滚动事件时放大和缩小

          onRendererScroll = function(event) {
            controls.enabled = true;
            if(myobj!=null)
            {
                    var delta=0;

                    event.preventDefault();
                    event.stopPropagation();

                    //alert(myobj.position.x+ ' ' +event.clientX+ ' ' +myobj.position.y+ ' ' +event.clientY);
                    if ( event.wheelDelta ) { // WebKit / Opera / Explorer 9

                    delta = event.wheelDelta / 40;

                    } else if ( event.detail ) { // Firefox

                    delta = - event.detail / 3;

                    }

                    myobj.scale.x = myobj.scale.x+delta*0.01;
                    myobj.scale.y = myobj.scale.y+delta*0.01;
                    myobj.scale.z = myobj.scale.z+delta*0.01;

            }

        }
但我必须使用触摸事件实现同样的功能。我试图使这个想法付诸实施,但没有成功。我试图实现从鼠标事件中获得的相同想法。我正在编写的代码如下。 有人能帮我吗。。?我不想调试我的代码。我只是想知道如何实施

      onDocumentTouchMove=function(event) {
            event.preventDefault();

            if (event.touches.length === 2)
            {
            controls.enabled = true;
            mouse.x = (((event.touches[0].pageX-(curX+12))/width)*2-1)-(((event.touches[1].pageX-(curX+12))/width)*2-1);
            mouse.y = (-((event.touches[0].pageY-curY)/height)*2+1)-(-((event.touches[1].pageY-curY)/height)*2+1);

            if(myobj!=null)
            {
                    var delta=0;

                    event.preventDefault();
                    event.stopPropagation();

                    delta=Math.sqrt( mouse.x * mouse.x + mouse.y * mouse.y );

                    myobj.scale.x = myobj.scale.x+delta*0.01;
                    myobj.scale.y = myobj.scale.y+delta*0.01;
                    myobj.scale.z = myobj.scale.z+delta*0.01;

            }
            }

        }


        onDocumentTouchStart=function(event) {
            event.preventDefault();
            controls.enabled = false;

            if (event.touches.length === 1)
            {
            myobj = null;
            var vector = new THREE.Vector3( mouse.x, mouse.y, 0.5 );
            projector.unprojectVector( vector, camera );

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

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

            if ( intersects.length > 0 ) {

                SELECTED = intersects[ 0 ].object.parent;
                myobj = intersects[ 0 ].object.parent;
                var intersects = raycaster.intersectObject( plane );
                offset.copy( intersects[ 0 ].point ).sub( plane.position );


            }
            }
        }


            onDocumentTouchEnd=function(event) {
            event.preventDefault();
            controls.enabled = false;
            if ( INTERSECTED ) {

                plane.position.copy( INTERSECTED.position );
                SELECTED = null;
            }


        }

您是否看过r.59版本的
轨迹球控件
?这可能会给你一个很好的起点。嗨,韦斯特兰利。我在关注r.58版本的轨迹球控制。我找不到它和r.59版本有什么不同。我认为这两种方法都有一定的效果。努力使它完全正确。也谢谢你的回复…嗨,韦斯特兰利。。。它似乎终于完全起作用了。。。