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.
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.
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.
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.
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).
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
...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With