@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.
Files changed (119) hide show
  1. package/LICENSE +73 -0
  2. package/README.md +3 -0
  3. package/dist/implementation/CameraEngine.d.ts +31 -0
  4. package/dist/implementation/CameraEngine.d.ts.map +1 -0
  5. package/dist/implementation/CameraEngine.js +209 -0
  6. package/dist/implementation/CameraEngine.js.map +1 -0
  7. package/dist/implementation/camera/AbstractCamera.d.ts +104 -0
  8. package/dist/implementation/camera/AbstractCamera.d.ts.map +1 -0
  9. package/dist/implementation/camera/AbstractCamera.js +226 -0
  10. package/dist/implementation/camera/AbstractCamera.js.map +1 -0
  11. package/dist/implementation/camera/OrthographicCamera.d.ts +33 -0
  12. package/dist/implementation/camera/OrthographicCamera.d.ts.map +1 -0
  13. package/dist/implementation/camera/OrthographicCamera.js +176 -0
  14. package/dist/implementation/camera/OrthographicCamera.js.map +1 -0
  15. package/dist/implementation/camera/PerspectiveCamera.d.ts +20 -0
  16. package/dist/implementation/camera/PerspectiveCamera.d.ts.map +1 -0
  17. package/dist/implementation/camera/PerspectiveCamera.js +143 -0
  18. package/dist/implementation/camera/PerspectiveCamera.js.map +1 -0
  19. package/dist/implementation/controls/AbstractCameraControls.d.ts +65 -0
  20. package/dist/implementation/controls/AbstractCameraControls.d.ts.map +1 -0
  21. package/dist/implementation/controls/AbstractCameraControls.js +247 -0
  22. package/dist/implementation/controls/AbstractCameraControls.js.map +1 -0
  23. package/dist/implementation/controls/OrthographicCameraControls.d.ts +71 -0
  24. package/dist/implementation/controls/OrthographicCameraControls.d.ts.map +1 -0
  25. package/dist/implementation/controls/OrthographicCameraControls.js +98 -0
  26. package/dist/implementation/controls/OrthographicCameraControls.js.map +1 -0
  27. package/dist/implementation/controls/PerspectiveCameraControls.d.ts +143 -0
  28. package/dist/implementation/controls/PerspectiveCameraControls.d.ts.map +1 -0
  29. package/dist/implementation/controls/PerspectiveCameraControls.js +192 -0
  30. package/dist/implementation/controls/PerspectiveCameraControls.js.map +1 -0
  31. package/dist/implementation/controls/orthographic/CameraControlsEventDistribution.d.ts +25 -0
  32. package/dist/implementation/controls/orthographic/CameraControlsEventDistribution.d.ts.map +1 -0
  33. package/dist/implementation/controls/orthographic/CameraControlsEventDistribution.js +146 -0
  34. package/dist/implementation/controls/orthographic/CameraControlsEventDistribution.js.map +1 -0
  35. package/dist/implementation/controls/orthographic/CameraControlsLogic.d.ts +28 -0
  36. package/dist/implementation/controls/orthographic/CameraControlsLogic.d.ts.map +1 -0
  37. package/dist/implementation/controls/orthographic/CameraControlsLogic.js +234 -0
  38. package/dist/implementation/controls/orthographic/CameraControlsLogic.js.map +1 -0
  39. package/dist/implementation/controls/perspective/CameraControlsEventDistribution.d.ts +25 -0
  40. package/dist/implementation/controls/perspective/CameraControlsEventDistribution.d.ts.map +1 -0
  41. package/dist/implementation/controls/perspective/CameraControlsEventDistribution.js +159 -0
  42. package/dist/implementation/controls/perspective/CameraControlsEventDistribution.js.map +1 -0
  43. package/dist/implementation/controls/perspective/CameraControlsLogic.d.ts +36 -0
  44. package/dist/implementation/controls/perspective/CameraControlsLogic.d.ts.map +1 -0
  45. package/dist/implementation/controls/perspective/CameraControlsLogic.js +389 -0
  46. package/dist/implementation/controls/perspective/CameraControlsLogic.js.map +1 -0
  47. package/dist/implementation/interpolation/CameraInterpolationManager.d.ts +25 -0
  48. package/dist/implementation/interpolation/CameraInterpolationManager.d.ts.map +1 -0
  49. package/dist/implementation/interpolation/CameraInterpolationManager.js +134 -0
  50. package/dist/implementation/interpolation/CameraInterpolationManager.js.map +1 -0
  51. package/dist/implementation/interpolation/interpolationMethods/CameraCylindricalInterpolation.d.ts +37 -0
  52. package/dist/implementation/interpolation/interpolationMethods/CameraCylindricalInterpolation.d.ts.map +1 -0
  53. package/dist/implementation/interpolation/interpolationMethods/CameraCylindricalInterpolation.js +50 -0
  54. package/dist/implementation/interpolation/interpolationMethods/CameraCylindricalInterpolation.js.map +1 -0
  55. package/dist/implementation/interpolation/interpolationMethods/CameraLinearInterpolation.d.ts +27 -0
  56. package/dist/implementation/interpolation/interpolationMethods/CameraLinearInterpolation.d.ts.map +1 -0
  57. package/dist/implementation/interpolation/interpolationMethods/CameraLinearInterpolation.js +30 -0
  58. package/dist/implementation/interpolation/interpolationMethods/CameraLinearInterpolation.js.map +1 -0
  59. package/dist/implementation/interpolation/interpolationMethods/CameraMultipleInterpolation.d.ts +36 -0
  60. package/dist/implementation/interpolation/interpolationMethods/CameraMultipleInterpolation.d.ts.map +1 -0
  61. package/dist/implementation/interpolation/interpolationMethods/CameraMultipleInterpolation.js +42 -0
  62. package/dist/implementation/interpolation/interpolationMethods/CameraMultipleInterpolation.js.map +1 -0
  63. package/dist/implementation/interpolation/interpolationMethods/CameraOrthographicInterpolation.d.ts +27 -0
  64. package/dist/implementation/interpolation/interpolationMethods/CameraOrthographicInterpolation.d.ts.map +1 -0
  65. package/dist/implementation/interpolation/interpolationMethods/CameraOrthographicInterpolation.js +30 -0
  66. package/dist/implementation/interpolation/interpolationMethods/CameraOrthographicInterpolation.js.map +1 -0
  67. package/dist/implementation/interpolation/interpolationMethods/CameraSphericalInterpolation.d.ts +33 -0
  68. package/dist/implementation/interpolation/interpolationMethods/CameraSphericalInterpolation.d.ts.map +1 -0
  69. package/dist/implementation/interpolation/interpolationMethods/CameraSphericalInterpolation.js +39 -0
  70. package/dist/implementation/interpolation/interpolationMethods/CameraSphericalInterpolation.js.map +1 -0
  71. package/dist/index.d.ts +18 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +20 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/interfaces/ICameraEngine.d.ts +11 -0
  76. package/dist/interfaces/ICameraEngine.d.ts.map +1 -0
  77. package/dist/interfaces/ICameraEngine.js +9 -0
  78. package/dist/interfaces/ICameraEngine.js.map +1 -0
  79. package/dist/interfaces/camera/ICamera.d.ts +50 -0
  80. package/dist/interfaces/camera/ICamera.d.ts.map +1 -0
  81. package/dist/interfaces/camera/ICamera.js +3 -0
  82. package/dist/interfaces/camera/ICamera.js.map +1 -0
  83. package/dist/interfaces/camera/IOrthographicCamera.d.ts +15 -0
  84. package/dist/interfaces/camera/IOrthographicCamera.d.ts.map +1 -0
  85. package/dist/interfaces/camera/IOrthographicCamera.js +13 -0
  86. package/dist/interfaces/camera/IOrthographicCamera.js.map +1 -0
  87. package/dist/interfaces/camera/IPerspectiveCamera.d.ts +7 -0
  88. package/dist/interfaces/camera/IPerspectiveCamera.d.ts.map +1 -0
  89. package/dist/interfaces/camera/IPerspectiveCamera.js +3 -0
  90. package/dist/interfaces/camera/IPerspectiveCamera.js.map +1 -0
  91. package/dist/interfaces/controls/ICameraControls.d.ts +4 -0
  92. package/dist/interfaces/controls/ICameraControls.d.ts.map +1 -0
  93. package/dist/interfaces/controls/ICameraControls.js +3 -0
  94. package/dist/interfaces/controls/ICameraControls.js.map +1 -0
  95. package/dist/interfaces/controls/ICameraControlsEventDistribution.d.ts +5 -0
  96. package/dist/interfaces/controls/ICameraControlsEventDistribution.d.ts.map +1 -0
  97. package/dist/interfaces/controls/ICameraControlsEventDistribution.js +3 -0
  98. package/dist/interfaces/controls/ICameraControlsEventDistribution.js.map +1 -0
  99. package/dist/interfaces/controls/ICameraControlsLogic.d.ts +11 -0
  100. package/dist/interfaces/controls/ICameraControlsLogic.d.ts.map +1 -0
  101. package/dist/interfaces/controls/ICameraControlsLogic.js +3 -0
  102. package/dist/interfaces/controls/ICameraControlsLogic.js.map +1 -0
  103. package/dist/interfaces/controls/ICameraControlsUsage.d.ts +29 -0
  104. package/dist/interfaces/controls/ICameraControlsUsage.d.ts.map +1 -0
  105. package/dist/interfaces/controls/ICameraControlsUsage.js +3 -0
  106. package/dist/interfaces/controls/ICameraControlsUsage.js.map +1 -0
  107. package/dist/interfaces/controls/IOrthographicCameraControls.d.ts +30 -0
  108. package/dist/interfaces/controls/IOrthographicCameraControls.d.ts.map +1 -0
  109. package/dist/interfaces/controls/IOrthographicCameraControls.js +3 -0
  110. package/dist/interfaces/controls/IOrthographicCameraControls.js.map +1 -0
  111. package/dist/interfaces/controls/IPerspectiveCameraControls.d.ts +61 -0
  112. package/dist/interfaces/controls/IPerspectiveCameraControls.d.ts.map +1 -0
  113. package/dist/interfaces/controls/IPerspectiveCameraControls.js +3 -0
  114. package/dist/interfaces/controls/IPerspectiveCameraControls.js.map +1 -0
  115. package/dist/interfaces/interpolation/ICameraInterpolation.d.ts +12 -0
  116. package/dist/interfaces/interpolation/ICameraInterpolation.d.ts.map +1 -0
  117. package/dist/interfaces/interpolation/ICameraInterpolation.js +3 -0
  118. package/dist/interfaces/interpolation/ICameraInterpolation.js.map +1 -0
  119. 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