2014-12-01 159 views
1

Firebug拋出一個錯誤,說我的var相機上的「THREE沒有定義」,我真的不明白爲什麼。這個錯誤對我來說沒有任何意義,因爲我看到它;在等號的右邊有一個定義好的三項權利。Three.js相機旋轉錯誤

 init(); 
     animate(); 

     function init() 
     { 
      var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000); 
      camera.position.z = 500; 

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

      var scene = new THREE.Scene(); 

      var geometry = new THREE.BoxGeometry(100, 100, 100); 
      var material = new THREE.MeshBasicMaterial(); 

      var mesh = new THREE.Mesh(geometry, material); 
      scene.add(mesh); 

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

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

     function render() 
     { 
      renderer.render(scene, camera); 
     } 
+2

你是否包含了三個js腳本來確保THREE被定義? '' – 2014-12-01 22:35:00

+0

我有;它在我的html的;就在我在這裏展示的東西之上。 – Charkins12 2014-12-01 22:36:59

+0

嗯,我想它*應該*工作然後...仔細檢查你沒有網絡錯誤下載三個js源文件。 – 2014-12-01 22:56:47

回答

2

你的代碼是很好的,除了你定義init()函數,這意味着這些變量是本地的init()函數,並不會在外部無法認識裏面的變量。

在函數之外聲明你的變量,這應該有助於解決問題。舉個例子:

var camera, controls, scene, geometry, material, mesh, renderer; 

init(); 
animate(); 

function init() { 
    camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000); 
    camera.position.z = 500; 
... 
+0

這就是問題所在!偉大的工作和許多謝謝你! – Charkins12 2014-12-03 14:22:35

1

很可能,你沒有正確包含three.js腳本。檢查Firebug並觀察THREE變量 - 在開始使用THREE.JS之前,必須定義它。檢查網絡錯誤是否正確加載。

接下來,確保在加載頁面的其餘部分後運行您的代碼。

window.addEventListener('load', init); 

這將調用init函數加載頁面時

後,才接着,在全局範圍內定義的變量,而不是內部的初始化函數。另外,不要忘記在你的動畫函數中調用渲染函數。