【问题标题】:THREE.js: OrbitControls pan and zoom issueTHREE.js:OrbitControls 平移和缩放问题
【发布时间】:2013-12-31 01:19:03
【问题描述】:

我尝试将最新的 OrbitControls.js 添加到我的场景和轨道接缝中以正常工作。但是,当我使用鼠标中键或滚轮进行缩放时,轴接缝关闭并且不再正确旋转。平移(或扫射)在我的场景中似乎也无法正常工作。

在示例中,http://threejs.org/examples/#misc_controls_orbit 鼠标右键将相机平行于场景移动,在我的场景中,它的轨道与鼠标左键相同。你可以看到我的行为不端http://www.xrez.com/tufa_test/

<!DOCTYPE html>
<html lang="en">
<head>
    <title>obj tester</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
    <style>
        body {
            background:#fff;
            padding:0;
            margin:0;
            overflow:hidden;
            font-family:georgia;
            text-align:center;
        }
    </style>
</head>

<body>
    <script src="cam.js"></script>
    <script src="three.min.js"></script>
    <script src="OrbitControls.js"></script>

    <script>

        var SCREEN_WIDTH = window.innerWidth;
        var SCREEN_HEIGHT = window.innerHeight;

        var container;

        var camera, scene, controls, renderer;
        var canvasRenderer, webglRenderer;

        var mesh, zmesh, geometry;


        var windowHalfX = window.innerWidth / 2;
        var windowHalfY = window.innerHeight / 2;

        var meshes = [];

        init();
        animate();

        function init() {

            container = document.createElement('div');
            document.body.appendChild(container);

            camera = new THREE.PerspectiveCamera(75, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 100000);
            camera.position.x = 400;
            camera.position.y = 200;
            camera.position.z = 400;

            controls = new THREE.OrbitControls( camera );
            controls.addEventListener( 'change', render );

            scene = new THREE.Scene();

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

            // var directionalLight = new THREE.DirectionalLight(0x000000);
            //directionalLight.position.set(0, 70, 100).normalize();
            //scene.add(directionalLight);

            // RENDERER
            webglRenderer = new THREE.WebGLRenderer();
            webglRenderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
            webglRenderer.domElement.style.position = "relative";

            container.appendChild(webglRenderer.domElement);

            var loader = new THREE.JSONLoader(),
            callbackKey = function(geometry) {createScene(geometry,  0, 0, 0, 15, "twe.jpg")};
            loader.load("tufaWallEarly02_v3.js", callbackKey);

            window.addEventListener('resize', onWindowResize, false);

        }

        function createScene(geometry, x, y, z, scale, tmap) {
            zmesh = new THREE.Mesh(geometry, new THREE.MeshLambertMaterial({map: THREE.ImageUtils.loadTexture(tmap)}));
            zmesh.position.set(x, y, z);
            zmesh.scale.set(scale, scale, scale);
            meshes.push(zmesh);
            scene.add(zmesh);
        }

        function onWindowResize() {

            windowHalfX = window.innerWidth / 2;
            windowHalfY = window.innerHeight / 2;

            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();

            webglRenderer.setSize(window.innerWidth, window.innerHeight);
        }

        function animate() {
            for(var i = 0; i < meshes.length; i++){
                meshes[i].rotation.y += .001;
            }
            requestAnimationFrame(animate);
            controls.update();
            render();
        }

        function render() {
            camera.lookAt(scene.position);
            webglRenderer.render(scene, camera);
        }
    </script>

</body>

【问题讨论】:

    标签: three.js zooming mouse pan


    【解决方案1】:

    删除camera.lookAt(scene.position);

    【讨论】:

    • 谢谢汤姆!从 html 文件中删除该行解决了问题!
    【解决方案2】:

    在 OrbitControls.js 第 219 行找到 onMouseDown

    并评论此行

            /*if ( event.button === 2 )
                state = STATE.PAN;*/
    

    【讨论】:

    • 谢谢,我想我们的 OrbitControls.js 版本肯定有点不同。我在第 302 行和第 305 行找到了您提到的行。我进行了您建议的更改。我将代码更改为code } else //if ( event.button === 2 ) { if ( scope.noPan === true ) { return; } //状态=状态.PAN; panStart.set( event.clientX, event.clientY );code 这确实解决了缩放和旋转时的轴问题。然而它打破了锅。我想平移以便用户可以平行于对象移动
    猜你喜欢
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 2017-05-16
    • 1970-01-01
    • 2015-08-08
    • 2013-12-12
    相关资源
    最近更新 更多