threejs 实现3d全景,场景转动方向与鼠标移动方向相反

发布于 2021-12-02 01:12:49 字数 4703 浏览 720 评论 3

描述如标题,本人是新手,求大神指点迷津

这是预览地址  http://fishwx.duapp.com/pano

以下为源码

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>全景图开发测试</title>
    <style>
        *{overflow: hidden;margin:0;padding:0;}
        canvas {
            width: 100%;
            height: 100%;
        }

        .fixtitle {
            width: 190px;
            height: 50px;
            line-height: 50px;
            text-indent: 10px;
            color: red;
            z-index: 1000;
            position: fixed;
            background: rgba(20, 89, 255, 0.5);
        }

        .fixtitle:after {
            font-size: 24px;
            font-weight: bold;
            content: '测试fisher';
        }
    </style>
</head>
<body>
<div class="fixtitle"></div>
<script src="js/three.js"></script>
<script src="js/OrbitControls.js"></script>
<script>

    ;
    (function () {
        var index = (function () {
            var scene, camera, renderer, controls,
                    renderCount = 0;

            return {
                init: function () {
                    index.initScene();
                    //添加事件
                    index.addEvent();
                    //执行
                    index.render();
                    index.animate();
                },
                initScene: function () {
                    scene = new THREE.Scene();
                    var ext = '.png'
                            , textureCube = new THREE.CubeTextureLoader()
                                    .setPath('img/')
                                    .load([
                                        '0001' + ext,
                                        '0003' + ext,
                                        '0006' + ext,
                                        '0005' + ext,
                                        '0002' + ext,
                                        '0004' + ext
                                    ]);
                    scene.background = textureCube;
                    //加入环境光,浅灰色
                    scene.add(new THREE.AmbientLight(0xffffff));

                    index.initCamera();
                    index.initRenderer();
                    index.initControls();
                },
                initCamera: function () {
                    camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);
                    camera.position.set(200, 200, 200);
                    camera.lookAt(scene.position);
                    scene.add(camera);
                },
                initRenderer: function () {
                    renderer = new THREE.WebGLRenderer();
                    renderer.setSize(window.innerWidth, window.innerHeight);
                    document.body.appendChild(renderer.domElement);
                },
                initControls:function(){
                    controls = new THREE.OrbitControls(camera);
                    controls.addEventListener('change', index.render);
                    controls.autoRotate = false;//自动旋转开关
                    controls.autoRotateSpeed = 2;
                },
                addEvent:function(){
                    window.addEventListener('resize', index.windowResize, false);
                    function onBorderMouseUp(ev) {
                        window.addEventListener("drag", function(){alert('drag')});
                    }
                    onBorderMouseUp();
                },
                render: function () {
                    renderer.render(scene, camera);
                },
                animate: function () {
                    if (renderCount === 0) {
                        index.render();
                    }
                    requestAnimationFrame(index.animate);
                    controls.update();
                },
                windowResize:function(){
                    console.log(new Date());
                    camera.aspect = window.innerWidth / window.innerHeight;
                    camera.updateProjectionMatrix();

                    renderer.setSize(window.innerWidth, window.innerHeight);
                    controls.reset();
                    index.render();
                }
            };
        })();

        index.init();
    })();

</script>
</body>
</html>





如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

终止放荡 2021-12-02 19:50:05

厉害了!遇到同样问题完美解决

小瓶盖 2021-12-02 15:34:04

谢谢大神,解决了

简单气质女生网名 2021-12-02 03:01:39

OrbitControls旋转的是相机,当你相机往左转的时候,当然相对的,看起来物体就是右移的了。

可以直接修改源码,把rotateLeft方法和rotateUp方法里的-=改为+=就行了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文