【问题标题】:THREE.js - Uncaught TypeError三.js - 未捕获的类型错误
【发布时间】:2015-10-06 00:31:12
【问题描述】:

我只是在学习使用 Web GL 和 THREE.js

我遵循了 YouTube 上的教程,结果得到了以下代码。此代码应显示一个立方体和一个轴。但是,当我尝试显示包含此代码的页面时,出现 Javascript 错误。错误状态:

未捕获的类型错误:this.updateMorphTargets 不是函数

我不确定我做错了什么,但希望这里熟悉 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);

});

【问题讨论】:

  • 查看错误的堆栈跟踪。它来自哪条线路?
  • 当它尝试调用 this.updateMorphTargets(); 时,它来自 three.js 中的第 16927 行;
  • 这是堆栈跟踪的来源吗?没有调用那个的函数?

标签: javascript three.js


【解决方案1】:

你犯了一个简单的错字,忘记了Three.MESH之前的new运算符,所以应该是:

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

new 运算符很重要,没有它,THREE.Mesh 不再是构造函数,而是普通函数。这会导致函数内部的this 引用THREE 命名空间对象本身,而不是新创建的Mesh 对象。 THREE 命名空间对象没有 updateMorphTarget() 方法,因此出现错误。

【讨论】:

  • 您说:“三个对象没有 updateMorphTarget() 方法”,但您的意思是三个命名空间对象。
  • 非常正确,当前的措辞可能令人困惑。我已经编辑了答案,谢谢!
  • 精彩的观察!
猜你喜欢
  • 2013-07-23
  • 2017-10-15
  • 2019-01-29
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
  • 2012-12-29
相关资源
最近更新 更多