2015-10-01 14 views
14

Nếu tôi chạy tập lệnh, bảng điều khiển hiển thị cho tôi "BA.OrbitControls không phải là hàm tạo".Three.js - OrbitControls không hoạt động

enter image description here

Tôi đã làm gì sai? Tôi đã sử dụng cùng một mã từ hướng dẫn sử dụng.

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(); 
+3

Bạn đã bao gồm nó chưa? '' – WestLangley

+1

Đặt trong một fiddle https://jsfiddle.net –

Trả lời

9

Bạn phải bao gồm rõ ràng OrbitControls trong đơn đăng ký của mình.

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

Ngoài ra, đọc các chú thích trong three.js OrbitControls dụ một cách cẩn thận để bạn hiểu khi nào sử dụng

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

và khi nào sử dụng

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

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

ba .js r.72

+0

Hoàn hảo! Cảm ơn vì phần * no animation loop */'requestAnimationFrame'! – LinusGeffarth

5

tôi đã cùng một vấn đề với một xây dựng webpack của three thư viện

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

Solution, cài đặt một điều khiển quỹ đạo bên thứ 3

npm install three-orbit-controls 

chi tiết tại đây: https://github.com/mattdesl/three-orbit-controls

sau đó thay đổi mã trên fragment to

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

ok, không phải là ví dụ tốt nhất, nhưng khi áp dụng thay cho THREE.OrbitControls, nó hoạt động tốt;)

Các vấn đề liên quan