2015-10-06 73 views
7

我剛學習使用的Web GL和three.js所three.js所 - 遺漏的類型錯誤

我跟着YouTube上的教程,因此結束了與下面的代碼。這段代碼應該顯示一個立方體和一個軸。但是,當我嘗試顯示包含此代碼的頁面時,我收到一個Javascript錯誤。該錯誤提示:

Uncaught TypeError: this.updateMorphTargets is not a function

我不知道我做錯了,但希望有人在這裏誰是熟悉three.js所可以幫助我。非常感謝您的時間。

jQuery(document).ready(function($){ 

    var scene = new THREE.Scene(); 
    var camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight,.1, 500); 
    var renderer = new THREE.WebGLRenderer(); 

    renderer.setClearColor(0x000000); 
    renderer.setSize(window.innerWidth, window.innerHeight); 

    var axis = new THREE.AxisHelper(10); 

    scene.add(axis); 

    var cubeGeometry = new THREE.BoxGeometry(5, 5, 5); 
    var cubeMaterial = new THREE.MeshBasicMaterial({color: 0xdddddd, wireframe:true}); 
    var cube = THREE.Mesh(cubeGeometry, cubeMaterial); 

    cube.position.x = 0; 
    cube.position.y = 0; 
    cube.position.z = 0; 

    scene.add(cube); 

    camera.position.x = 40; 
    camera.position.y = 40; 
    camera.position.z = 40; 

    camera.lookAt(scene.position); 

    $('#webgl-container').append(renderer.domElement); 
    renderer.render(scene, camera); 

}); 
+0

查看錯誤的堆棧跟蹤。它源自哪條線? –

+0

它來自three.js中的第16927行 當它試圖調用this.updateMorphTargets(); – Emberdyn

+0

這是堆棧跟蹤的起源嗎?有沒有函數調用那個? –

回答

11

你做了一個簡單的拼寫錯誤,Three.MESH之前忘記new運營商,所以它應該是:

var cube = new THREE.Mesh(cubeGeometry, cubeMaterial); 

new運營商是一個大問題,如果沒有它,THREE.Mesh不再是一個構造函數,但一個普通的功能。這會導致函數內的this引用THREE名稱空間對象本身,而不是新創建的Mesh對象。 THREE命名空間對象沒有updateMorphTarget()方法,因此是錯誤。

+0

你說:「THREE對象沒有updateMorphTarget()方法」,但你的意思是三個名稱空間對象。 – nbro

+0

非常真實,目前的措辭可能會令人困惑。我已經編輯了答案,謝謝! –