Files
three.js/examples/cameras/FreeCamera.js
T
Mr.doob 8f543db16d * Refactored CanvasRenderer (more duplicated code, but easier to handle)
* `Face4` now supports `MeshBitmapUVMappingMaterial`
* Changed order of `*StrokeMaterial` parameters. Now it's `color`, `opacity`, `lineWidth`.
* `BitmapUVMappingMaterial` > `MeshBitmapUVMappingMaterial`
* `ColorFillMaterial` > `MeshColorFillMaterial`
* `ColorStrokeMaterial` > `MeshColorStrokeMaterial`
* `FaceColorFillMaterial` > `MeshFaceColorFillMaterial`
* `FaceColorStrokeMaterial` > `MeshFaceColorStrokeMaterial`
* `ColorStrokeMaterial` > `LineColorMaterial`
* `Rectangle.instersects` returned false with rectangles with 0px witdh or height
2010-07-17 00:25:50 +01:00

132 lines
3.1 KiB
JavaScript

/**
* @author mr.doob / http://mrdoob.com/
*/
THREE.FreeCamera = function ( x, y, z ) {
THREE.Camera.call( this, x, y, z );
this.rotation = new THREE.Vector3( 0, 0, 0 );
this.moveZ = function ( amount ) {
direction.set( this.matrix.n11, this.target.position, this.position );
depth = direction.length();
direction.normalize();
vector.copy( direction );
vector.multiplyScalar( amount );
direction.multiplyScalar( depth );
this.position.addSelf( vector );
this.target.position.add( this.position, direction );
};
this.updateMatrix = function () {
this.matrix.identity();
this.matrix.multiplySelf( THREE.Matrix4.translationMatrix( this.position.x, this.position.y, this.position.z ) );
this.matrix.multiplySelf( THREE.Matrix4.rotationXMatrix( this.rotation.x ) );
this.matrix.multiplySelf( THREE.Matrix4.rotationYMatrix( this.rotation.y ) );
this.matrix.multiplySelf( THREE.Matrix4.rotationZMatrix( this.rotation.z ) );
};
/*
var depth = 0;
var vector = new THREE.Vector3();
var direction = new THREE.Vector3();
this.moveX = function ( amount ) {
direction.sub( this.target.position, this.position );
depth = direction.length();
direction.normalize();
vector.copy( this.up );
vector.crossSelf( direction );
vector.multiplyScalar( amount );
direction.multiplyScalar( depth );
this.position.subSelf( vector );
this.target.position.add( this.position, direction );
};
this.moveZ = function ( amount ) {
direction.sub( this.target.position, this.position );
depth = direction.length();
direction.normalize();
vector.copy( direction );
vector.multiplyScalar( amount );
direction.multiplyScalar( depth );
this.position.addSelf( vector );
this.target.position.add( this.position, direction );
};
this.rotateX = function( amount ) { // pitch
amount *= Math.PI / 180;
vector.x = direction.x;
vector.y = ( direction.y * Math.cos( amount ) ) - ( direction.z * Math.sin( amount ) );
vector.z = ( direction.y * Math.sin( amount ) ) + ( direction.z * Math.cos( amount ) );
direction.copy( vector );
vector.set( direction.x, direction.y, direction.z );
vector.multiplyScalar( 400 );
this.target.position.copy( this.position );
this.target.position.addSelf( vector );
};
this.rotateY = function( amount ) { // yaw
amount *= Math.PI / 180;
direction.sub( this.position, this.target.position );
depth = direction.length();
direction.normalize();
vector.x = ( direction.z * Math.sin( amount ) ) + ( direction.x * Math.cos( amount ) );
vector.y = direction.y;
vector.z = ( direction.z * Math.cos( amount ) ) - ( direction.x * Math.sin( amount ) );
direction.copy( vector );
direction.multiplyScalar( depth );
this.target.position.sub( this.position, direction );
};
this.rotateZ = function( amount ) { // roll
amount *= Math.PI / 180;
vector.x = ( this.up.x * Math.cos( amount ) ) - ( this.up.y * Math.sin( amount ) );
vector.y = ( this.up.x * Math.sin( amount ) ) + ( this.up.y * Math.cos( amount ) );
vector.z = this.up.z;
this.up.copy( vector );
};
*/
};
THREE.FreeCamera.prototype = new THREE.Camera();
THREE.FreeCamera.prototype.constructor = THREE.FreeCamera;