2016-12-07 15:20:41 +01:00
|
|
|
/**
|
|
|
|
* Runtime Matrix4
|
|
|
|
* @param graphics
|
|
|
|
* @param parentObject
|
|
|
|
* @param matrix4
|
|
|
|
* @param grain
|
|
|
|
* @constructor
|
|
|
|
*/
|
2016-10-14 12:32:53 +02:00
|
|
|
GameLib.D3.Matrix4 = function(
|
2016-12-07 15:20:41 +01:00
|
|
|
graphics,
|
|
|
|
parentObject,
|
|
|
|
matrix4,
|
|
|
|
grain
|
2016-10-14 12:32:53 +02:00
|
|
|
) {
|
|
|
|
|
2016-12-07 15:20:41 +01:00
|
|
|
for (var property in matrix4) {
|
|
|
|
if (matrix4.hasOwnProperty(property)) {
|
|
|
|
this[property] = matrix4[property];
|
|
|
|
}
|
2016-10-14 12:32:53 +02:00
|
|
|
}
|
|
|
|
|
2016-12-07 15:20:41 +01:00
|
|
|
GameLib.D3.Utils.Extend(GameLib.D3.Matrix4, GameLib.D3.API.Matrix4);
|
|
|
|
|
|
|
|
this.graphics = graphics;
|
|
|
|
|
|
|
|
this.graphics.isNotThreeThrow();
|
|
|
|
|
|
|
|
this.parentObject = parentObject;
|
|
|
|
|
|
|
|
if (GameLib.D3.Utils.UndefinedOrNull(grain)) {
|
|
|
|
grain = 0.001;
|
2016-10-14 12:32:53 +02:00
|
|
|
}
|
2016-12-07 15:20:41 +01:00
|
|
|
this.grain = grain;
|
|
|
|
|
|
|
|
this.rows[0] = new GameLib.D3.Vector4(
|
|
|
|
this.graphics,
|
|
|
|
this,
|
|
|
|
this.rows[0],
|
|
|
|
grain
|
|
|
|
);
|
|
|
|
|
|
|
|
this.rows[1] = new GameLib.D3.Vector4(
|
|
|
|
this.graphics,
|
|
|
|
this,
|
|
|
|
this.rows[1],
|
|
|
|
grain
|
|
|
|
);
|
|
|
|
|
|
|
|
this.rows[2] = new GameLib.D3.Vector4(
|
|
|
|
this.graphics,
|
|
|
|
this,
|
|
|
|
this.rows[2],
|
|
|
|
grain
|
|
|
|
);
|
|
|
|
|
|
|
|
this.rows[3] = new GameLib.D3.Vector4(
|
|
|
|
this.graphics,
|
|
|
|
this,
|
|
|
|
this.rows[3],
|
|
|
|
grain
|
|
|
|
);
|
|
|
|
|
|
|
|
this.instance = this.createInstance();
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a matrix 4 instance (currently from graphics lib)
|
|
|
|
* @param update
|
|
|
|
*/
|
|
|
|
GameLib.D3.Matrix4.prototype.createInstance = function(update) {
|
|
|
|
|
|
|
|
var instance = null;
|
2016-10-14 12:32:53 +02:00
|
|
|
|
2016-12-07 15:20:41 +01:00
|
|
|
if (update) {
|
|
|
|
instance = this.instance;
|
2016-10-14 12:32:53 +02:00
|
|
|
}
|
|
|
|
|
2016-12-07 15:20:41 +01:00
|
|
|
if (!instance) {
|
|
|
|
instance = new THREE.Matrix4();
|
2016-10-14 12:32:53 +02:00
|
|
|
}
|
2016-12-07 15:20:41 +01:00
|
|
|
|
|
|
|
instance.set(
|
|
|
|
this.rows[0].x,
|
|
|
|
this.rows[0].y,
|
|
|
|
this.rows[0].z,
|
|
|
|
this.rows[0].w,
|
|
|
|
this.rows[1].x,
|
|
|
|
this.rows[1].y,
|
|
|
|
this.rows[1].z,
|
|
|
|
this.rows[1].w,
|
|
|
|
this.rows[2].x,
|
|
|
|
this.rows[2].y,
|
|
|
|
this.rows[2].z,
|
|
|
|
this.rows[2].w,
|
|
|
|
this.rows[3].x,
|
|
|
|
this.rows[3].y,
|
|
|
|
this.rows[3].z,
|
|
|
|
this.rows[3].w
|
|
|
|
);
|
|
|
|
|
|
|
|
return instance;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Updates this instance
|
|
|
|
*/
|
|
|
|
GameLib.D3.Matrix4.prototype.updateInstance = function() {
|
|
|
|
this.createInstance(true);
|
2016-10-14 12:32:53 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
GameLib.D3.Matrix4.prototype.lookAt = function (position, target, up) {
|
|
|
|
|
2016-12-07 15:20:41 +01:00
|
|
|
this.instance.lookAt(position.instance, target.instance, up.instance);
|
|
|
|
|
|
|
|
this.rows[0].x = this.instance.elements[0];
|
|
|
|
this.rows[0].y = this.instance.elements[1];
|
|
|
|
this.rows[0].z = this.instance.elements[2];
|
|
|
|
this.rows[0].w = this.instance.elements[3];
|
|
|
|
|
|
|
|
this.rows[1].x = this.instance.elements[4];
|
|
|
|
this.rows[1].y = this.instance.elements[5];
|
|
|
|
this.rows[1].z = this.instance.elements[6];
|
|
|
|
this.rows[1].w = this.instance.elements[7];
|
|
|
|
|
|
|
|
this.rows[2].x = this.instance.elements[8];
|
|
|
|
this.rows[2].y = this.instance.elements[9];
|
|
|
|
this.rows[2].z = this.instance.elements[10];
|
|
|
|
this.rows[2].w = this.instance.elements[11];
|
|
|
|
|
|
|
|
this.rows[3].x = this.instance.elements[12];
|
|
|
|
this.rows[3].y = this.instance.elements[13];
|
|
|
|
this.rows[3].z = this.instance.elements[14];
|
|
|
|
this.rows[3].w = this.instance.elements[15];
|
2016-12-08 19:43:16 +01:00
|
|
|
|
2016-10-14 12:32:53 +02:00
|
|
|
};
|