javascript - Three.js + OrbitControls - 未捕获的类型错误 : Cannot read property 'render' of undefined

标签 javascript three.js

我正在编写一个用于旋转立方体的类,但每次旋转或缩放时,我都会收到错误消息“无法读取未定义的属性‘渲染’”。我究竟做错了什么?我猜范围有问题。这是我的类(class):

myclass = function() {
    this.camera = null;
    this.scene = null;
    this.renderer = null;
    this.product = null;

    this.init = function (container) {
        this.scene = new THREE.Scene();
        this.camera = createCamera();
        this.product = createProduct();
        this.scene.add(this.product);
        this.createRenderer();
        this.setControls();
        container.appendChild(this.renderer.domElement);
        this.animate();

    };

    function createCamera() {
        var camera = new THREE.PerspectiveCamera(20, 300 / 400, 1, 10000);
        camera.position.z = 1800;
        return camera;
    }

    function createProduct() {
        var geometry = new THREE.BoxGeometry(300, 200, 200);
        var materials = ...;

    var product = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial(materials));
    return product;
    }
    this.createRenderer = function () {
    this.renderer = new THREE.WebGLRenderer({antialias: true});
    this.renderer.setClearColor(0xffffff);
    this.renderer.setSize(this.sceneWidth, this.sceneHeight);
     };

    this.setControls = function () {
    this.controls = new THREE.OrbitControls(this.camera, this.renderer.domElement);
    this.controls.addEventListener('change', this.render);
    };

    this.animate = function () {
        requestAnimationFrame(this.animate.bind(this));
        this.render();
    };

    this.render = function () {
    this.renderer.render(this.scene, this.camera);
    };
 };

坦克。

最佳答案

您在此处指定的回调中遇到范围界定问题:

this.controls.addEventListener( 'change', this.render );

在你的类里面,添加

var scope = this;

然后像这样重写你的 render() 方法:

this.render = function () {

    scope.renderer.render( scope.scene, scope.camera );

};

此外,添加事件监听器的目的是去除动画循环。

所以...,删除它,并且仅在鼠标导致相机移动时渲染。

您还必须在初始时和模型加载后调用一次 render()

three.js r.69

关于javascript - Three.js + OrbitControls - 未捕获的类型错误 : Cannot read property 'render' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27204203/

相关文章:

javascript - 使用 javascript 在 Google Chrome 和 Firefox 上打印外部文件

javascript - 从 A-Frame 或 JS 更新 Collada (.dae ) 文件代码

three.js - 使用 OrbitControls 时启用右键菜单

javascript - 播放 GLTF 动画?三.js

textbox - 三.JS -- 场景中Camera控件与文本框冲突

javascript - 如何使用jquery检查输入是否检查

javascript - 当宽度为 2% 时,子 div 重叠圆形(带半径)容器

javascript - 使用纯js获取具有特定类的单击元素的下一个元素

javascript - Yii2 动态表单中的自定义字段

javascript - 围绕其自身的 y 轴旋转 Collada 模型