diff --git a/threejs/three.d.ts b/threejs/three.d.ts index 753649d93..12eae5de8 100644 --- a/threejs/three.d.ts +++ b/threejs/three.d.ts @@ -1,11 +1,7 @@ -/** - * three.d.ts (https://github.com/kontan/three.d.ts) - * - * Type definitions for three.js r56 (http://mrdoob.github.com/three.js/) - * - * Copyright (c) 2012- Kon (http://phyzkit.net/) - * - */ +// Type definitions for three.js +// Project: http://mrdoob.github.com/three.js/ +// Definitions by: Kon +// Definitions: https://github.com/borisyankov/DefinitelyTyped interface WebGLRenderingContext {} @@ -604,10 +600,55 @@ module THREE { yellowgreen: number; }; + /** + * JavaScript events for custom objects + * + * # Example + * var Car = function () { + * + * EventDispatcher.call( this ); + * this.start = function () { + * + * this.dispatchEvent( { type: 'start', message: 'vroom vroom!' } ); + * + * }; + * + * }; + * + * var car = new Car(); + * car.addEventListener( 'start', function ( event ) { + * + * alert( event.message ); + * + * } ); + * car.start(); + * + * @source src/core/EventDispatcher.js + */ export class EventDispatcher { + /** + * Creates eventDispatcher object. It needs to be call with '.call' to add the functionality to an object. + */ constructor(); + + /** + * Adds a listener to an event type. + * @param type The type of the listener that gets removed. + * @param listener The listener function that gets removed. + */ addEventListener(type: string, listener: (event: any) => void ): void; + + /** + * Fire an event type. + * @param type The type of event that gets fired. + */ dispatchEvent(event: { type:string; target: any; }): void; + + /** + * Removes a listener from an event type. + * @param type The type of the listener that gets removed. + * @param listener The listener function that gets removed. + */ removeEventListener(type: string, listener: (event: any) => void ): void; } @@ -653,12 +694,12 @@ module THREE { /** * Triangle face. * - * @example - * var normal = new THREE.Vector3( 0, 1, 0 ); - * var color = new THREE.Color( 0xffaa00 ); - * var face = new THREE.Face3( 0, 1, 2, normal, color, 0 ); + * # Example + * var normal = new THREE.Vector3( 0, 1, 0 ); + * var color = new THREE.Color( 0xffaa00 ); + * var face = new THREE.Face3( 0, 1, 2, normal, color, 0 ); * - * @see src/core/Face3.js + * @source https://github.com/mrdoob/three.js/blob/master/src/core/Face3.js */ export class Face3 implements Face { /** @@ -732,12 +773,12 @@ module THREE { /** * Quad face. * - * @example - * var normal = new THREE.Vector3( 0, 1, 0 ); - * var color = new THREE.Color( 0xffaa00 ); - * var face = new THREE.Face4( 0, 1, 2, 3, normal, color, 0 ); + * # example + * var normal = new THREE.Vector3( 0, 1, 0 ); + * var color = new THREE.Color( 0xffaa00 ); + * var face = new THREE.Face4( 0, 1, 2, 3, normal, color, 0 ); * - * @see src/core/Face4.js + * @source https://github.com/mrdoob/three.js/blob/master/src/core/Face4.js */ export class Face4 implements Face { /** @@ -923,42 +964,162 @@ module THREE { /** * Base class for geometries * - * @example - * var geometry = new THREE.Geometry(); - * geometry.vertices.push( new THREE.Vector3( -10, 10, 0 ) ); - * geometry.vertices.push( new THREE.Vector3( -10, -10, 0 ) ); - * geometry.vertices.push( new THREE.Vector3( 10, -10, 0 ) ); - * geometry.faces.push( new THREE.Face3( 0, 1, 2 ) ); - * geometry.computeBoundingSphere(); + * # Example + * var geometry = new THREE.Geometry(); + * geometry.vertices.push( new THREE.Vector3( -10, 10, 0 ) ); + * geometry.vertices.push( new THREE.Vector3( -10, -10, 0 ) ); + * geometry.vertices.push( new THREE.Vector3( 10, -10, 0 ) ); + * geometry.faces.push( new THREE.Face3( 0, 1, 2 ) ); + * geometry.computeBoundingSphere(); * - * @see src/core/Geometry.js + * @see https://github.com/mrdoob/three.js/blob/master/src/core/Geometry.js */ export class Geometry { constructor(); + + /** + * Unique number of this geometry instance + */ id: number; + + /** + * Name for this geometry. Default is an empty string. + */ name: string; + + /** + * The array of vertices hold every position of points of the model. + * To signal an update in this array, Geometry.verticesNeedUpdate needs to be set to true. + */ vertices: Vector3[]; + + /** + * Array of vertex colors, matching number and order of vertices. + * Used in ParticleSystem, Line and Ribbon. + * Meshes use per-face-use-of-vertex colors embedded directly in faces. + * To signal an update in this array, Geometry.colorsNeedUpdate needs to be set to true. + */ colors: Color[]; - materials: Material[]; + + /** + * Array of vertex normals, matching number and order of vertices. + * Normal vectors are nessecary for lighting + * To signal an update in this array, Geometry.normalsNeedUpdate needs to be set to true. + */ + normals: Vector3[]; + + /** + * Array of triangles or/and quads. + * The array of faces describe how each vertex in the model is connected with each other. + * To signal an update in this array, Geometry.elementsNeedUpdate needs to be set to true. + */ faces: Face[]; + + /** + * Array of face UV layers. + * Each UV layer is an array of UV matching order and number of faces. + * To signal an update in this array, Geometry.uvsNeedUpdate needs to be set to true. + */ faceUvs: Vector2[]; + + /** + * Array of face UV layers. + * Each UV layer is an array of UV matching order and number of vertices in faces. + * To signal an update in this array, Geometry.uvsNeedUpdate needs to be set to true. + */ faceVertexUvs: Vector2[][]; + + /** + * Array of morph targets. Each morph target is a Javascript object: + * + * { name: "targetName", vertices: [ new THREE.Vector3(), ... ] } + * + * Morph vertices match number and order of primary vertices. + */ morphTargets: MorphTarget[]; + + /** + * Array of morph colors. Morph colors have similar structure as morph targets, each color set is a Javascript object: + * + * morphNormal = { name: "NormalName", normals: [ new THREE.Vector3(), ... ] } + */ morphColors: MorphColor[]; + + /** + * Array of skinning weights, matching number and order of vertices. + */ skinWeights: number[]; + + /** + * Array of skinning indices, matching number and order of vertices. + */ skinIndices: number[]; + + /** + * Bounding box. + */ boundingBox: BoundingBox3D; + + /** + * Bounding sphere. + */ boundingSphere: BoundingSphere; + + /** + * True if geometry has tangents. Set in Geometry.computeTangents. + */ hasTangents: bool; + + /** + * Set to true if attribute buffers will need to change in runtime (using "dirty" flags). + * Unless set to true internal typed arrays corresponding to buffers will be deleted once sent to GPU. + * Defaults to true. + */ dynamic: bool; + + /** + * Set to true if the vertices array has been updated. + */ verticesNeedUpdate: bool; + + /** + * Set to true if the faces array has been updated. + */ elementsNeedUpdate: bool; + + /** + * Set to true if the uvs array has been updated. + */ uvsNeedUpdate: bool; + + /** + * Set to true if the normals array has been updated. + */ normalsNeedUpdate: bool; + + /** + * Set to true if the tangents in the faces has been updated. + */ tangentsNeedUpdate: bool; + + /** + * Set to true if the colors array has been updated. + */ colorsNeedUpdate: bool; + + /** + * Set to true if the linedistances array has been updated. + */ lineDistancesNeedUpdate: bool; + + /** + * Set to true if an array has changed in length. + */ buffersNeedUpdate: bool; + + /** + * + */ animation: AnimationData; /** @@ -982,6 +1143,9 @@ module THREE { */ computeVertexNormals(areaWeighted?: bool): void; + /** + * Computes morph normals. + */ computeMorphNormals(): void; /** @@ -1010,8 +1174,15 @@ module THREE { */ mergeVertices(): number; + /** + * Creates a new clone of the Geometry. + */ clone(): Geometry; + /** + * Removes The object from memory. + * Don't forget to call this method when you remove an geometry because it can cuase meomory leaks. + */ dispose(): void; } @@ -1132,7 +1303,15 @@ module THREE { * ( class Matrix3 implements Matrix<Matrix3> ) */ export class Matrix3 implements Matrix { - constructor(n11?: number, n12?: number, n13?: number, n21?: number, n22?: number, n23?: number, n31?: number, n32?: number, n33?: number); + /** + * Creates an identity matrix. + */ + constructor(); + + /** + * Initialises the matrix with the supplied n11..n33 values. + */ + constructor(n11: number, n12: number, n13: number, n21: number, n22: number, n23: number, n31: number, n32: number, n33: number); /** * Float32Array with matrix values. @@ -1183,9 +1362,15 @@ module THREE { export class Matrix4 implements Matrix { /** - * Initialises the matrix with the supplied n11..n44 values, or just creates an identity matrix if no values are passed. + * Creates an identity matrix. */ - constructor(n11?: number, n12?: number, n13?: number, n14?: number, n21?: number, n22?: number, n23?: number, n24?: number, n31?: number, n32?: number, n33?: number, n34?: number, n41?: number, n42?: number, n43?: number, n44?: number); + constructor(); + + + /** + * Initialises the matrix with the supplied n11..n44 values. + */ + constructor(n11: number, n12: number, n13: number, n14: number, n21: number, n22: number, n23: number, n24: number, n31: number, n32: number, n33: number, n34: number, n41: number, n42: number, n43: number, n44: number); /** * Float32Array with matrix values. @@ -1525,17 +1710,72 @@ module THREE { */ receiveShadow: bool; + /** + * When this is set, it checks every frame if the object is in the frustum of the camera. Otherwise the object gets drawn every frame even if it isn't visible. + */ frustumCulled: bool; + + /** + * When this is set, it calculates the matrix of position, (rotation or quaternion) and scale every frame and also recalculates the matrixWorld property. + */ matrixAutoUpdate: bool; + + /** + * When this is set, it calculates the matrixWorld in that frame and resets this property to false. + */ matrixWorldNeedsUpdate: bool; + + /** + * When this is set, then the rotationMatrix gets calculated every frame. + */ rotationAutoUpdate: bool; + + /** + * This updates the position, rotation and scale with the matrix. + */ applyMatrix(matrix: Matrix4): void; + + /** + * Translates object along arbitrary axis by distance. + * @param distance Distance. + * @param axis Translation direction. + */ translate(distance: number, axis: Vector3): void; + + /** + * Translates object along x axis by distance. + * @param distance Distance. + */ translateX(distance: number): void; + + /** + * Translates object along y axis by distance. + * @param distance Distance. + */ translateY(distance: number): void; + + /** + * Translates object along z axis by distance. + * @param distance Distance. + */ translateZ(distance: number): void; + + /** + * Updates the vector from local space to world space. + * @param vector A local vector. + */ localToWorld(vector: Vector3): Vector3; + + /** + * Updates the vector from world space to local space. + * @param vector A world vector. + */ worldToLocal(vector: Vector3): Vector3; + + /** + * Rotates object to face point in space. + * @param vector A world vector to look at. + */ lookAt(vector: Vector3): void; /** @@ -1577,8 +1817,11 @@ module THREE { * Updates global transform of the object and its children. */ updateMatrixWorld(force: bool): void; + + /** + * Creates a new clone of this object and all descendants. + */ clone(object?: Object3D): Object3D; - deallocate(): void; static defaultEulerOrder: string; // static defaultEulerOrder:EulerOrder; @@ -2480,20 +2723,91 @@ module THREE { /** * Camera with perspective projection. * - * @example - * var camera = new THREE.PerspectiveCamera( 45, width / height, 1, 1000 ); - * scene.add( camera ); + * # example + * var camera = new THREE.PerspectiveCamera( 45, width / height, 1, 1000 ); + * scene.add( camera ); * - * @see src/cameras/PerspectiveCamera.js + * @source https://github.com/mrdoob/three.js/blob/master/src/cameras/PerspectiveCamera.js */ export class PerspectiveCamera extends Camera { + /** + * @param fov Camera frustum vertical field of view. Default value is 50. + * @param aspect Camera frustum aspect ratio. Default value is 1. + * @param near Camera frustum near plane. Default value is 0.1. + * @param far Camera frustum far plane. Default value is 2000. + */ constructor(fov?: number, aspect?: number, near?: number, far?: number); + + /** + * Camera frustum vertical field of view, from bottom to top of view, in degrees. + */ fov: number; + + /** + * Camera frustum aspect ratio, window width divided by window height. + */ aspect: number; + + /** + * Camera frustum near plane. + */ near: number; + + /** + * Camera frustum far plane. + */ far: number; + + /** + * Uses focal length (in mm) to estimate and set FOV 35mm (fullframe) camera is used if frame size is not specified. + * Formula based on http://www.bobatkins.com/photography/technical/field_of_view.html + * @param focalLength focal length + * @param frameHeight frame size. Default value is 24. + */ setLens(focalLength: number, frameHeight?: number): void; + + /** + * Sets an offset in a larger frustum. This is useful for multi-window or multi-monitor/multi-machine setups. + * For example, if you have 3x2 monitors and each monitor is 1920x1080 and the monitors are in grid like this: + * + * +---+---+---+ + * | A | B | C | + * +---+---+---+ + * | D | E | F | + * +---+---+---+ + * + * then for each monitor you would call it like this: + * + * var w = 1920; + * var h = 1080; + * var fullWidth = w * 3; + * var fullHeight = h * 2; + * + * // A + * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h ); + * // B + * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h ); + * // C + * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h ); + * // D + * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h ); + * // E + * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h ); + * // F + * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h ); Note there is no reason monitors have to be the same size or in a grid. + * + * @param fullWidth full width of multiview setup + * @param fullHeight full height of multiview setup + * @param x horizontal offset of subcamera + * @param y vertical offset of subcamera + * @param width width of subcamera + * @param height height of subcamera + */ setViewOffset(fullWidth: number, fullHeight: number, x: number, y: number, width: number, height: number): void; + + /** + * Updates the camera projection matrix. Must be called after change of parameters. + */ updateProjectionMatrix(): void; } @@ -2510,17 +2824,30 @@ module THREE { /** * This light's color gets applied to all the objects in the scene globally. * - * @example - * var light = new THREE.AmbientLight( 0x404040 ); // soft white light - * scene.add( light ); + * # example + * var light = new THREE.AmbientLight( 0x404040 ); // soft white light + * scene.add( light ); * - * @see src/lights/AmbientLight.js + * @source https://github.com/mrdoob/three.js/blob/master/src/lights/AmbientLight.js */ export class AmbientLight extends Light { + /** + * This creates a Ambientlight with a color. + * @param hex Numeric value of the RGB component of the color. + */ constructor(hex?: number); } - export class RenderTarget { + export class AreaLight{ + constructor(hex: number, intensity?: number); + normal: Vector3; + right: Vector3; + intensity: number; + width: number; + height: number; + constantAttenuation: number; + linearAttenuation: number; + quadraticAttenuation: number; } /** @@ -4168,6 +4495,9 @@ module THREE { setRenderTarget(renderTarget: RenderTarget): void; } + export interface RenderTarget { + } + export interface WebGLRenderTargetOptions { wrapS?: Wrapping; wrapT?: Wrapping; @@ -4180,7 +4510,7 @@ module THREE { stencilBuffer?: bool; // true; } - export class WebGLRenderTarget extends RenderTarget { + export class WebGLRenderTarget implements RenderTarget { constructor(width: number, height: number, options?: WebGLRenderTargetOptions); width: number; height: number; @@ -4288,6 +4618,10 @@ module THREE { export class Fog implements IFog { constructor(hex: number, near?: number, far?: number); name:string; + + /** + * Fog color. + */ color: Color; /**