使用three.js同步旋转两个3D图像

时间:2013-10-07 09:14:05

标签: javascript three.js

我试图在鼠标点击事件中同时旋转两个3D图像。图像在旋转,但旋转角度略有不同。即图像不会同步旋转。

我使用了两个参考three.js示例代码的函数。 第一个函数是init(),它包含初始化细节。我还使用了TrackBallControls进行缩放效果。

function init() {
    document.getElementById("image").addEventListener( 'mouseup', onDocumentMouseMove, false );
    container = document.getElementById('image');
    camera = new THREE.PerspectiveCamera( 100, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 100000);
    camera.position.z = 700;

    controls = new THREE.TrackballControls( camera );
    controls.rotateSpeed = 1.0;
    controls.zoomSpeed = 1.2;
    controls.panSpeed = 0.8;
    controls.noZoom = false;
    controls.noPan = false;
    controls.staticMoving = false;
    controls.dynamicDampingFactor = 0.3;
    controls.keys = [ 65, 83, 68 ]; 

    controls.addEventListener( 'change', render );

    scene = new THREE.Scene();

    var ambient = new THREE.AmbientLight( 0xFFFFFF );
    scene.add( ambient );

    try {
            webglRenderer = new THREE.WebGLRenderer();
            webglRenderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
            webglRenderer.domElement.style.position = "relative";
            container.appendChild( webglRenderer.domElement );
    }catch (e) {}

    var loader = new THREE.JSONLoader();

    var callbackLeft = function ( geometry, materials ) {createScene( geometry, materials, -400, FLOOR, 50, 105 )   };

    var callbackRight = function ( geometry, materials ){createSceneRight( geometry, materials, 400, FLOOR, 50, 105 ) };

    loader.load( "../view3D/Female02_slim.js", callbackLeft );
    loader.load( "../view3D/Female02_slim.js", callbackRight ); 
}
function createScene( geometry, materials, x, y, z, b ) 
{
    zmesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) );
    zmesh.position.set( x, y, z );
    zmesh.scale.set( 3, 3, 3 );
    THREE.GeometryUtils.center( geometry );
    scene.add( zmesh );
}
function createSceneRight( geometry, materials, x, y, z, b ) 
{
    zmeshRight = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) );
    zmeshRight.position.set( x, y, z );
    zmeshRight.scale.set( 3, 3, 3 );
    THREE.GeometryUtils.center( geometry );
    scene.add( zmeshRight );
}
function onDocumentMouseMove(event) 
{
    mouseX = ( windowHalfX -  event.clientX);
}
function animate() 
{
    requestAnimationFrame( animate );
    controls.update();
    render();
}

var prevMouseX = 0;
function render() 
{
    if(mouseX > -300)
        {
            zmesh.rotation.y -= 0.8;
            zmeshRight.rotation.y -= 0.8;
        }
        else if(mouseX < -300)
        {
            zmesh.rotation.y += 0.8;
            zmeshRight.rotation.y += 0.8;
        }
        else
        {
            zmesh.rotation.y += 0;
            zmeshRight.rotation.y -= 0.8;
        }

    webglRenderer.render( scene, camera );
}

请告知

0 个答案:

没有答案