Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Three.js - Uncaught TypeError: undefined is not a function

I'm getting the Uncaught TypeError: undefined is not a function while using Three.js. The error is being shown for the line where I'm creating a THREE.PerspectiveCamera. The script is

window.requestAnimFrame = (function(callback){
        return window.requestAnimationFrame ||
        window.webkitRequestAnimationFrame ||
        window.mozRequestAnimationFrame ||
        window.oRequestAnimationFrame ||
        window.msRequestAnimationFrame ||
        function(callback){
            window.setTimeout(callback, 1000 / 60);
        };
    })();

    function animate(lastTime, angularSpeed, three){
        // update
        var date = new Date();
        var time = date.getTime();
        lastTime = time;

        // render
        three.renderer.render(three.scene, three.camera);

        // request new frame
        requestAnimFrame(function(){
            animate(lastTime, angularSpeed, three);
        });
    }

    $(window).bind('load',function(){
        var angularSpeed = 0.2; // revolutions per second
        var lastTime = 0;
        $container = $("#container");
        var renderer = new THREE.WebGLRenderer();
        renderer.setSize(window.innerWidth, window.innerHeight);
        $container.append(renderer.domElement);

        // camera - Uncaught Type Error on the below line
        var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);
        camera.position.y = -450;
        camera.position.z = 400;
        camera.rotation.x = 45 * (Math.PI / 180);

        // scene
        var scene = new THREE.Scene();

        var material = new THREE.LineBasicMaterial({
                            color: 0x0000ff,
                        });
        var geometry = new THREE.Geometry();
        for(var i=0;i<100;i++){
            geometry.vertices.push(new THREE.Vector3(i-100,i-100,i-100));
            geometry.vertices.push(new THREE.Vector3(i+100,i+100,i+100));
            var line = new Three.Line(geometry,material);
            scene.add(line);
            geometry=new THREE.Geometry();
        }


        // create wrapper object that contains three.js objects
        var three = {
            renderer: renderer,
            camera: camera,
            scene: scene,
        };

        animate(lastTime, angularSpeed, three);
    });

Is this because the way I'm declaring the camera is wrong? I checked the three.js documentation and the example give there is basically the same. So I'm stuck on what to do.

UPDATE: I was using a local copy of Three.js when I encountered the last error. I switched it with the link http://www.html5canvastutorials.com/libraries/Three.js. Now, the PerspectiveCamera error is gone, but it produces a new error inside the Three.js script. The error is Uncaught TypeError: Cannot read property 'x' of undefined on line 337 of the Three.js script

Thanks.

like image 252
rahules Avatar asked Mar 18 '13 07:03

rahules


People also ask

How to fix uncaught TypeError undefined is not a function?

If you reverse the order of the statements the Uncaught TypeError: undefined is not a function error will occur: alert (greetings ()); var greetings= function () { return 'Good Morning..!!' }; So, It's better you double check that your scripts are being loaded correctly.

What is the difference between uncaught and undefined in JavaScript?

Uncaught means the error was not caught in a try-catch block . The TypeError object represents an error when a value is not of the expected type. Also, Undefined is the property of the global object.

What is an uncaught TypeError in JavaScript?

This article will help you understand the Uncaught TypeError and how to solve it in JavaScript. When an expression or statement is evaluated, and the type of the expression or statement is not consistent with the anticipated type, a TypeError is raised.

What does undefined is not a function mean in C++?

So when you get undefined is not a function it means that expression did not return a function object. So you have to figure out what you are trying to execute isn't a function. Sometimes the error happened because the library wasn't loaded (correctly).


1 Answers

The problem with the local copy is you used the unbuilt Three.js file (that would be src/Three.js). The one you want is either build/three.js or build/three.min.js. I copied that into my project, and changed the reference to it in the script tag's src attribute, and it all started working.

In short:

mrdoob-three.js-2524525(or some other number here)
 |
 +----build
 |     |
 |     +--three.js     <-- YES, CORRECT FILE
 |     +--three.min.js <-- YES
 |     ...
 |
 +----src
 ...   |
       +--Three.js     <-- NO, PREBUILT FILE THAT ONLY CONTAINS CONSTANTS
       ...
like image 88
Nashenas Avatar answered Sep 28 '22 11:09

Nashenas