首页 > 解决方案 > 三.js OrbitControls 不工作,控件未定义

问题描述

我遵循了 YouTube 上的这个快速教程

当我注释掉这条线时,我有一个没有控件的工作示例。

//controls = new THREE.OrbitControls( camera, renderer.domElement );

但是当我尝试使用 OrbitControls 时,日志会告诉我以下信息:

(index):21 Uncaught ReferenceError: controls is not defined
    at (index):21

我的内容index.html

<html>
    <head>
        <title>My first three.js app</title>
        <style>
            body { margin: 0; }
            canvas { width: 100%; height: 100% }
        </style>
    </head>
    <body>
        <script src="js/three.js"></script>
        <script src="js/OrbitControls.js"></script>
        <script type="module">

            var scene = new THREE.Scene();
            var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );

            var renderer = new THREE.WebGLRenderer();
            renderer.setSize( window.innerWidth, window.innerHeight );
            document.body.appendChild( renderer.domElement );

            controls = new THREE.OrbitControls( camera, renderer.domElement );

            var geometry = new THREE.SphereGeometry( 1, 64, 64 );
            var material = new THREE.MeshBasicMaterial( {color: 0x00ff00 } );
            var sphere = new THREE.Mesh( geometry, material );
            scene.add( sphere );

            camera.position.z = 5;

            var animate = function () {
                requestAnimationFrame( animate );

                renderer.render( scene, camera );
            };

            animate();
        </script>
    </body>
</html>

标签: htmlthree.js

解决方案


您必须像这样创建控件:

var controls = new THREE.OrbitControls( camera, renderer.domElement );

缺失var导致提到的运行时错误。


推荐阅读