【问题标题】:Three.js - OrbitControls doesn't workThree.js - OrbitControls 不起作用
【发布时间】:2015-12-29 07:51:36
【问题描述】:

如果我运行脚本,控制台会显示“THREE.OrbitControls 不是构造函数”。

我做错了什么?我使用了手册中的相同代码。

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

var render = function () {
    requestAnimationFrame( render );
    renderer.render(scene, camera);
                //Hier wird die Größe des Fensters manipuliert!
    renderer.setSize(window.innerWidth - 20, window.innerHeight - 20);                  

};

    var animate = function () {
        requestAnimationFrame( animate );
        controls.update();                  
    };


var geometry1 = new THREE.BoxGeometry( 10, 10, 10);
var material = new THREE.MeshPhongMaterial( {specular: "#fdfb57", color: "#d8d613", emissive: "#6b6a0d", side: THREE.DoubleSide} );
var box = new THREE.Mesh(geometry1, material);


scene.add(box);   

camera.position.z = 50;


render();   
animate();

【问题讨论】:

  • 你加入了吗? <script src="js/controls/OrbitControls.js"></script>
  • 放入小提琴jsfiddle.net

标签: javascript three.js


【解决方案1】:

我遇到了类似的问题,经过大量研究,下面的事情奏效了

在您的 HTML 中,添加 OrbitControls 时的顺序很重要,因为它需要 Three.js 中的某些内容。

应该是

<script src="../build/three.min.js"></script>
<script src="js/controls/OrbitControls.js"></script>

【讨论】:

    【解决方案2】:

    我也有同样的问题,是因为你放错了行。 你需要把它放在这一行下面

    document.body.appendChild( renderer.domElement );
    

    然后你添加轨道控制

    controls = new THREE.OrbitControls( camera, renderer.domElement );
    controls.addEventListener( 'change', posUpdate );
    controls.update();
    

    如果不行,添加脚本文件下载here

    <script src="OrbitControls.js"></script>
    

    【讨论】:

      【解决方案3】:

      https://github.com/nicolaspanel/three-orbitcontrols-ts

      npm install --save three-orbitcontrols-ts
      import { OrbitControls } from 'three-orbitcontrols-ts'
      

      orbitcontrols应该单独安装成angular,这个问题困扰了我好几天。

      【讨论】:

        【解决方案4】:

        webpack 构建 three 库时我遇到了同样的问题

        var THREE = require('three')
        THREE.OrbitControls === undefined  // true
        

        解决方案,安装第 3 方轨道控制器

        npm install three-orbit-controls
        

        详情在这里:https://github.com/mattdesl/three-orbit-controls

        然后把上面的代码片段改成

        var THREE = require('three')
        var OrbitControls = require('three-orbit-controls')(THREE)
        OrbitControls === undefined  // false
        

        好吧,这不是最好的例子,但是当它代替THREE.OrbitControls 时,它工作得很好;)

        【讨论】:

        【解决方案5】:

        您必须在应用程序中明确包含OrbitControls

        <script src="js/controls/OrbitControls.js"></script>
        

        另外,请仔细阅读 three.js OrbitControls 示例中的 cmets,以便了解何时使用

        controls.addEventListener( 'change', render ); // add this only if there is no animation loop (requestAnimationFrame)
        

        以及何时使用

        controls.update(); // required if controls.enableDamping = true, or if controls.autoRotate = true
        

        http://threejs.org/examples/misc_controls_orbit.html

        three.js r.72

        【讨论】:

        • 完美!感谢没有动画循环 / requestAnimationFrame 部分!
        • OrbitControls.js 是否有 CDN URL?
        • 这是我的确切问题,因为我没有动画循环。节省了我在那里的时间
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-03
        • 2016-06-14
        • 1970-01-01
        • 2015-11-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多