@shapediver/viewer.rendering-engine.camera-engine 1.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +73 -0
- package/README.md +3 -0
- package/dist/implementation/CameraEngine.d.ts +31 -0
- package/dist/implementation/CameraEngine.d.ts.map +1 -0
- package/dist/implementation/CameraEngine.js +209 -0
- package/dist/implementation/CameraEngine.js.map +1 -0
- package/dist/implementation/camera/AbstractCamera.d.ts +104 -0
- package/dist/implementation/camera/AbstractCamera.d.ts.map +1 -0
- package/dist/implementation/camera/AbstractCamera.js +226 -0
- package/dist/implementation/camera/AbstractCamera.js.map +1 -0
- package/dist/implementation/camera/OrthographicCamera.d.ts +33 -0
- package/dist/implementation/camera/OrthographicCamera.d.ts.map +1 -0
- package/dist/implementation/camera/OrthographicCamera.js +176 -0
- package/dist/implementation/camera/OrthographicCamera.js.map +1 -0
- package/dist/implementation/camera/PerspectiveCamera.d.ts +20 -0
- package/dist/implementation/camera/PerspectiveCamera.d.ts.map +1 -0
- package/dist/implementation/camera/PerspectiveCamera.js +143 -0
- package/dist/implementation/camera/PerspectiveCamera.js.map +1 -0
- package/dist/implementation/controls/AbstractCameraControls.d.ts +65 -0
- package/dist/implementation/controls/AbstractCameraControls.d.ts.map +1 -0
- package/dist/implementation/controls/AbstractCameraControls.js +247 -0
- package/dist/implementation/controls/AbstractCameraControls.js.map +1 -0
- package/dist/implementation/controls/OrthographicCameraControls.d.ts +71 -0
- package/dist/implementation/controls/OrthographicCameraControls.d.ts.map +1 -0
- package/dist/implementation/controls/OrthographicCameraControls.js +98 -0
- package/dist/implementation/controls/OrthographicCameraControls.js.map +1 -0
- package/dist/implementation/controls/PerspectiveCameraControls.d.ts +143 -0
- package/dist/implementation/controls/PerspectiveCameraControls.d.ts.map +1 -0
- package/dist/implementation/controls/PerspectiveCameraControls.js +192 -0
- package/dist/implementation/controls/PerspectiveCameraControls.js.map +1 -0
- package/dist/implementation/controls/orthographic/CameraControlsEventDistribution.d.ts +25 -0
- package/dist/implementation/controls/orthographic/CameraControlsEventDistribution.d.ts.map +1 -0
- package/dist/implementation/controls/orthographic/CameraControlsEventDistribution.js +146 -0
- package/dist/implementation/controls/orthographic/CameraControlsEventDistribution.js.map +1 -0
- package/dist/implementation/controls/orthographic/CameraControlsLogic.d.ts +28 -0
- package/dist/implementation/controls/orthographic/CameraControlsLogic.d.ts.map +1 -0
- package/dist/implementation/controls/orthographic/CameraControlsLogic.js +234 -0
- package/dist/implementation/controls/orthographic/CameraControlsLogic.js.map +1 -0
- package/dist/implementation/controls/perspective/CameraControlsEventDistribution.d.ts +25 -0
- package/dist/implementation/controls/perspective/CameraControlsEventDistribution.d.ts.map +1 -0
- package/dist/implementation/controls/perspective/CameraControlsEventDistribution.js +159 -0
- package/dist/implementation/controls/perspective/CameraControlsEventDistribution.js.map +1 -0
- package/dist/implementation/controls/perspective/CameraControlsLogic.d.ts +36 -0
- package/dist/implementation/controls/perspective/CameraControlsLogic.d.ts.map +1 -0
- package/dist/implementation/controls/perspective/CameraControlsLogic.js +389 -0
- package/dist/implementation/controls/perspective/CameraControlsLogic.js.map +1 -0
- package/dist/implementation/interpolation/CameraInterpolationManager.d.ts +25 -0
- package/dist/implementation/interpolation/CameraInterpolationManager.d.ts.map +1 -0
- package/dist/implementation/interpolation/CameraInterpolationManager.js +134 -0
- package/dist/implementation/interpolation/CameraInterpolationManager.js.map +1 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraCylindricalInterpolation.d.ts +37 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraCylindricalInterpolation.d.ts.map +1 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraCylindricalInterpolation.js +50 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraCylindricalInterpolation.js.map +1 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraLinearInterpolation.d.ts +27 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraLinearInterpolation.d.ts.map +1 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraLinearInterpolation.js +30 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraLinearInterpolation.js.map +1 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraMultipleInterpolation.d.ts +36 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraMultipleInterpolation.d.ts.map +1 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraMultipleInterpolation.js +42 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraMultipleInterpolation.js.map +1 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraOrthographicInterpolation.d.ts +27 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraOrthographicInterpolation.d.ts.map +1 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraOrthographicInterpolation.js +30 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraOrthographicInterpolation.js.map +1 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraSphericalInterpolation.d.ts +33 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraSphericalInterpolation.d.ts.map +1 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraSphericalInterpolation.js +39 -0
- package/dist/implementation/interpolation/interpolationMethods/CameraSphericalInterpolation.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/ICameraEngine.d.ts +11 -0
- package/dist/interfaces/ICameraEngine.d.ts.map +1 -0
- package/dist/interfaces/ICameraEngine.js +9 -0
- package/dist/interfaces/ICameraEngine.js.map +1 -0
- package/dist/interfaces/camera/ICamera.d.ts +50 -0
- package/dist/interfaces/camera/ICamera.d.ts.map +1 -0
- package/dist/interfaces/camera/ICamera.js +3 -0
- package/dist/interfaces/camera/ICamera.js.map +1 -0
- package/dist/interfaces/camera/IOrthographicCamera.d.ts +15 -0
- package/dist/interfaces/camera/IOrthographicCamera.d.ts.map +1 -0
- package/dist/interfaces/camera/IOrthographicCamera.js +13 -0
- package/dist/interfaces/camera/IOrthographicCamera.js.map +1 -0
- package/dist/interfaces/camera/IPerspectiveCamera.d.ts +7 -0
- package/dist/interfaces/camera/IPerspectiveCamera.d.ts.map +1 -0
- package/dist/interfaces/camera/IPerspectiveCamera.js +3 -0
- package/dist/interfaces/camera/IPerspectiveCamera.js.map +1 -0
- package/dist/interfaces/controls/ICameraControls.d.ts +4 -0
- package/dist/interfaces/controls/ICameraControls.d.ts.map +1 -0
- package/dist/interfaces/controls/ICameraControls.js +3 -0
- package/dist/interfaces/controls/ICameraControls.js.map +1 -0
- package/dist/interfaces/controls/ICameraControlsEventDistribution.d.ts +5 -0
- package/dist/interfaces/controls/ICameraControlsEventDistribution.d.ts.map +1 -0
- package/dist/interfaces/controls/ICameraControlsEventDistribution.js +3 -0
- package/dist/interfaces/controls/ICameraControlsEventDistribution.js.map +1 -0
- package/dist/interfaces/controls/ICameraControlsLogic.d.ts +11 -0
- package/dist/interfaces/controls/ICameraControlsLogic.d.ts.map +1 -0
- package/dist/interfaces/controls/ICameraControlsLogic.js +3 -0
- package/dist/interfaces/controls/ICameraControlsLogic.js.map +1 -0
- package/dist/interfaces/controls/ICameraControlsUsage.d.ts +29 -0
- package/dist/interfaces/controls/ICameraControlsUsage.d.ts.map +1 -0
- package/dist/interfaces/controls/ICameraControlsUsage.js +3 -0
- package/dist/interfaces/controls/ICameraControlsUsage.js.map +1 -0
- package/dist/interfaces/controls/IOrthographicCameraControls.d.ts +30 -0
- package/dist/interfaces/controls/IOrthographicCameraControls.d.ts.map +1 -0
- package/dist/interfaces/controls/IOrthographicCameraControls.js +3 -0
- package/dist/interfaces/controls/IOrthographicCameraControls.js.map +1 -0
- package/dist/interfaces/controls/IPerspectiveCameraControls.d.ts +61 -0
- package/dist/interfaces/controls/IPerspectiveCameraControls.d.ts.map +1 -0
- package/dist/interfaces/controls/IPerspectiveCameraControls.js +3 -0
- package/dist/interfaces/controls/IPerspectiveCameraControls.js.map +1 -0
- package/dist/interfaces/interpolation/ICameraInterpolation.d.ts +12 -0
- package/dist/interfaces/interpolation/ICameraInterpolation.d.ts.map +1 -0
- package/dist/interfaces/interpolation/ICameraInterpolation.js +3 -0
- package/dist/interfaces/interpolation/ICameraInterpolation.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
22
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
23
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
24
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
25
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
26
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
27
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.AbstractCamera = void 0;
|
|
32
|
+
const detectIt = __importStar(require("detect-it"));
|
|
33
|
+
const gl_matrix_1 = require("gl-matrix");
|
|
34
|
+
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
|
|
35
|
+
const tsyringe_1 = require("tsyringe");
|
|
36
|
+
const viewer_shared_math_1 = require("@shapediver/viewer.shared.math");
|
|
37
|
+
class AbstractCamera {
|
|
38
|
+
constructor(_viewerId, _id, _canvas, _type) {
|
|
39
|
+
this._viewerId = _viewerId;
|
|
40
|
+
this._id = _id;
|
|
41
|
+
this._canvas = _canvas;
|
|
42
|
+
this._type = _type;
|
|
43
|
+
this._autoAdjust = false;
|
|
44
|
+
this._cameraMovementDuration = 800;
|
|
45
|
+
this._defaultPosition = gl_matrix_1.vec3.create();
|
|
46
|
+
this._defaultTarget = gl_matrix_1.vec3.create();
|
|
47
|
+
this._enableCameraControls = true;
|
|
48
|
+
this._far = 1000;
|
|
49
|
+
this._near = 1;
|
|
50
|
+
this._revertAtMouseUp = false;
|
|
51
|
+
this._revertAtMouseUpDuration = 800;
|
|
52
|
+
this._zoomExtentsFactor = 1;
|
|
53
|
+
this._eventEngine = tsyringe_1.container.resolve(viewer_shared_services_1.EventEngine);
|
|
54
|
+
this._settingsEngine = tsyringe_1.container.resolve(viewer_shared_services_1.SettingsEngine);
|
|
55
|
+
this._stateEngine = tsyringe_1.container.resolve(viewer_shared_services_1.StateEngine);
|
|
56
|
+
this._boundingBox = new viewer_shared_math_1.Box();
|
|
57
|
+
this._position = gl_matrix_1.vec3.create();
|
|
58
|
+
this._target = gl_matrix_1.vec3.create();
|
|
59
|
+
this._eventEngine.addListener(viewer_shared_services_1.EVENTTYPE.SESSION.SESSION_CUSTOMIZED, (e) => {
|
|
60
|
+
const viewerEvent = e;
|
|
61
|
+
if (viewerEvent.viewerId === this._viewerId)
|
|
62
|
+
if (this._autoAdjust === true)
|
|
63
|
+
this.zoomTo();
|
|
64
|
+
});
|
|
65
|
+
const revert = () => {
|
|
66
|
+
if (this._revertAtMouseUp === true)
|
|
67
|
+
this.reset({ duration: this._revertAtMouseUpDuration });
|
|
68
|
+
};
|
|
69
|
+
this._canvas.addEventListener("mouseup", () => revert(), detectIt.supportsPassiveEvents ? { capture: false, passive: true } : false);
|
|
70
|
+
this._canvas.addEventListener("mouseout", () => revert(), detectIt.supportsPassiveEvents ? { capture: false, passive: true } : false);
|
|
71
|
+
this._canvas.addEventListener("touchend", () => revert(), detectIt.supportsPassiveEvents ? { capture: false, passive: true } : false);
|
|
72
|
+
let zoomResizeTimeout;
|
|
73
|
+
let mouseWheelEvent = /Firefox/i.test(navigator.userAgent) ? "DOMMouseScroll" : "mousewheel";
|
|
74
|
+
this._canvas.addEventListener(mouseWheelEvent, () => {
|
|
75
|
+
clearTimeout(zoomResizeTimeout);
|
|
76
|
+
zoomResizeTimeout = setTimeout(revert, 300);
|
|
77
|
+
}, detectIt.supportsPassiveEvents ? { capture: false, passive: true } : false);
|
|
78
|
+
}
|
|
79
|
+
get autoAdjust() {
|
|
80
|
+
return this._autoAdjust;
|
|
81
|
+
}
|
|
82
|
+
set autoAdjust(value) {
|
|
83
|
+
this._autoAdjust = value;
|
|
84
|
+
}
|
|
85
|
+
set boundingBox(value) {
|
|
86
|
+
this._boundingBox = value;
|
|
87
|
+
}
|
|
88
|
+
get cameraMovementDuration() {
|
|
89
|
+
return this._cameraMovementDuration;
|
|
90
|
+
}
|
|
91
|
+
set cameraMovementDuration(value) {
|
|
92
|
+
this._cameraMovementDuration = value;
|
|
93
|
+
}
|
|
94
|
+
get controls() {
|
|
95
|
+
return this._controls;
|
|
96
|
+
}
|
|
97
|
+
get defaultPosition() {
|
|
98
|
+
return this._defaultPosition;
|
|
99
|
+
}
|
|
100
|
+
set defaultPosition(value) {
|
|
101
|
+
this._defaultPosition = value;
|
|
102
|
+
}
|
|
103
|
+
get defaultTarget() {
|
|
104
|
+
return this._defaultTarget;
|
|
105
|
+
}
|
|
106
|
+
set defaultTarget(value) {
|
|
107
|
+
this._defaultTarget = value;
|
|
108
|
+
}
|
|
109
|
+
get enableCameraControls() {
|
|
110
|
+
return this._enableCameraControls;
|
|
111
|
+
}
|
|
112
|
+
set enableCameraControls(value) {
|
|
113
|
+
this._enableCameraControls = value;
|
|
114
|
+
}
|
|
115
|
+
get far() {
|
|
116
|
+
return this._far;
|
|
117
|
+
}
|
|
118
|
+
set far(value) {
|
|
119
|
+
this._far = value;
|
|
120
|
+
}
|
|
121
|
+
get id() {
|
|
122
|
+
return this._id;
|
|
123
|
+
}
|
|
124
|
+
get near() {
|
|
125
|
+
return this._near;
|
|
126
|
+
}
|
|
127
|
+
set near(value) {
|
|
128
|
+
this._near = value;
|
|
129
|
+
}
|
|
130
|
+
get order() {
|
|
131
|
+
return this._order;
|
|
132
|
+
}
|
|
133
|
+
set order(value) {
|
|
134
|
+
this._order = value;
|
|
135
|
+
}
|
|
136
|
+
get position() {
|
|
137
|
+
return this._position;
|
|
138
|
+
}
|
|
139
|
+
set position(value) {
|
|
140
|
+
this._position = value;
|
|
141
|
+
this._controls.position = value;
|
|
142
|
+
}
|
|
143
|
+
get revertAtMouseUp() {
|
|
144
|
+
return this._revertAtMouseUp;
|
|
145
|
+
}
|
|
146
|
+
set revertAtMouseUp(value) {
|
|
147
|
+
this._revertAtMouseUp = value;
|
|
148
|
+
}
|
|
149
|
+
get revertAtMouseUpDuration() {
|
|
150
|
+
return this._revertAtMouseUpDuration;
|
|
151
|
+
}
|
|
152
|
+
set revertAtMouseUpDuration(value) {
|
|
153
|
+
this._revertAtMouseUpDuration = value;
|
|
154
|
+
}
|
|
155
|
+
get target() {
|
|
156
|
+
return this._target;
|
|
157
|
+
}
|
|
158
|
+
set target(value) {
|
|
159
|
+
this._target = value;
|
|
160
|
+
this._controls.target = value;
|
|
161
|
+
}
|
|
162
|
+
get type() {
|
|
163
|
+
return this._type;
|
|
164
|
+
}
|
|
165
|
+
get zoomExtentsFactor() {
|
|
166
|
+
return this._zoomExtentsFactor;
|
|
167
|
+
}
|
|
168
|
+
set zoomExtentsFactor(value) {
|
|
169
|
+
this._zoomExtentsFactor = value;
|
|
170
|
+
}
|
|
171
|
+
animate(path, options) {
|
|
172
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
173
|
+
if (path.length === 0)
|
|
174
|
+
return Promise.resolve(false);
|
|
175
|
+
if (!this._controls.isWithinRestrictions(path[path.length - 1].position, path[path.length - 1].target))
|
|
176
|
+
return Promise.resolve(false);
|
|
177
|
+
if (!options)
|
|
178
|
+
options = {};
|
|
179
|
+
options.duration = options.duration >= 0 ? options.duration : this.cameraMovementDuration;
|
|
180
|
+
const res = yield this._controls.animate(path, options);
|
|
181
|
+
if (res) {
|
|
182
|
+
this._position = this._controls.position;
|
|
183
|
+
this._target = this._controls.target;
|
|
184
|
+
}
|
|
185
|
+
return res;
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
reset(options) {
|
|
189
|
+
if ((this.defaultPosition[0] === 0 && this.defaultPosition[1] === 0 && this.defaultPosition[2] === 0) && (this.defaultTarget[0] === 0 && this.defaultTarget[1] === 0 && this.defaultTarget[2] === 0)) {
|
|
190
|
+
return this.zoomTo(undefined, options);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
return this.set(gl_matrix_1.vec3.clone(this.defaultPosition), gl_matrix_1.vec3.clone(this.defaultTarget), options);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
set(position, target, options) {
|
|
197
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
198
|
+
if (!this._controls.isWithinRestrictions(position, target))
|
|
199
|
+
return Promise.resolve(false);
|
|
200
|
+
if (!options)
|
|
201
|
+
options = {};
|
|
202
|
+
options.duration = options.duration >= 0 ? options.duration : this.cameraMovementDuration;
|
|
203
|
+
const res = yield this._controls.animate([
|
|
204
|
+
{ position: gl_matrix_1.vec3.clone(this.position), target: gl_matrix_1.vec3.clone(this.target) },
|
|
205
|
+
{ position, target }
|
|
206
|
+
], options);
|
|
207
|
+
if (res) {
|
|
208
|
+
this._position = this._controls.position;
|
|
209
|
+
this._target = this._controls.target;
|
|
210
|
+
}
|
|
211
|
+
return res;
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
update(time) {
|
|
215
|
+
const { position, target } = this._controls.update(time);
|
|
216
|
+
this.position = gl_matrix_1.vec3.clone(position);
|
|
217
|
+
this.target = gl_matrix_1.vec3.clone(target);
|
|
218
|
+
return { position, target };
|
|
219
|
+
}
|
|
220
|
+
zoomTo(zoomTarget, options) {
|
|
221
|
+
const { position, target } = this.getZoomPositionAndTarget(zoomTarget);
|
|
222
|
+
return this.set(position, target, options);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
exports.AbstractCamera = AbstractCamera;
|
|
226
|
+
//# sourceMappingURL=AbstractCamera.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractCamera.js","sourceRoot":"","sources":["../../../src/implementation/camera/AbstractCamera.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { vec2, vec3 } from 'gl-matrix';
|
|
2
|
+
import { Box } from '@shapediver/viewer.shared.math';
|
|
3
|
+
import { AbstractCamera } from './AbstractCamera';
|
|
4
|
+
import { ORTHOGRAPHIC_CAMERA_DIRECTION } from '../../interfaces/camera/IOrthographicCamera';
|
|
5
|
+
export declare class OrthographicCamera extends AbstractCamera {
|
|
6
|
+
private readonly _converter;
|
|
7
|
+
private _bottom;
|
|
8
|
+
private _left;
|
|
9
|
+
private _right;
|
|
10
|
+
private _top;
|
|
11
|
+
private _up;
|
|
12
|
+
private _direction;
|
|
13
|
+
constructor(viewerId: string, id: string, canvas: HTMLCanvasElement);
|
|
14
|
+
get bottom(): number;
|
|
15
|
+
set bottom(value: number);
|
|
16
|
+
get direction(): ORTHOGRAPHIC_CAMERA_DIRECTION;
|
|
17
|
+
set direction(value: ORTHOGRAPHIC_CAMERA_DIRECTION);
|
|
18
|
+
get left(): number;
|
|
19
|
+
set left(value: number);
|
|
20
|
+
get right(): number;
|
|
21
|
+
set right(value: number);
|
|
22
|
+
get top(): number;
|
|
23
|
+
set top(value: number);
|
|
24
|
+
get up(): vec3;
|
|
25
|
+
set up(value: vec3);
|
|
26
|
+
applySettings(): void;
|
|
27
|
+
getZoomPositionAndTarget(zoomTarget?: Box): {
|
|
28
|
+
position: vec3;
|
|
29
|
+
target: vec3;
|
|
30
|
+
};
|
|
31
|
+
project(pos: vec3): vec2;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=OrthographicCamera.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrthographicCamera.d.ts","sourceRoot":"","sources":["../../../src/implementation/camera/OrthographicCamera.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAA;AAGpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,6BAA6B,EAAE,MAAM,6CAA6C,CAAA;AAG3F,qBAAa,kBAAmB,SAAQ,cAAc;IAGnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsD;IAEjF,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,GAAG,CAAkC;IAC7C,OAAO,CAAC,UAAU,CAAoE;gBAM1E,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB;IASnE,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED,IAAW,MAAM,CAAC,KAAK,EAAE,MAAM,EAE9B;IAED,IAAW,SAAS,IAAI,6BAA6B,CAEpD;IAED,IAAW,SAAS,CAAC,KAAK,EAAE,6BAA6B,EA8BxD;IAED,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,IAAW,IAAI,CAAC,KAAK,EAAE,MAAM,EAE5B;IAED,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,EAE7B;IAED,IAAW,GAAG,IAAI,MAAM,CAEvB;IAED,IAAW,GAAG,CAAC,KAAK,EAAE,MAAM,EAE3B;IAED,IAAW,EAAE,IAAI,IAAI,CAEpB;IAED,IAAW,EAAE,CAAC,KAAK,EAAE,IAAI,EAExB;IAMM,aAAa;IA6Bb,wBAAwB,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,IAAI,CAAC;KAAE;IAsD7E,OAAO,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI;CASjC"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.OrthographicCamera = void 0;
|
|
13
|
+
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
|
|
14
|
+
const tsyringe_1 = require("tsyringe");
|
|
15
|
+
const gl_matrix_1 = require("gl-matrix");
|
|
16
|
+
const ICameraEngine_1 = require("../../interfaces/ICameraEngine");
|
|
17
|
+
const AbstractCamera_1 = require("./AbstractCamera");
|
|
18
|
+
const OrthographicCameraControls_1 = require("../controls/OrthographicCameraControls");
|
|
19
|
+
const IOrthographicCamera_1 = require("../../interfaces/camera/IOrthographicCamera");
|
|
20
|
+
class OrthographicCamera extends AbstractCamera_1.AbstractCamera {
|
|
21
|
+
constructor(viewerId, id, canvas) {
|
|
22
|
+
super(viewerId, id, canvas, ICameraEngine_1.CAMERATYPE.ORTHOGRAPHIC);
|
|
23
|
+
this._converter = tsyringe_1.container.resolve(viewer_shared_services_1.Converter);
|
|
24
|
+
this._bottom = 100;
|
|
25
|
+
this._left = 100;
|
|
26
|
+
this._right = 100;
|
|
27
|
+
this._top = 100;
|
|
28
|
+
this._up = gl_matrix_1.vec3.fromValues(0, 1, 0);
|
|
29
|
+
this._direction = IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.TOP;
|
|
30
|
+
this._controls = new OrthographicCameraControls_1.OrthographicCameraControls(viewerId, this, canvas, true);
|
|
31
|
+
}
|
|
32
|
+
get bottom() {
|
|
33
|
+
return this._bottom;
|
|
34
|
+
}
|
|
35
|
+
set bottom(value) {
|
|
36
|
+
this._bottom = value;
|
|
37
|
+
}
|
|
38
|
+
get direction() {
|
|
39
|
+
return this._direction;
|
|
40
|
+
}
|
|
41
|
+
set direction(value) {
|
|
42
|
+
const changedDirection = this._direction !== value;
|
|
43
|
+
this._direction = value;
|
|
44
|
+
switch (this._direction) {
|
|
45
|
+
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.TOP:
|
|
46
|
+
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.BOTTOM:
|
|
47
|
+
this.up = gl_matrix_1.vec3.fromValues(0, 1, 0);
|
|
48
|
+
break;
|
|
49
|
+
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.RIGHT:
|
|
50
|
+
this.up = gl_matrix_1.vec3.fromValues(0, 0, 1);
|
|
51
|
+
break;
|
|
52
|
+
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.LEFT:
|
|
53
|
+
this.up = gl_matrix_1.vec3.fromValues(0, 0, 1);
|
|
54
|
+
break;
|
|
55
|
+
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.BACK:
|
|
56
|
+
this.up = gl_matrix_1.vec3.fromValues(0, 0, 1);
|
|
57
|
+
break;
|
|
58
|
+
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.FRONT:
|
|
59
|
+
this.up = gl_matrix_1.vec3.fromValues(0, 0, 1);
|
|
60
|
+
break;
|
|
61
|
+
default:
|
|
62
|
+
this.up = gl_matrix_1.vec3.fromValues(0, -1, 0);
|
|
63
|
+
}
|
|
64
|
+
if (changedDirection) {
|
|
65
|
+
const { position, target } = this.getZoomPositionAndTarget(undefined);
|
|
66
|
+
this.defaultPosition = gl_matrix_1.vec3.clone(position);
|
|
67
|
+
this.defaultTarget = gl_matrix_1.vec3.clone(target);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
get left() {
|
|
71
|
+
return this._left;
|
|
72
|
+
}
|
|
73
|
+
set left(value) {
|
|
74
|
+
this._left = value;
|
|
75
|
+
}
|
|
76
|
+
get right() {
|
|
77
|
+
return this._right;
|
|
78
|
+
}
|
|
79
|
+
set right(value) {
|
|
80
|
+
this._right = value;
|
|
81
|
+
}
|
|
82
|
+
get top() {
|
|
83
|
+
return this._top;
|
|
84
|
+
}
|
|
85
|
+
set top(value) {
|
|
86
|
+
this._top = value;
|
|
87
|
+
}
|
|
88
|
+
get up() {
|
|
89
|
+
return this._up;
|
|
90
|
+
}
|
|
91
|
+
set up(value) {
|
|
92
|
+
this._up = value;
|
|
93
|
+
}
|
|
94
|
+
applySettings() {
|
|
95
|
+
const cameraSetting = this._settingsEngine.camera.cameras[this.id];
|
|
96
|
+
if (cameraSetting) {
|
|
97
|
+
this.autoAdjust = cameraSetting.autoAdjust;
|
|
98
|
+
this.cameraMovementDuration = cameraSetting.cameraMovementDuration;
|
|
99
|
+
this.enableCameraControls = cameraSetting.enableCameraControls;
|
|
100
|
+
this.revertAtMouseUp = cameraSetting.revertAtMouseUp;
|
|
101
|
+
this.revertAtMouseUpDuration = cameraSetting.revertAtMouseUpDuration;
|
|
102
|
+
this.zoomExtentsFactor = cameraSetting.zoomExtentsFactor;
|
|
103
|
+
let position = this._converter.toVec3(cameraSetting.position);
|
|
104
|
+
let target = this._converter.toVec3(cameraSetting.target);
|
|
105
|
+
this.defaultPosition = gl_matrix_1.vec3.clone(position);
|
|
106
|
+
this.defaultTarget = gl_matrix_1.vec3.clone(target);
|
|
107
|
+
this.position = position;
|
|
108
|
+
this.target = target;
|
|
109
|
+
}
|
|
110
|
+
if (this.position[0] === this.target[0] && this.position[1] === this.target[1] && this.position[2] === this.target[2]) {
|
|
111
|
+
this._stateEngine.boundingBoxCreated.then(() => __awaiter(this, void 0, void 0, function* () {
|
|
112
|
+
yield this.zoomTo(undefined, { duration: 0 });
|
|
113
|
+
this.defaultPosition = gl_matrix_1.vec3.clone(this._controls.position);
|
|
114
|
+
this.defaultTarget = gl_matrix_1.vec3.clone(this._controls.target);
|
|
115
|
+
}));
|
|
116
|
+
}
|
|
117
|
+
this._controls.applySettings();
|
|
118
|
+
}
|
|
119
|
+
getZoomPositionAndTarget(zoomTarget) {
|
|
120
|
+
let box;
|
|
121
|
+
if (!zoomTarget) {
|
|
122
|
+
box = this._boundingBox.clone();
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
box = zoomTarget.clone();
|
|
126
|
+
}
|
|
127
|
+
const factor = 2 * box.boundingSphere.radius * this.zoomExtentsFactor;
|
|
128
|
+
const center = gl_matrix_1.vec3.clone(box.boundingSphere.center);
|
|
129
|
+
switch (this._direction) {
|
|
130
|
+
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.TOP:
|
|
131
|
+
return {
|
|
132
|
+
position: gl_matrix_1.vec3.fromValues(center[0], center[1], center[2] + factor),
|
|
133
|
+
target: gl_matrix_1.vec3.clone(center)
|
|
134
|
+
};
|
|
135
|
+
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.BOTTOM:
|
|
136
|
+
return {
|
|
137
|
+
position: gl_matrix_1.vec3.fromValues(center[0], center[1], center[2] - factor),
|
|
138
|
+
target: gl_matrix_1.vec3.clone(center)
|
|
139
|
+
};
|
|
140
|
+
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.RIGHT:
|
|
141
|
+
return {
|
|
142
|
+
position: gl_matrix_1.vec3.fromValues(center[0] + factor, center[1], center[2]),
|
|
143
|
+
target: gl_matrix_1.vec3.clone(center)
|
|
144
|
+
};
|
|
145
|
+
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.LEFT:
|
|
146
|
+
return {
|
|
147
|
+
position: gl_matrix_1.vec3.fromValues(center[0] - factor, center[1], center[2]),
|
|
148
|
+
target: gl_matrix_1.vec3.clone(center)
|
|
149
|
+
};
|
|
150
|
+
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.BACK:
|
|
151
|
+
return {
|
|
152
|
+
position: gl_matrix_1.vec3.fromValues(center[0], center[1] + factor, center[2]),
|
|
153
|
+
target: gl_matrix_1.vec3.clone(center)
|
|
154
|
+
};
|
|
155
|
+
case IOrthographicCamera_1.ORTHOGRAPHIC_CAMERA_DIRECTION.FRONT:
|
|
156
|
+
return {
|
|
157
|
+
position: gl_matrix_1.vec3.fromValues(center[0], center[1] - factor, center[2]),
|
|
158
|
+
target: gl_matrix_1.vec3.clone(center)
|
|
159
|
+
};
|
|
160
|
+
default:
|
|
161
|
+
return {
|
|
162
|
+
position: gl_matrix_1.vec3.fromValues(center[0], center[1], center[2] + factor),
|
|
163
|
+
target: gl_matrix_1.vec3.clone(center)
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
project(pos) {
|
|
168
|
+
const m = gl_matrix_1.mat4.targetTo(gl_matrix_1.mat4.create(), this.position, this.target, this.up);
|
|
169
|
+
const p = gl_matrix_1.mat4.ortho(gl_matrix_1.mat4.create(), this.left, this.right, this.bottom, this.top, this.near, this.far);
|
|
170
|
+
gl_matrix_1.vec3.transformMat4(pos, pos, gl_matrix_1.mat4.invert(m, m));
|
|
171
|
+
gl_matrix_1.vec3.transformMat4(pos, pos, p);
|
|
172
|
+
return gl_matrix_1.vec2.fromValues(pos[0], pos[1]);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
exports.OrthographicCamera = OrthographicCamera;
|
|
176
|
+
//# sourceMappingURL=OrthographicCamera.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrthographicCamera.js","sourceRoot":"","sources":["../../../src/implementation/camera/OrthographicCamera.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { vec2, vec3 } from 'gl-matrix';
|
|
2
|
+
import { Box } from '@shapediver/viewer.shared.math';
|
|
3
|
+
import { AbstractCamera } from './AbstractCamera';
|
|
4
|
+
export declare class PerspectiveCamera extends AbstractCamera {
|
|
5
|
+
private readonly _converter;
|
|
6
|
+
private _aspect;
|
|
7
|
+
private _fov;
|
|
8
|
+
constructor(viewerId: string, id: string, canvas: HTMLCanvasElement);
|
|
9
|
+
get aspect(): number | undefined;
|
|
10
|
+
set aspect(value: number | undefined);
|
|
11
|
+
get fov(): number;
|
|
12
|
+
set fov(value: number);
|
|
13
|
+
applySettings(): void;
|
|
14
|
+
getZoomPositionAndTarget(zoomTarget?: Box): {
|
|
15
|
+
position: vec3;
|
|
16
|
+
target: vec3;
|
|
17
|
+
};
|
|
18
|
+
project(pos: vec3, position?: vec3, target?: vec3): vec2;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=PerspectiveCamera.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PerspectiveCamera.d.ts","sourceRoot":"","sources":["../../../src/implementation/camera/PerspectiveCamera.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,GAAG,EAAS,MAAM,gCAAgC,CAAA;AAG3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAKjD,qBAAa,iBAAkB,SAAQ,cAAc;IAGnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsD;IAEjF,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,IAAI,CAAc;gBAMd,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB;IASnE,IAAW,MAAM,IAAI,MAAM,GAAE,SAAS,CAErC;IAED,IAAW,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAE1C;IAED,IAAW,GAAG,IAAI,MAAM,CAEvB;IAED,IAAW,GAAG,CAAC,KAAK,EAAE,MAAM,EAE3B;IAMM,aAAa;IA8Bb,wBAAwB,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,IAAI,CAAA;KAAE;IA2F5E,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,OAAgB,EAAE,MAAM,OAAc,GAAG,IAAI;CAUhF"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.PerspectiveCamera = void 0;
|
|
13
|
+
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
|
|
14
|
+
const tsyringe_1 = require("tsyringe");
|
|
15
|
+
const gl_matrix_1 = require("gl-matrix");
|
|
16
|
+
const viewer_shared_math_1 = require("@shapediver/viewer.shared.math");
|
|
17
|
+
const ICameraEngine_1 = require("../../interfaces/ICameraEngine");
|
|
18
|
+
const AbstractCamera_1 = require("./AbstractCamera");
|
|
19
|
+
const PerspectiveCameraControls_1 = require("../controls/PerspectiveCameraControls");
|
|
20
|
+
class PerspectiveCamera extends AbstractCamera_1.AbstractCamera {
|
|
21
|
+
constructor(viewerId, id, canvas) {
|
|
22
|
+
super(viewerId, id, canvas, ICameraEngine_1.CAMERATYPE.PERSPECTIVE);
|
|
23
|
+
this._converter = tsyringe_1.container.resolve(viewer_shared_services_1.Converter);
|
|
24
|
+
this._fov = 60;
|
|
25
|
+
this._controls = new PerspectiveCameraControls_1.PerspectiveCameraControls(viewerId, this, canvas, true);
|
|
26
|
+
}
|
|
27
|
+
get aspect() {
|
|
28
|
+
return this._aspect;
|
|
29
|
+
}
|
|
30
|
+
set aspect(value) {
|
|
31
|
+
this._aspect = value;
|
|
32
|
+
}
|
|
33
|
+
get fov() {
|
|
34
|
+
return this._fov;
|
|
35
|
+
}
|
|
36
|
+
set fov(value) {
|
|
37
|
+
this._fov = value;
|
|
38
|
+
}
|
|
39
|
+
applySettings() {
|
|
40
|
+
const cameraSetting = this._settingsEngine.camera.cameras[this.id];
|
|
41
|
+
if (cameraSetting) {
|
|
42
|
+
this.autoAdjust = cameraSetting.autoAdjust;
|
|
43
|
+
this.cameraMovementDuration = cameraSetting.cameraMovementDuration;
|
|
44
|
+
this.enableCameraControls = cameraSetting.enableCameraControls;
|
|
45
|
+
this.revertAtMouseUp = cameraSetting.revertAtMouseUp;
|
|
46
|
+
this.revertAtMouseUpDuration = cameraSetting.revertAtMouseUpDuration;
|
|
47
|
+
this.zoomExtentsFactor = cameraSetting.zoomExtentsFactor;
|
|
48
|
+
let position = this._converter.toVec3(cameraSetting.position);
|
|
49
|
+
let target = this._converter.toVec3(cameraSetting.target);
|
|
50
|
+
this.defaultPosition = gl_matrix_1.vec3.clone(position);
|
|
51
|
+
this.defaultTarget = gl_matrix_1.vec3.clone(target);
|
|
52
|
+
this.position = position;
|
|
53
|
+
this.target = target;
|
|
54
|
+
this.fov = cameraSetting.fov;
|
|
55
|
+
}
|
|
56
|
+
if (this.position[0] === this.target[0] && this.position[1] === this.target[1] && this.position[2] === this.target[2]) {
|
|
57
|
+
this._stateEngine.boundingBoxCreated.then(() => __awaiter(this, void 0, void 0, function* () {
|
|
58
|
+
yield this.zoomTo(undefined, { duration: 0 });
|
|
59
|
+
this.defaultPosition = gl_matrix_1.vec3.clone(this._controls.position);
|
|
60
|
+
this.defaultTarget = gl_matrix_1.vec3.clone(this._controls.target);
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
this._controls.applySettings();
|
|
64
|
+
}
|
|
65
|
+
getZoomPositionAndTarget(zoomTarget) {
|
|
66
|
+
let box;
|
|
67
|
+
if (!zoomTarget) {
|
|
68
|
+
box = this._boundingBox.clone();
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
box = zoomTarget.clone();
|
|
72
|
+
}
|
|
73
|
+
if (box.isEmpty())
|
|
74
|
+
return { position: gl_matrix_1.vec3.create(), target: gl_matrix_1.vec3.create() };
|
|
75
|
+
const samePosition = this.position[0] === this.target[0] && this.position[1] === this.target[1] && this.position[2] === this.target[2];
|
|
76
|
+
let target = gl_matrix_1.vec3.fromValues((box.max[0] + box.min[0]) / 2, (box.max[1] + box.min[1]) / 2, (box.max[2] + box.min[2]) / 2);
|
|
77
|
+
if (this.position[0] === this.target[0] && this.position[1] === this.target[1] && this.position[2] === this.target[2])
|
|
78
|
+
this.position = gl_matrix_1.vec3.fromValues(target[0], target[1] - 7.5, target[2] + 5);
|
|
79
|
+
const boxDir = gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), box.max, target);
|
|
80
|
+
gl_matrix_1.vec3.multiply(boxDir, boxDir, samePosition ? gl_matrix_1.vec3.fromValues(2, 2, 2) : gl_matrix_1.vec3.fromValues(this.zoomExtentsFactor, this.zoomExtentsFactor, this.zoomExtentsFactor));
|
|
81
|
+
box = new viewer_shared_math_1.Box(gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), target, boxDir), gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), target, boxDir));
|
|
82
|
+
const direction = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), target, this.position));
|
|
83
|
+
let cross = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.cross(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.fromValues(0, 0, 1), direction));
|
|
84
|
+
let up = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.cross(gl_matrix_1.vec3.create(), cross, direction));
|
|
85
|
+
let position = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), target, gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), direction, gl_matrix_1.vec3.fromValues(-0.00000001, -0.00000001, -0.00000001)));
|
|
86
|
+
let points = [];
|
|
87
|
+
points.push(gl_matrix_1.vec3.fromValues(box.min[0], box.min[1], box.min[2]));
|
|
88
|
+
points.push(gl_matrix_1.vec3.fromValues(box.min[0], box.min[1], box.max[2]));
|
|
89
|
+
points.push(gl_matrix_1.vec3.fromValues(box.min[0], box.max[1], box.min[2]));
|
|
90
|
+
points.push(gl_matrix_1.vec3.fromValues(box.min[0], box.max[1], box.max[2]));
|
|
91
|
+
points.push(gl_matrix_1.vec3.fromValues(box.max[0], box.min[1], box.min[2]));
|
|
92
|
+
points.push(gl_matrix_1.vec3.fromValues(box.max[0], box.min[1], box.max[2]));
|
|
93
|
+
points.push(gl_matrix_1.vec3.fromValues(box.max[0], box.max[1], box.min[2]));
|
|
94
|
+
points.push(gl_matrix_1.vec3.fromValues(box.max[0], box.max[1], box.max[2]));
|
|
95
|
+
let fovDown = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.transformQuat(gl_matrix_1.vec3.create(), direction, gl_matrix_1.quat.setAxisAngle(gl_matrix_1.quat.create(), cross, (this.fov / 2) * (Math.PI / 180))));
|
|
96
|
+
let fovUp = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.transformQuat(gl_matrix_1.vec3.create(), direction, gl_matrix_1.quat.setAxisAngle(gl_matrix_1.quat.create(), cross, -(this.fov / 2) * (Math.PI / 180))));
|
|
97
|
+
const aspect = this.aspect || 1.5;
|
|
98
|
+
let hFoV = 2 * Math.atan(Math.tan(this.fov * Math.PI / 180 / 2) * aspect);
|
|
99
|
+
let fovRight = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.transformQuat(gl_matrix_1.vec3.create(), direction, gl_matrix_1.quat.setAxisAngle(gl_matrix_1.quat.create(), up, hFoV / 2)));
|
|
100
|
+
let fovLeft = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.transformQuat(gl_matrix_1.vec3.create(), direction, gl_matrix_1.quat.setAxisAngle(gl_matrix_1.quat.create(), up, -hFoV / 2)));
|
|
101
|
+
let planeCross = new viewer_shared_math_1.Plane(gl_matrix_1.vec3.clone(cross), 0);
|
|
102
|
+
planeCross.setFromNormalAndCoplanarPoint(gl_matrix_1.vec3.clone(cross), gl_matrix_1.vec3.clone(target));
|
|
103
|
+
let planeUp = new viewer_shared_math_1.Plane(gl_matrix_1.vec3.fromValues(0, 0, 1), 0);
|
|
104
|
+
planeUp.setFromNormalAndCoplanarPoint(gl_matrix_1.vec3.clone(up), gl_matrix_1.vec3.clone(target));
|
|
105
|
+
let distanceCamera = 0.0;
|
|
106
|
+
for (let i = 0; i < points.length; i++) {
|
|
107
|
+
let projected = planeCross.clampPoint(points[i]);
|
|
108
|
+
let toP = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), projected, position));
|
|
109
|
+
if (gl_matrix_1.vec3.dot(direction, fovDown) > gl_matrix_1.vec3.dot(direction, toP)) {
|
|
110
|
+
const currentDir = gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.dot(fovDown, toP) > gl_matrix_1.vec3.dot(fovUp, toP) ? fovDown : fovUp, gl_matrix_1.vec3.fromValues(-1, -1, -1));
|
|
111
|
+
const distance = planeUp.intersect(projected, currentDir);
|
|
112
|
+
if (distance) {
|
|
113
|
+
const cameraPoint = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), currentDir, gl_matrix_1.vec3.fromValues(distance, distance, distance)), projected);
|
|
114
|
+
distanceCamera = Math.max(distanceCamera, gl_matrix_1.vec3.distance(target, cameraPoint));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
projected = planeUp.clampPoint(points[i]);
|
|
118
|
+
toP = gl_matrix_1.vec3.normalize(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.subtract(gl_matrix_1.vec3.create(), projected, position));
|
|
119
|
+
if (gl_matrix_1.vec3.dot(direction, fovRight) > gl_matrix_1.vec3.dot(direction, toP)) {
|
|
120
|
+
const currentDir = gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.dot(fovRight, toP) > gl_matrix_1.vec3.dot(fovLeft, toP) ? fovRight : fovLeft, gl_matrix_1.vec3.fromValues(-1, -1, -1));
|
|
121
|
+
const distance = planeCross.intersect(projected, currentDir);
|
|
122
|
+
if (distance) {
|
|
123
|
+
const cameraPoint = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), currentDir, gl_matrix_1.vec3.fromValues(distance, distance, distance)), projected);
|
|
124
|
+
distanceCamera = Math.max(distanceCamera, gl_matrix_1.vec3.distance(target, cameraPoint));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
position = gl_matrix_1.vec3.add(gl_matrix_1.vec3.create(), target, gl_matrix_1.vec3.multiply(gl_matrix_1.vec3.create(), direction, gl_matrix_1.vec3.fromValues(-distanceCamera, -distanceCamera, -distanceCamera)));
|
|
129
|
+
return {
|
|
130
|
+
position, target
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
project(pos, position = this.position, target = this.target) {
|
|
134
|
+
const m = gl_matrix_1.mat4.targetTo(gl_matrix_1.mat4.create(), position, target, gl_matrix_1.vec3.fromValues(0, 0, 1));
|
|
135
|
+
const aspect = this.aspect || 1.5;
|
|
136
|
+
const p = gl_matrix_1.mat4.perspective(gl_matrix_1.mat4.create(), this.fov / (180 / Math.PI), aspect, this.near, this.far);
|
|
137
|
+
gl_matrix_1.vec3.transformMat4(pos, pos, gl_matrix_1.mat4.invert(m, m));
|
|
138
|
+
gl_matrix_1.vec3.transformMat4(pos, pos, p);
|
|
139
|
+
return gl_matrix_1.vec2.fromValues(pos[0], pos[1]);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.PerspectiveCamera = PerspectiveCamera;
|
|
143
|
+
//# sourceMappingURL=PerspectiveCamera.js.map
|