【问题标题】:THREE.JS Uncaught ReferenceError: OrbitControls is not definedTHREE.JS Uncaught ReferenceError: OrbitControls is not defined
【发布时间】:2021-06-29 03:36:54
【问题描述】:

const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const controls = new OrbitControls(camera);
camera.position.set(200, 0, 0);
controls.update();

const geometry = new THREE.SphereGeometry(50, 32, 32);
const material = new THREE.MeshBasicMaterial({
  color: 0xffff00
});
const sphere = new THREE.Mesh(geometry, material);
scene.add(sphere);


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

function animate() {

  requestAnimationFrame(animate);

  controls.update();

  renderer.render(scene, camera);

}
<script src="https://cdn.jsdelivr.net/npm/three@0.129.0/build/three.min.js"></script>

当我运行我的 javascript 代码时。我收到以下错误“未捕获的 ReferenceError:未定义 OrbitControls”。 我看到了这个post,但它似乎没有帮助。 有什么想法吗?

我的OrbitControls.js在三个.js文件下的同一个文件中

【问题讨论】:

    标签: javascript three.js


    【解决方案1】:

    通过导入 OrbitControls 并在顶部定义您的渲染器并将其传递给 OrbitControls,我让您的代码正常运行。

    编辑,我添加了第二个 sn-p,它改编自他们网站上的一个 three.js 示例,我认为它添加了您正在寻找的黄色球体。

    let camera, controls, scene, renderer;
    
    init();
    //render(); // remove when using next line for animation loop (requestAnimationFrame)
    animate();
    
    function init() {
    
      scene = new THREE.Scene();
      scene.background = new THREE.Color(0xcccccc);
      scene.fog = new THREE.FogExp2(0xcccccc, 0.002);
    
      renderer = new THREE.WebGLRenderer({
        antialias: true
      });
      renderer.setPixelRatio(window.devicePixelRatio);
      renderer.setSize(window.innerWidth, window.innerHeight);
      document.body.appendChild(renderer.domElement);
    
      camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 1000);
      camera.position.set(400, 200, 0);
    
      // controls
    
      controls = new THREE.OrbitControls(camera, renderer.domElement);
    
      //controls.addEventListener( 'change', render ); // call this only in static scenes (i.e., if there is no animation loop)
    
      controls.enableDamping = true; // an animation loop is required when either damping or auto-rotation are enabled
      controls.dampingFactor = 0.05;
    
      controls.screenSpacePanning = false;
    
      controls.minDistance = 100;
      controls.maxDistance = 500;
    
      controls.maxPolarAngle = Math.PI / 2;
    
      // world
    
      const geometry = new THREE.SphereGeometry(50, 32, 32);
      const material = new THREE.MeshBasicMaterial({
        color: 0xffff00
      });
      const sphere = new THREE.Mesh(geometry, material);
      scene.add(sphere);
    
    
    
    
      //
    
      window.addEventListener('resize', onWindowResize);
    
    }
    
    function onWindowResize() {
    
      camera.aspect = window.innerWidth / window.innerHeight;
      camera.updateProjectionMatrix();
    
      renderer.setSize(window.innerWidth, window.innerHeight);
    
    }
    
    function animate() {
    
      requestAnimationFrame(animate);
    
      controls.update(); // only required if controls.enableDamping = true, or if controls.autoRotate = true
    
      render();
    
    }
    
    function render() {
    
      renderer.render(scene, camera);
    
    }
    <script src="https://cdn.jsdelivr.net/npm/three@0.122.0/build/three.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/three@0.122.0/examples/js/controls/OrbitControls.min.js"></script>

    let camera, controls, scene, renderer;
    
    init();
    //render(); // remove when using next line for animation loop (requestAnimationFrame)
    animate();
    
    function init() {
    
      scene = new THREE.Scene();
      scene.background = new THREE.Color(0xcccccc);
      scene.fog = new THREE.FogExp2(0xcccccc, 0.002);
    
      renderer = new THREE.WebGLRenderer({
        antialias: true
      });
      renderer.setPixelRatio(window.devicePixelRatio);
      renderer.setSize(window.innerWidth, window.innerHeight);
      document.body.appendChild(renderer.domElement);
    
      camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 1000);
      camera.position.set(400, 200, 0);
    
      // controls
    
      controls = new THREE.OrbitControls(camera, renderer.domElement);
    
      //controls.addEventListener( 'change', render ); // call this only in static scenes (i.e., if there is no animation loop)
    
      controls.enableDamping = true; // an animation loop is required when either damping or auto-rotation are enabled
      controls.dampingFactor = 0.05;
    
      controls.screenSpacePanning = false;
    
      controls.minDistance = 100;
      controls.maxDistance = 500;
    
      controls.maxPolarAngle = Math.PI / 2;
    
      // world
    
      const geometry = new THREE.SphereGeometry(50, 32, 32);
      const material = new THREE.MeshBasicMaterial({
        color: 0xffff00
      });
      const sphere = new THREE.Mesh(geometry, material);
      scene.add(sphere);
    
    
    
    
      //
    
      window.addEventListener('resize', onWindowResize);
    
    }
    
    function onWindowResize() {
    
      camera.aspect = window.innerWidth / window.innerHeight;
      camera.updateProjectionMatrix();
    
      renderer.setSize(window.innerWidth, window.innerHeight);
    
    }
    
    function animate() {
    
      requestAnimationFrame(animate);
    
      controls.update(); // only required if controls.enableDamping = true, or if controls.autoRotate = true
    
      render();
    
    }
    
    function render() {
    
      renderer.render(scene, camera);
    
    }
        <script src="https://cdn.jsdelivr.net/npm/three@0.122.0/build/three.min.js"></script>
        <script src="https://cdn.jsdelivr.net/npm/three@0.122.0/examples/js/controls/OrbitControls.min.js"></script>

    【讨论】:

    • 谢谢,它似乎工作!但奇怪的是,我应该有一个黄色的球体出现......你知道为什么它没有吗?
    • 我添加了第二个 sn-p 改编自他们网站上的一个示例,我认为它添加了您正在寻找的黄色球体。我不确定为什么它没有出现在您的原始代码中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2019-01-22
    • 2019-12-31
    • 2020-05-24
    相关资源
    最近更新 更多