UNPKG

@awayjs/core

Version:
85 lines (84 loc) 3.44 kB
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 };