75 lines
2.3 KiB
JavaScript
75 lines
2.3 KiB
JavaScript
// Initialization
|
|
|
|
// class camera extends THREE.PerspectiveCamera
|
|
var ReverseCamera = function(arg1, arg2, arg3, arg4, position, target) {
|
|
ArrowCamera.apply(this, arguments);
|
|
}
|
|
ReverseCamera.prototype = Object.create(ArrowCamera.prototype);
|
|
ReverseCamera.prototype.constructor = ReverseCamera;
|
|
|
|
// Overload init
|
|
ReverseCamera.prototype.initExtremity = function() {
|
|
var geometry = new THREE.Geometry();
|
|
|
|
var direction = this.target.clone();
|
|
direction.sub(this.position);
|
|
direction.normalize();
|
|
|
|
var left = Tools.cross(direction, this.up);
|
|
var other = Tools.cross(direction, left);
|
|
|
|
left.normalize();
|
|
other.normalize();
|
|
left = Tools.mul(left, this.size / 2 );
|
|
other = Tools.mul(other, this.size / 2);
|
|
|
|
var pyramidCenter = Tools.diff(this.position, Tools.mul(direction,0.25))
|
|
geometry.vertices.push(
|
|
Tools.sum( Tools.sum( this.position, left), other),
|
|
Tools.diff(Tools.sum( this.position, other), left),
|
|
Tools.diff(Tools.diff(this.position, left), other),
|
|
Tools.sum( Tools.diff(this.position, other), left),
|
|
|
|
Tools.sum( Tools.sum( this.position, left), other),
|
|
Tools.diff(Tools.sum( this.position, other), left),
|
|
Tools.diff(Tools.diff(this.position, left), other),
|
|
Tools.sum( Tools.diff(this.position, other), left)
|
|
// Tools.diff(this.position, direction)
|
|
);
|
|
|
|
var lambda = 0.6;
|
|
for (var i = 0; i < 4; i++)
|
|
geometry.vertices[i] = Tools.mul(Tools.diff(geometry.vertices[i], Tools.mul(pyramidCenter,lambda)), 1/(1-lambda));
|
|
|
|
|
|
geometry.faces.push(new THREE.Face3(2,0,1), // new THREE.Face3(0,2,1),
|
|
new THREE.Face3(3,0,2), // new THREE.Face3(0,3,2)
|
|
|
|
new THREE.Face3(1,0,4),
|
|
new THREE.Face3(1,4,5),
|
|
|
|
new THREE.Face3(2,1,5),
|
|
new THREE.Face3(2,5,6),
|
|
|
|
new THREE.Face3(7,2,6),
|
|
new THREE.Face3(7,3,2),
|
|
|
|
new THREE.Face3(3,7,4),
|
|
new THREE.Face3(3,4,0)
|
|
|
|
);
|
|
|
|
geometry.computeFaceNormals();
|
|
|
|
var material = new THREE.MeshLambertMaterial({
|
|
color : 0x0000ff,
|
|
transparent : true,
|
|
opacity : 0.5,
|
|
side: THREE.FrontSide
|
|
});
|
|
|
|
this.mesh = new THREE.Mesh(geometry, material);
|
|
return this.mesh;
|
|
|
|
}
|