2015-10-06 97 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

非常真实,目前的措辞可能会令人困惑。我已经编辑了答案,谢谢! –

相关问题