redhotmagma-visualization 1.44.1 → 1.44.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/Three/Three3DScene.js +25 -6
- package/package.json +2 -2
- package/src/Three/Three3DScene.js +30 -6
package/Three/Three3DScene.js
CHANGED
|
@@ -13,7 +13,6 @@ var _RGBELoader = require("three/examples/jsm/loaders/RGBELoader");
|
|
|
13
13
|
var _get = _interopRequireDefault(require("lodash/get"));
|
|
14
14
|
var _size = _interopRequireDefault(require("lodash/size"));
|
|
15
15
|
var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject"));
|
|
16
|
-
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
17
16
|
var _glTFExporter = require("./Exporters/glTFExporter");
|
|
18
17
|
var _findIndex = _interopRequireDefault(require("lodash/findIndex"));
|
|
19
18
|
var _merge = _interopRequireDefault(require("lodash/merge"));
|
|
@@ -291,6 +290,7 @@ var Three3DScene = exports.Three3DScene = /*#__PURE__*/function (_Three3D) {
|
|
|
291
290
|
useShadowGround: true,
|
|
292
291
|
removeGroundForScreenshot: true,
|
|
293
292
|
useEnvironmentMap: true,
|
|
293
|
+
useDirectionalLight: false,
|
|
294
294
|
useBakedShadows: false,
|
|
295
295
|
bakedShadow: {
|
|
296
296
|
lightPositionOffset: {
|
|
@@ -401,6 +401,8 @@ var Three3DScene = exports.Three3DScene = /*#__PURE__*/function (_Three3D) {
|
|
|
401
401
|
renderer.outputEncoding = _three.sRGBEncoding;
|
|
402
402
|
renderer.shadowMap.enabled = true;
|
|
403
403
|
renderer.shadowMap.type = _three.PCFSoftShadowMap;
|
|
404
|
+
renderer.toneMapping = _three.ACESFilmicToneMapping;
|
|
405
|
+
renderer.toneMappingExposure = 1;
|
|
404
406
|
var realWidth = window.innerWidth * window.devicePixelRatio;
|
|
405
407
|
if ((0, _isMobileDevice.isMobileDevice)() && realWidth >= 1024) {
|
|
406
408
|
renderer.setPixelRatio(1);
|
|
@@ -451,11 +453,13 @@ var Three3DScene = exports.Three3DScene = /*#__PURE__*/function (_Three3D) {
|
|
|
451
453
|
key: "createScene",
|
|
452
454
|
value: function createScene() {
|
|
453
455
|
var scene = new _three.Scene();
|
|
454
|
-
scene.add(this.createDirLight());
|
|
455
456
|
scene.add(this.sceneContainer);
|
|
456
457
|
if (this.config.useEnvironmentMap && this.envMap) {
|
|
457
458
|
scene.environment = this.envMap;
|
|
458
459
|
}
|
|
460
|
+
if (this.config.useDirectionalLight) {
|
|
461
|
+
scene.add(this.createDirLight());
|
|
462
|
+
}
|
|
459
463
|
return scene;
|
|
460
464
|
}
|
|
461
465
|
}, {
|
|
@@ -506,7 +510,7 @@ var Three3DScene = exports.Three3DScene = /*#__PURE__*/function (_Three3D) {
|
|
|
506
510
|
key: "addLightsIfNeeded",
|
|
507
511
|
value: function addLightsIfNeeded(scene) {
|
|
508
512
|
var sceneHasLight = scene.getObjectByProperty("isLight", true);
|
|
509
|
-
if (!sceneHasLight && !this.dirLight) {
|
|
513
|
+
if (!sceneHasLight && !this.dirLight && (this.config.useDirectionalLight || !this.config.useEnvironmentMap)) {
|
|
510
514
|
this.scene.add(this.createDirLight());
|
|
511
515
|
} else if (sceneHasLight) {
|
|
512
516
|
// remove if the scene shipped its own light
|
|
@@ -1189,6 +1193,17 @@ var Three3DScene = exports.Three3DScene = /*#__PURE__*/function (_Three3D) {
|
|
|
1189
1193
|
}
|
|
1190
1194
|
this.screenshotViews = this.calculateRelativeViews(this.relativeScreenshotViews, center, (this.controls.minDistance + this.controls.maxDistance) * 0.5);
|
|
1191
1195
|
}
|
|
1196
|
+
}, {
|
|
1197
|
+
key: "getCameraViewRatio",
|
|
1198
|
+
value: function getCameraViewRatio(view1, view2) {
|
|
1199
|
+
return view2.lookat.distanceTo(view2.position) / view1.lookat.distanceTo(view1.position);
|
|
1200
|
+
}
|
|
1201
|
+
}, {
|
|
1202
|
+
key: "shouldViewChangeTriggerJumpToView",
|
|
1203
|
+
value: function shouldViewChangeTriggerJumpToView(view1, view2) {
|
|
1204
|
+
var tolerance = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.5;
|
|
1205
|
+
return Math.abs(this.getCameraViewRatio(view1, view2) - 1) > tolerance;
|
|
1206
|
+
}
|
|
1192
1207
|
}, {
|
|
1193
1208
|
key: "initCameraViews",
|
|
1194
1209
|
value: function initCameraViews(cameras) {
|
|
@@ -1209,7 +1224,7 @@ var Three3DScene = exports.Three3DScene = /*#__PURE__*/function (_Three3D) {
|
|
|
1209
1224
|
this._firstCameraInitDone = true;
|
|
1210
1225
|
this.currentCameraView = null;
|
|
1211
1226
|
this.jumpToView("default", false);
|
|
1212
|
-
} else if (previousCameraView && this.cameraViews[currentCameraName] &&
|
|
1227
|
+
} else if (previousCameraView && this.cameraViews[currentCameraName] && this.shouldViewChangeTriggerJumpToView(previousCameraView, this.cameraViews[currentCameraName])) {
|
|
1213
1228
|
this.currentCameraView = null;
|
|
1214
1229
|
this.jumpToView(currentCameraName, true);
|
|
1215
1230
|
}
|
|
@@ -1354,9 +1369,13 @@ var Three3DScene = exports.Three3DScene = /*#__PURE__*/function (_Three3D) {
|
|
|
1354
1369
|
controls.maxDistance = maxDistance;
|
|
1355
1370
|
camera.near = minDistance * 0.01;
|
|
1356
1371
|
camera.far = maxDistance * 100;
|
|
1357
|
-
|
|
1372
|
+
// update current position only if it does not fit into the distance range
|
|
1373
|
+
var currentDistance = sphere.center.distanceTo(camera.position);
|
|
1374
|
+
if (currentDistance < minDistance || currentDistance > maxDistance) {
|
|
1375
|
+
camera.position.copy(camera.position.normalize().multiplyScalar(maxDistance * 0.75));
|
|
1376
|
+
controls.target = sphere.center;
|
|
1377
|
+
}
|
|
1358
1378
|
camera.updateProjectionMatrix();
|
|
1359
|
-
controls.target = sphere.center;
|
|
1360
1379
|
controls.update();
|
|
1361
1380
|
}
|
|
1362
1381
|
}, {
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "redhotmagma-visualization",
|
|
3
|
-
"version": "1.44.
|
|
3
|
+
"version": "1.44.3",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"private": false,
|
|
6
6
|
"main": "./index.js",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"@babel/polyfill": "^7.12.1",
|
|
9
|
-
"@configuratorware/scripts": "1.44.
|
|
9
|
+
"@configuratorware/scripts": "1.44.3",
|
|
10
10
|
"@tweenjs/tween.js": "^17.6.0",
|
|
11
11
|
"console-polyfill": "^0.3.0",
|
|
12
12
|
"css-element-queries": "^1.2.3",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
ACESFilmicToneMapping,
|
|
2
3
|
AnimationMixer,
|
|
3
4
|
Box3,
|
|
4
5
|
CameraHelper,
|
|
@@ -35,7 +36,6 @@ import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader";
|
|
|
35
36
|
import get from "lodash/get";
|
|
36
37
|
import size from "lodash/size";
|
|
37
38
|
import isPlainObject from "lodash/isPlainObject";
|
|
38
|
-
import isEqual from "lodash/isEqual";
|
|
39
39
|
import { exportGLTF } from "./Exporters/glTFExporter";
|
|
40
40
|
import findIndex from "lodash/findIndex";
|
|
41
41
|
import merge from "lodash/merge";
|
|
@@ -274,6 +274,7 @@ export class Three3DScene extends Three3D {
|
|
|
274
274
|
useShadowGround: true,
|
|
275
275
|
removeGroundForScreenshot: true,
|
|
276
276
|
useEnvironmentMap: true,
|
|
277
|
+
useDirectionalLight: false,
|
|
277
278
|
useBakedShadows: false,
|
|
278
279
|
bakedShadow: {
|
|
279
280
|
lightPositionOffset: { x: 0, y: 0, z: 0 },
|
|
@@ -336,6 +337,8 @@ export class Three3DScene extends Three3D {
|
|
|
336
337
|
renderer.outputEncoding = sRGBEncoding;
|
|
337
338
|
renderer.shadowMap.enabled = true;
|
|
338
339
|
renderer.shadowMap.type = PCFSoftShadowMap;
|
|
340
|
+
renderer.toneMapping = ACESFilmicToneMapping;
|
|
341
|
+
renderer.toneMappingExposure = 1;
|
|
339
342
|
|
|
340
343
|
const realWidth = window.innerWidth * window.devicePixelRatio;
|
|
341
344
|
if (isMobileDevice() && realWidth >= 1024) {
|
|
@@ -387,12 +390,14 @@ export class Three3DScene extends Three3D {
|
|
|
387
390
|
|
|
388
391
|
createScene() {
|
|
389
392
|
const scene = new Scene();
|
|
390
|
-
scene.add(this.createDirLight());
|
|
391
393
|
scene.add(this.sceneContainer);
|
|
392
394
|
|
|
393
395
|
if (this.config.useEnvironmentMap && this.envMap) {
|
|
394
396
|
scene.environment = this.envMap;
|
|
395
397
|
}
|
|
398
|
+
if (this.config.useDirectionalLight) {
|
|
399
|
+
scene.add(this.createDirLight());
|
|
400
|
+
}
|
|
396
401
|
|
|
397
402
|
return scene;
|
|
398
403
|
}
|
|
@@ -446,7 +451,11 @@ export class Three3DScene extends Three3D {
|
|
|
446
451
|
|
|
447
452
|
addLightsIfNeeded(scene) {
|
|
448
453
|
const sceneHasLight = scene.getObjectByProperty("isLight", true);
|
|
449
|
-
if (
|
|
454
|
+
if (
|
|
455
|
+
!sceneHasLight &&
|
|
456
|
+
!this.dirLight &&
|
|
457
|
+
(this.config.useDirectionalLight || !this.config.useEnvironmentMap)
|
|
458
|
+
) {
|
|
450
459
|
this.scene.add(this.createDirLight());
|
|
451
460
|
} else if (sceneHasLight) {
|
|
452
461
|
// remove if the scene shipped its own light
|
|
@@ -967,6 +976,14 @@ export class Three3DScene extends Three3D {
|
|
|
967
976
|
);
|
|
968
977
|
}
|
|
969
978
|
|
|
979
|
+
getCameraViewRatio(view1, view2) {
|
|
980
|
+
return view2.lookat.distanceTo(view2.position) / view1.lookat.distanceTo(view1.position);
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
shouldViewChangeTriggerJumpToView(view1, view2, tolerance = 0.5) {
|
|
984
|
+
return Math.abs(this.getCameraViewRatio(view1, view2) - 1) > tolerance;
|
|
985
|
+
}
|
|
986
|
+
|
|
970
987
|
initCameraViews(cameras) {
|
|
971
988
|
if (!this.sceneContainer?.children?.length) {
|
|
972
989
|
return;
|
|
@@ -991,7 +1008,10 @@ export class Three3DScene extends Three3D {
|
|
|
991
1008
|
} else if (
|
|
992
1009
|
previousCameraView &&
|
|
993
1010
|
this.cameraViews[currentCameraName] &&
|
|
994
|
-
|
|
1011
|
+
this.shouldViewChangeTriggerJumpToView(
|
|
1012
|
+
previousCameraView,
|
|
1013
|
+
this.cameraViews[currentCameraName]
|
|
1014
|
+
)
|
|
995
1015
|
) {
|
|
996
1016
|
this.currentCameraView = null;
|
|
997
1017
|
this.jumpToView(currentCameraName, true);
|
|
@@ -1120,9 +1140,13 @@ export class Three3DScene extends Three3D {
|
|
|
1120
1140
|
controls.maxDistance = maxDistance;
|
|
1121
1141
|
camera.near = minDistance * 0.01;
|
|
1122
1142
|
camera.far = maxDistance * 100;
|
|
1123
|
-
|
|
1143
|
+
// update current position only if it does not fit into the distance range
|
|
1144
|
+
const currentDistance = sphere.center.distanceTo(camera.position);
|
|
1145
|
+
if (currentDistance < minDistance || currentDistance > maxDistance) {
|
|
1146
|
+
camera.position.copy(camera.position.normalize().multiplyScalar(maxDistance * 0.75));
|
|
1147
|
+
controls.target = sphere.center;
|
|
1148
|
+
}
|
|
1124
1149
|
camera.updateProjectionMatrix();
|
|
1125
|
-
controls.target = sphere.center;
|
|
1126
1150
|
|
|
1127
1151
|
controls.update();
|
|
1128
1152
|
}
|