File: /home/lindsay/xeolabs/xeogl-next/xeogl/src/camera/customProjection.js
/**
A **CustomProjection** defines a projection for a {{#crossLink "Camera"}}Camera{{/crossLink}} as a custom 4x4 matrix..
## Overview
* A {{#crossLink "Camera"}}Camera{{/crossLink}} has a CustomProjection to configure its custom projection mode.
* A CustomProjection lets us explicitly set the elements of its 4x4 transformation matrix.
## Examples
* [Camera with a CustomProjection](../../examples/#camera_customProjection)
## Usage
* See {{#crossLink "Camera"}}{{/crossLink}}
@class CustomProjection
@module xeogl
@submodule camera
@constructor
@param [owner] {Component} Owner component. When destroyed, the owner will destroy this component as well. Creates this component within the default {{#crossLink "Scene"}}{{/crossLink}} when omitted.
@param [cfg] {*} Configs
@param [cfg.id] {String} Optional ID, unique among all components in the parent scene, generated automatically when omitted.
@param [cfg.meta] {String:Object} Optional map of user-defined metadata to attach to this CustomProjection.
@param [cfg.matrix=] {Float32Array} 4x4 transform matrix.
@extends Component
*/
import {math} from '../math/math.js';
import {Component} from '../component.js';
import {State} from '../renderer/state.js';
import {componentClasses} from "./../componentClasses.js";
const type = "xeogl.CustomProjection";
class CustomProjection extends Component {
/**
JavaScript class name for this Component.
For example: "xeogl.AmbientLight", "xeogl.MetallicMaterial" etc.
@property type
@type String
@final
*/
get type() {
return type;
}
init(cfg) {
super.init(cfg);
this._state = new State({
matrix: math.mat4()
});
this.matrix = cfg.matrix;
}
/**
The CustomProjection's projection transform matrix.
Fires a {{#crossLink "CustomProjection/matrix:event"}}{{/crossLink}} event on change.
@property matrix
@default [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
@type {Float32Array}
*/
set matrix(matrix) {
this._state.matrix.set(matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
/**
Fired whenever this CustomProjection's {{#crossLink "CustomProjection/matrix:property"}}{{/crossLink}} property changes.
@event matrix
@param value The property's new value
*/
this.fire("far", this._state.matrix);
}
get matrix() {
return this._state.matrix;
}
destroy() {
super.destroy();
this._state.destroy();
}
}
componentClasses[type] = CustomProjection;
export{CustomProjection};