@awayjs/core
Version:
AwayJS core classes
85 lines (84 loc) • 3.44 kB
JavaScript
import { __extends } from "tslib";
import { Vector3D } from '../geom/Vector3D';
import { ProjectionEvent } from '../events/ProjectionEvent';
import { ProjectionBase } from '../projections/ProjectionBase';
var ObliqueNearPlaneProjection = /** @class */ (function (_super) {
__extends(ObliqueNearPlaneProjection, _super);
function ObliqueNearPlaneProjection(baseProjection, plane) {
var _this = _super.call(this) || this;
_this.baseProjection = baseProjection;
_this.plane = plane;
_this._onProjectionMatrixChangedDelegate = function (event) { return _this.onProjectionMatrixChanged(event); };
return _this;
}
Object.defineProperty(ObliqueNearPlaneProjection.prototype, "near", {
//@override
get: function () {
return this._baseProjection.near;
},
//@override
set: function (value) {
this._baseProjection.near = value;
},
enumerable: false,
configurable: true
});
Object.defineProperty(ObliqueNearPlaneProjection.prototype, "far", {
//@override
get: function () {
return this._baseProjection.far;
},
//@override
set: function (value) {
this._baseProjection.far = value;
},
enumerable: false,
configurable: true
});
Object.defineProperty(ObliqueNearPlaneProjection.prototype, "plane", {
get: function () {
return this._plane;
},
set: function (value) {
this._plane = value;
this._invalidateFrustumMatrix3D();
},
enumerable: false,
configurable: true
});
Object.defineProperty(ObliqueNearPlaneProjection.prototype, "baseProjection", {
set: function (value) {
if (this._baseProjection)
this._baseProjection.removeEventListener(ProjectionEvent.INVALIDATE_FRUSTUM_MATRIX3D, this._onProjectionMatrixChangedDelegate);
this._baseProjection = value;
if (this._baseProjection)
this._baseProjection.addEventListener(ProjectionEvent.INVALIDATE_FRUSTUM_MATRIX3D, this._onProjectionMatrixChangedDelegate);
this._invalidateFrustumMatrix3D();
},
enumerable: false,
configurable: true
});
ObliqueNearPlaneProjection.prototype.onProjectionMatrixChanged = function (event) {
this._invalidateFrustumMatrix3D();
};
//@override
ObliqueNearPlaneProjection.prototype._updateFrustumMatrix3D = function () {
_super.prototype._updateFrustumMatrix3D.call(this);
this._frustumMatrix3D.copyFrom(this._baseProjection.frustumMatrix3D);
var cx = this._plane.a;
var cy = this._plane.b;
var cz = this._plane.c;
var cw = -this._plane.d + .05;
var signX = cx >= 0 ? 1 : -1;
var signY = cy >= 0 ? 1 : -1;
var p = new Vector3D(signX, signY, 1, 1);
var inverse = this._frustumMatrix3D.clone();
inverse.invert();
var q = inverse.transformVector(p);
this._frustumMatrix3D.copyRowTo(3, p);
var a = (q.x * p.x + q.y * p.y + q.z * p.z + q.w * p.w) / (cx * q.x + cy * q.y + cz * q.z + cw * q.w);
this._frustumMatrix3D.copyRowFrom(2, new Vector3D(cx * a, cy * a, cz * a, cw * a));
};
return ObliqueNearPlaneProjection;
}(ProjectionBase));
export { ObliqueNearPlaneProjection };