redhotmagma-visualization 1.41.0 → 1.42.0
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/AlignTargetProvider.js +50 -79
- package/CommonUtils/Deferred.js +11 -38
- package/CommonUtils/Observable.js +29 -48
- package/CommonUtils/PropertyObserver.js +10 -17
- package/CommonUtils/SyncCurrentFunction.js +33 -42
- package/CommonUtils/SyncObservableEvent.js +2 -6
- package/CommonUtils/pointerEvent.js +50 -98
- package/Constants.js +6 -6
- package/DevApp.js +187 -309
- package/ExposedModules.js +2 -9
- package/FallbackVisualization.js +4 -10
- package/PrintingEffects/ColorEmbossingEffect.js +15 -26
- package/PrintingEffects/DomingEffect.js +29 -52
- package/PrintingEffects/EmbossingEffect.js +17 -29
- package/PrintingEffects/EmbroideryEffect.js +251 -362
- package/PrintingEffects/EngravingEffect.js +17 -29
- package/PrintingEffects/PrintingEffects.js +44 -73
- package/PrintingEffects/PrintingEffectsUtils.js +1 -7
- package/React/ReactBase.js +15 -47
- package/Three/Controls/OrbitControls.js +105 -126
- package/Three/Exporters/glTFExporter.js +2 -6
- package/Three/Loaders/ColladaLoader.js +202 -550
- package/Three/Loaders/MTLLoader.js +33 -64
- package/Three/Loaders/OBJLoader.js +48 -80
- package/Three/Three2D.js +750 -1014
- package/Three/Three2DLayers.js +217 -341
- package/Three/Three3D.js +530 -800
- package/Three/Three3DScene.js +484 -780
- package/Three/ThreeBase.js +145 -230
- package/Utils/DesignArea/getDesignAreaCanvasSize.js +3 -11
- package/Utils/TextureBuilder/createTextureBuilder.js +133 -193
- package/Utils/TextureBuilder/textureBuilderFunctions.js +11 -27
- package/Utils/alignToElement.js +13 -24
- package/Utils/canvasBlur.js +27 -45
- package/Utils/createAlphaMapFromAlphaChannel.js +11 -21
- package/Utils/createBakedShadow.js +38 -42
- package/Utils/createCache.js +0 -4
- package/Utils/createCanvas.js +3 -9
- package/Utils/createImageRepository.js +63 -87
- package/Utils/disposeMaterial.js +4 -14
- package/Utils/getImageSize.js +1 -2
- package/Utils/imagePreloader.js +36 -48
- package/Utils/initTextureCanvas.js +6 -18
- package/Utils/isMobileDevice.js +3 -7
- package/Utils/optimizeTextureImage.js +13 -29
- package/Utils/rememberCameraViewOffset.js +8 -11
- package/Utils/removeObject.js +0 -4
- package/Utils/restrictCameraMovement.js +2 -12
- package/Utils/setLightShadow.js +3 -5
- package/Utils/setOrthographicCameraSize.js +0 -1
- package/Utils/updateFitSizeToElement.js +4 -9
- package/VisualizationContainer.js +37 -90
- package/VisualizationInterface.js +32 -67
- package/VisualizationProvider.js +5 -15
- package/index.js +2 -9
- package/package.json +6 -7
- package/scripts/cpPublicLocal.js +7 -2
- package/src/CommonUtils/Observable.js +1 -0
- package/src/CommonUtils/pointerEvent.js +17 -0
- package/src/Constants.js +2 -0
- package/src/DevApp.js +1 -2
- package/src/Three/Three2D.js +105 -1
- package/src/Three/ThreeBase.js +31 -3
- package/src/Utils/TextureBuilder/createTextureBuilder.js +12 -3
- package/src/VisualizationContainer.js +8 -2
- package/src/index.js +2 -3
- package/visualizationAdapterCreator.js +6 -23
package/Utils/alignToElement.js
CHANGED
|
@@ -3,13 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
|
|
8
|
-
var getRectCenter = function getRectCenter(_ref) {
|
|
6
|
+
exports.getRectCenter = exports.alignToElement = void 0;
|
|
7
|
+
var getRectCenter = exports.getRectCenter = function getRectCenter(_ref) {
|
|
9
8
|
var width = _ref.width,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
height = _ref.height,
|
|
10
|
+
left = _ref.left,
|
|
11
|
+
top = _ref.top;
|
|
13
12
|
var x = left + width / 2;
|
|
14
13
|
var y = top + height / 2;
|
|
15
14
|
return {
|
|
@@ -17,18 +16,14 @@ var getRectCenter = function getRectCenter(_ref) {
|
|
|
17
16
|
y: y
|
|
18
17
|
};
|
|
19
18
|
};
|
|
19
|
+
|
|
20
20
|
/**
|
|
21
21
|
* Calculates the view offset to align the camera with the given element
|
|
22
22
|
* @param {ThreeBase} visualization
|
|
23
23
|
* @param {Element} element
|
|
24
24
|
*/
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
exports.getRectCenter = getRectCenter;
|
|
28
|
-
|
|
29
|
-
var alignToElement = function alignToElement(visualization, element) {
|
|
25
|
+
var alignToElement = exports.alignToElement = function alignToElement(visualization, element) {
|
|
30
26
|
var canvas = visualization.renderer && visualization.renderer.domElement;
|
|
31
|
-
|
|
32
27
|
if (visualization && visualization.camera) {
|
|
33
28
|
if (!element) {
|
|
34
29
|
visualization.camera.clearViewOffset();
|
|
@@ -36,23 +31,17 @@ var alignToElement = function alignToElement(visualization, element) {
|
|
|
36
31
|
} else if (!canvas) {
|
|
37
32
|
return;
|
|
38
33
|
}
|
|
39
|
-
|
|
40
34
|
var containerRect = canvas.getBoundingClientRect();
|
|
41
35
|
var width = containerRect.width,
|
|
42
|
-
|
|
43
|
-
|
|
36
|
+
height = containerRect.height;
|
|
44
37
|
var _getRectCenter = getRectCenter(containerRect),
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
38
|
+
cx = _getRectCenter.x,
|
|
39
|
+
cy = _getRectCenter.y;
|
|
48
40
|
var _getRectCenter2 = getRectCenter(element.getBoundingClientRect()),
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
41
|
+
tx = _getRectCenter2.x,
|
|
42
|
+
ty = _getRectCenter2.y;
|
|
52
43
|
var dx = cx - tx;
|
|
53
44
|
var dy = cy - ty;
|
|
54
45
|
visualization.camera.setViewOffset(width, height, dx, dy, width, height);
|
|
55
46
|
}
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
exports.alignToElement = alignToElement;
|
|
47
|
+
};
|
package/Utils/canvasBlur.js
CHANGED
|
@@ -4,22 +4,23 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = exports.blur = void 0;
|
|
7
|
-
|
|
8
7
|
// source: https://github.com/davidenke/context-filter-polyfill/blob/master/src/filters/blur.filter.ts
|
|
9
|
-
|
|
8
|
+
|
|
9
|
+
var blur = exports.blur = function blur(context) {
|
|
10
10
|
var radius = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5;
|
|
11
|
-
var amount = radius;
|
|
11
|
+
var amount = radius;
|
|
12
12
|
|
|
13
|
+
// do not manipulate without proper amount
|
|
13
14
|
if (amount <= 0) {
|
|
14
15
|
return context;
|
|
15
16
|
}
|
|
16
|
-
|
|
17
17
|
var _context$canvas = context.canvas,
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
height = _context$canvas.height,
|
|
19
|
+
width = _context$canvas.width;
|
|
20
20
|
var imageData = context.getImageData(0, 0, width, height);
|
|
21
|
-
var data = imageData.data;
|
|
21
|
+
var data = imageData.data;
|
|
22
22
|
|
|
23
|
+
// http://www.quasimondo.com/BoxBlurForCanvas/FastBlur.js
|
|
23
24
|
var wm = width - 1;
|
|
24
25
|
var hm = height - 1;
|
|
25
26
|
var rad1 = amount + 1;
|
|
@@ -34,19 +35,15 @@ var blur = function blur(context) {
|
|
|
34
35
|
var vmin = [];
|
|
35
36
|
var vmax = [];
|
|
36
37
|
var iterations = 3; // 1 - 3
|
|
37
|
-
|
|
38
38
|
var p, p1, p2, pa;
|
|
39
|
-
|
|
40
39
|
while (iterations-- > 0) {
|
|
41
40
|
var yw = 0;
|
|
42
41
|
var yi = 0;
|
|
43
|
-
|
|
44
42
|
for (var y = 0; y < height; y++) {
|
|
45
43
|
var rsum = data[yw] * rad1;
|
|
46
44
|
var gsum = data[yw + 1] * rad1;
|
|
47
45
|
var bsum = data[yw + 2] * rad1;
|
|
48
46
|
var asum = data[yw + 3] * rad1;
|
|
49
|
-
|
|
50
47
|
for (var i = 1; i <= amount; i++) {
|
|
51
48
|
// tslint:disable-next-line no-bitwise
|
|
52
49
|
p = yw + ((i > wm ? wm : i) << 2);
|
|
@@ -55,20 +52,17 @@ var blur = function blur(context) {
|
|
|
55
52
|
bsum += data[p++];
|
|
56
53
|
asum += data[p];
|
|
57
54
|
}
|
|
58
|
-
|
|
59
55
|
for (var x = 0; x < width; x++) {
|
|
60
56
|
r[yi] = rsum;
|
|
61
57
|
g[yi] = gsum;
|
|
62
58
|
b[yi] = bsum;
|
|
63
59
|
a[yi] = asum;
|
|
64
|
-
|
|
65
60
|
if (y === 0) {
|
|
66
61
|
// tslint:disable-next-line no-bitwise
|
|
67
|
-
vmin[x] = ((p = x + rad1) < wm ? p : wm) << 2;
|
|
68
|
-
|
|
62
|
+
vmin[x] = ((p = x + rad1) < wm ? p : wm) << 2;
|
|
63
|
+
// tslint:disable-next-line no-bitwise
|
|
69
64
|
vmax[x] = (p = x - amount) > 0 ? p << 2 : 0;
|
|
70
65
|
}
|
|
71
|
-
|
|
72
66
|
p1 = yw + vmin[x];
|
|
73
67
|
p2 = yw + vmax[x];
|
|
74
68
|
rsum += data[p1++] - data[p2++];
|
|
@@ -76,73 +70,61 @@ var blur = function blur(context) {
|
|
|
76
70
|
bsum += data[p1++] - data[p2++];
|
|
77
71
|
asum += data[p1] - data[p2];
|
|
78
72
|
yi++;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
|
|
73
|
+
}
|
|
74
|
+
// tslint:disable-next-line no-bitwise
|
|
82
75
|
yw += width << 2;
|
|
83
76
|
}
|
|
84
|
-
|
|
85
77
|
for (var _x = 0; _x < width; _x++) {
|
|
86
78
|
var yp = _x;
|
|
87
|
-
|
|
88
79
|
var _rsum = r[yp] * rad1;
|
|
89
|
-
|
|
90
80
|
var _gsum = g[yp] * rad1;
|
|
91
|
-
|
|
92
81
|
var _bsum = b[yp] * rad1;
|
|
93
|
-
|
|
94
82
|
var _asum = a[yp] * rad1;
|
|
95
|
-
|
|
96
83
|
for (var _i = 1; _i <= amount; _i++) {
|
|
97
84
|
yp += _i > hm ? 0 : width;
|
|
98
85
|
_rsum += r[yp];
|
|
99
86
|
_gsum += g[yp];
|
|
100
87
|
_bsum += b[yp];
|
|
101
88
|
_asum += a[yp];
|
|
102
|
-
}
|
|
103
|
-
|
|
89
|
+
}
|
|
104
90
|
|
|
91
|
+
// tslint:disable-next-line no-bitwise
|
|
105
92
|
yi = _x << 2;
|
|
106
|
-
|
|
107
93
|
for (var _y = 0; _y < height; _y++) {
|
|
108
94
|
// tslint:disable-next-line no-bitwise
|
|
109
95
|
data[yi + 3] = pa = _asum * mulSum >>> shgSum;
|
|
110
|
-
|
|
111
96
|
if (pa > 0) {
|
|
112
|
-
pa = 255 / pa;
|
|
113
|
-
|
|
114
|
-
data[yi] = (_rsum * mulSum >>> shgSum) * pa;
|
|
115
|
-
|
|
116
|
-
data[yi + 1] = (_gsum * mulSum >>> shgSum) * pa;
|
|
117
|
-
|
|
97
|
+
pa = 255 / pa;
|
|
98
|
+
// tslint:disable-next-line no-bitwise
|
|
99
|
+
data[yi] = (_rsum * mulSum >>> shgSum) * pa;
|
|
100
|
+
// tslint:disable-next-line no-bitwise
|
|
101
|
+
data[yi + 1] = (_gsum * mulSum >>> shgSum) * pa;
|
|
102
|
+
// tslint:disable-next-line no-bitwise
|
|
118
103
|
data[yi + 2] = (_bsum * mulSum >>> shgSum) * pa;
|
|
119
104
|
} else {
|
|
120
105
|
data[yi] = data[yi + 1] = data[yi + 2] = 0;
|
|
121
106
|
}
|
|
122
|
-
|
|
123
107
|
if (_x === 0) {
|
|
124
108
|
vmin[_y] = ((p = _y + rad1) < hm ? p : hm) * width;
|
|
125
109
|
vmax[_y] = (p = _y - amount) > 0 ? p * width : 0;
|
|
126
110
|
}
|
|
127
|
-
|
|
128
111
|
p1 = _x + vmin[_y];
|
|
129
112
|
p2 = _x + vmax[_y];
|
|
130
113
|
_rsum += r[p1] - r[p2];
|
|
131
114
|
_gsum += g[p1] - g[p2];
|
|
132
115
|
_bsum += b[p1] - b[p2];
|
|
133
|
-
_asum += a[p1] - a[p2];
|
|
116
|
+
_asum += a[p1] - a[p2];
|
|
134
117
|
|
|
118
|
+
// tslint:disable-next-line no-bitwise
|
|
135
119
|
yi += width << 2;
|
|
136
120
|
}
|
|
137
121
|
}
|
|
138
|
-
}
|
|
139
|
-
|
|
122
|
+
}
|
|
140
123
|
|
|
141
|
-
|
|
124
|
+
// set back image data to context
|
|
125
|
+
context.putImageData(imageData, 0, 0);
|
|
142
126
|
|
|
127
|
+
// return the context itself
|
|
143
128
|
return context;
|
|
144
129
|
};
|
|
145
|
-
|
|
146
|
-
exports.blur = blur;
|
|
147
|
-
var _default = blur;
|
|
148
|
-
exports["default"] = _default;
|
|
130
|
+
var _default = exports["default"] = blur;
|
|
@@ -4,21 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createAlphaMapFromAlphaChannel = void 0;
|
|
7
|
-
|
|
8
7
|
var _createCanvas = require("./createCanvas");
|
|
9
|
-
|
|
10
8
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
11
|
-
|
|
12
9
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
13
|
-
|
|
14
10
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
15
|
-
|
|
16
|
-
function
|
|
17
|
-
|
|
18
|
-
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
19
|
-
|
|
11
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
12
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
20
13
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
21
|
-
|
|
22
14
|
/**
|
|
23
15
|
* Algorithm:
|
|
24
16
|
* 1. copy the source canvas on a working canvas
|
|
@@ -27,24 +19,22 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
27
19
|
* @param {HTMLCanvasElement} srcCanvas The canvas that has transparency
|
|
28
20
|
* @param {HTMLCanvasElement} dstCanvas The target canvas that holds the alpha map
|
|
29
21
|
*/
|
|
30
|
-
var createAlphaMapFromAlphaChannel = function createAlphaMapFromAlphaChannel(srcCanvas, dstCanvas) {
|
|
22
|
+
var createAlphaMapFromAlphaChannel = exports.createAlphaMapFromAlphaChannel = function createAlphaMapFromAlphaChannel(srcCanvas, dstCanvas) {
|
|
31
23
|
var _createWorkingCanvas = (0, _createCanvas.createWorkingCanvas)(srcCanvas, true),
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
24
|
+
_createWorkingCanvas2 = _slicedToArray(_createWorkingCanvas, 2),
|
|
25
|
+
tmpCanvas = _createWorkingCanvas2[0],
|
|
26
|
+
tmpCtx = _createWorkingCanvas2[1];
|
|
27
|
+
// draw a white rectangle over the source content using the source-in operation
|
|
35
28
|
// to make the source image white keeping the alpha values
|
|
36
|
-
|
|
37
|
-
|
|
38
29
|
tmpCtx.globalCompositeOperation = "source-in";
|
|
39
30
|
tmpCtx.fillStyle = "white";
|
|
40
|
-
tmpCtx.fillRect(0, 0, srcCanvas.width, srcCanvas.height);
|
|
41
|
-
// to keep the higher alpha value of the two maps
|
|
31
|
+
tmpCtx.fillRect(0, 0, srcCanvas.width, srcCanvas.height);
|
|
42
32
|
|
|
33
|
+
// copy the content alpha to the target canvas using the lighten operation
|
|
34
|
+
// to keep the higher alpha value of the two maps
|
|
43
35
|
var dstCtx = dstCanvas.getContext("2d");
|
|
44
36
|
var globalCompositeOperation = dstCtx.globalCompositeOperation;
|
|
45
37
|
dstCtx.globalCompositeOperation = "lighten";
|
|
46
38
|
dstCtx.drawImage(tmpCanvas, 0, 0);
|
|
47
39
|
dstCtx.globalCompositeOperation = globalCompositeOperation;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
exports.createAlphaMapFromAlphaChannel = createAlphaMapFromAlphaChannel;
|
|
40
|
+
};
|
|
@@ -4,54 +4,49 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = createBakedShadow;
|
|
7
|
-
|
|
8
7
|
var _three = require("three");
|
|
9
|
-
|
|
10
8
|
var _setLightShadow = _interopRequireDefault(require("./setLightShadow"));
|
|
11
|
-
|
|
12
9
|
var _canvasBlur = _interopRequireDefault(require("./canvasBlur"));
|
|
13
|
-
|
|
14
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
15
|
-
|
|
16
11
|
function createBakedShadow(scene, options) {
|
|
17
12
|
if (!scene) {
|
|
18
13
|
return;
|
|
19
14
|
}
|
|
20
|
-
|
|
21
15
|
var _options$withMaterial = options.withMaterial,
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
16
|
+
withMaterial = _options$withMaterial === void 0 ? false : _options$withMaterial,
|
|
17
|
+
_options$config = options.config,
|
|
18
|
+
config = _options$config === void 0 ? {} : _options$config;
|
|
25
19
|
var _config$lightPosition = config.lightPositionOffset,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
20
|
+
lightPositionOffset = _config$lightPosition === void 0 ? {
|
|
21
|
+
x: 0,
|
|
22
|
+
y: 0,
|
|
23
|
+
z: 0
|
|
24
|
+
} : _config$lightPosition,
|
|
25
|
+
_config$shadowMapSize = config.shadowMapSize,
|
|
26
|
+
shadowMapSize = _config$shadowMapSize === void 0 ? 512 : _config$shadowMapSize,
|
|
27
|
+
_config$groundScaling = config.groundScaling,
|
|
28
|
+
groundScaling = _config$groundScaling === void 0 ? 2 : _config$groundScaling;
|
|
29
|
+
|
|
30
|
+
// activate shadows and disable other lights
|
|
36
31
|
scene.traverse(function (object) {
|
|
37
32
|
if (object.isMesh) {
|
|
38
33
|
object.castShadow = true;
|
|
39
|
-
|
|
40
34
|
if (object.material) {
|
|
41
35
|
object.material.shadowSide = _three.DoubleSide;
|
|
42
36
|
}
|
|
43
37
|
}
|
|
44
|
-
|
|
45
38
|
if (object.isLight) {
|
|
46
39
|
object.visible = false;
|
|
47
40
|
}
|
|
48
|
-
});
|
|
41
|
+
});
|
|
49
42
|
|
|
43
|
+
// remember the original values and set them to null (we need a white background)
|
|
50
44
|
var environment = scene.environment,
|
|
51
|
-
|
|
45
|
+
background = scene.background;
|
|
52
46
|
scene.environment = null;
|
|
53
|
-
scene.background = null;
|
|
47
|
+
scene.background = null;
|
|
54
48
|
|
|
49
|
+
// get bounding parameters for positioning and scaling
|
|
55
50
|
scene.updateWorldMatrix(true, true);
|
|
56
51
|
var box = new _three.Box3().expandByObject(scene);
|
|
57
52
|
var sphere = box.getBoundingSphere(new _three.Sphere());
|
|
@@ -62,8 +57,9 @@ function createBakedShadow(scene, options) {
|
|
|
62
57
|
var shadowGround = new _three.Mesh(shadowGeometry, new _three.ShadowMaterial({
|
|
63
58
|
color: 0x000000
|
|
64
59
|
}));
|
|
65
|
-
shadowGround.receiveShadow = true;
|
|
60
|
+
shadowGround.receiveShadow = true;
|
|
66
61
|
|
|
62
|
+
// set the ground positions right below the model bounding box
|
|
67
63
|
shadowGround.position.set(sphere.center.x, box.min.y - 0.01, sphere.center.z);
|
|
68
64
|
shadowGround.scale.set(groundScaling * radius * 2, 1, groundScaling * radius * 2);
|
|
69
65
|
scene.add(shadowGround);
|
|
@@ -77,10 +73,12 @@ function createBakedShadow(scene, options) {
|
|
|
77
73
|
far: shadowLight.position.length() * 2,
|
|
78
74
|
shadowMapSize: shadowMapSize
|
|
79
75
|
}
|
|
80
|
-
});
|
|
76
|
+
});
|
|
81
77
|
|
|
82
|
-
|
|
78
|
+
// calculate the canvas size for the rendered shadow
|
|
79
|
+
var canvasSize = shadowMapSize * groundScaling;
|
|
83
80
|
|
|
81
|
+
// create and set the new render target
|
|
84
82
|
var renderTarget = new _three.WebGLRenderTarget(canvasSize, canvasSize);
|
|
85
83
|
var renderer = new _three.WebGLRenderer({
|
|
86
84
|
alpha: true,
|
|
@@ -89,8 +87,9 @@ function createBakedShadow(scene, options) {
|
|
|
89
87
|
renderer.outputEncoding = _three.sRGBEncoding;
|
|
90
88
|
renderer.shadowMap.enabled = true;
|
|
91
89
|
renderer.shadowMap.type = _three.PCFSoftShadowMap;
|
|
92
|
-
renderer.setRenderTarget(renderTarget);
|
|
90
|
+
renderer.setRenderTarget(renderTarget);
|
|
93
91
|
|
|
92
|
+
// create a camera to capture only the shadowGround plane (with the shadow)
|
|
94
93
|
var shadowCamera = shadowLight.shadow.camera.clone();
|
|
95
94
|
scene.add(shadowCamera);
|
|
96
95
|
shadowCamera.position.copy(shadowGround.position);
|
|
@@ -101,22 +100,22 @@ function createBakedShadow(scene, options) {
|
|
|
101
100
|
renderer.render(scene, shadowCamera);
|
|
102
101
|
var shadowCanvas = copyRenderTargetToCanvas(renderer, renderTarget);
|
|
103
102
|
var blurredCanvas = applyShadowEffects(shadowCanvas, config);
|
|
104
|
-
scene.remove(shadowCamera, shadowGround, shadowLight);
|
|
103
|
+
scene.remove(shadowCamera, shadowGround, shadowLight);
|
|
105
104
|
|
|
105
|
+
// turn off shadows, activate lights
|
|
106
106
|
scene.traverse(function (object) {
|
|
107
107
|
if (object.isMesh) {
|
|
108
108
|
object.castShadow = false;
|
|
109
109
|
}
|
|
110
|
-
|
|
111
110
|
if (object.isLight) {
|
|
112
111
|
object.visible = true;
|
|
113
112
|
}
|
|
114
|
-
});
|
|
113
|
+
});
|
|
115
114
|
|
|
115
|
+
// restore original values
|
|
116
116
|
scene.environment = environment;
|
|
117
117
|
scene.background = background;
|
|
118
118
|
renderer.dispose();
|
|
119
|
-
|
|
120
119
|
if (withMaterial) {
|
|
121
120
|
var texture = new _three.CanvasTexture(blurredCanvas);
|
|
122
121
|
texture.flipY = false;
|
|
@@ -125,13 +124,11 @@ function createBakedShadow(scene, options) {
|
|
|
125
124
|
transparent: true
|
|
126
125
|
});
|
|
127
126
|
}
|
|
128
|
-
|
|
129
127
|
return blurredCanvas;
|
|
130
128
|
}
|
|
131
|
-
|
|
132
129
|
function copyRenderTargetToCanvas(renderer, renderTarget, dstCanvas) {
|
|
133
130
|
var width = renderTarget.width,
|
|
134
|
-
|
|
131
|
+
height = renderTarget.height;
|
|
135
132
|
var pixelBuffer = new Uint8ClampedArray(4 * width * height);
|
|
136
133
|
renderer.readRenderTargetPixels(renderTarget, 0, 0, width, height, pixelBuffer);
|
|
137
134
|
var imageData = new ImageData(pixelBuffer, width, height);
|
|
@@ -142,16 +139,15 @@ function copyRenderTargetToCanvas(renderer, renderTarget, dstCanvas) {
|
|
|
142
139
|
ctx.putImageData(imageData, 0, 0);
|
|
143
140
|
return canvas;
|
|
144
141
|
}
|
|
145
|
-
|
|
146
142
|
function applyShadowEffects(canvas, config) {
|
|
147
143
|
var _config$shadowTexture = config.shadowTextureScaling,
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
144
|
+
shadowTextureScaling = _config$shadowTexture === void 0 ? 0.96 : _config$shadowTexture,
|
|
145
|
+
_config$blurRadius = config.blurRadius,
|
|
146
|
+
blurRadius = _config$blurRadius === void 0 ? 6 : _config$blurRadius,
|
|
147
|
+
_config$shadowOpacity = config.shadowOpacity,
|
|
148
|
+
shadowOpacity = _config$shadowOpacity === void 0 ? 0.8 : _config$shadowOpacity;
|
|
153
149
|
var width = canvas.width,
|
|
154
|
-
|
|
150
|
+
height = canvas.height;
|
|
155
151
|
var blurCanvas = document.createElement("canvas");
|
|
156
152
|
blurCanvas.width = width;
|
|
157
153
|
blurCanvas.height = height;
|
package/Utils/createCache.js
CHANGED
|
@@ -4,23 +4,19 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createCache = createCache;
|
|
7
|
-
|
|
8
7
|
function createCache(maxSize) {
|
|
9
8
|
var storage = new Map();
|
|
10
9
|
var sizeLimit = maxSize - 1;
|
|
11
|
-
|
|
12
10
|
function removeLeastRecentlyUsedEntries() {
|
|
13
11
|
if (storage.size > sizeLimit) {
|
|
14
12
|
var orderedList = Array.from(storage).sort(function (a, b) {
|
|
15
13
|
return b[1].time - a[1].time;
|
|
16
14
|
});
|
|
17
|
-
|
|
18
15
|
for (var i = orderedList.length - 1; i >= sizeLimit; i--) {
|
|
19
16
|
storage["delete"](orderedList[i][0]);
|
|
20
17
|
}
|
|
21
18
|
}
|
|
22
19
|
}
|
|
23
|
-
|
|
24
20
|
return {
|
|
25
21
|
get: function get(key) {
|
|
26
22
|
if (storage.has(key)) {
|
package/Utils/createCanvas.js
CHANGED
|
@@ -4,26 +4,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createWorkingCanvas = void 0;
|
|
7
|
-
|
|
8
|
-
var createWorkingCanvas = function createWorkingCanvas(sourceObject) {
|
|
7
|
+
var createWorkingCanvas = exports.createWorkingCanvas = function createWorkingCanvas(sourceObject) {
|
|
9
8
|
var copy = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
10
9
|
var width = sourceObject.width,
|
|
11
|
-
|
|
10
|
+
height = sourceObject.height;
|
|
12
11
|
var canvas = Object.assign(document.createElement("canvas"), {
|
|
13
12
|
width: width,
|
|
14
13
|
height: height
|
|
15
14
|
});
|
|
16
15
|
var ctx = canvas.getContext("2d");
|
|
17
|
-
|
|
18
16
|
if (!ctx) {
|
|
19
17
|
throw new Error("Could not get 2d context for working canvas!");
|
|
20
18
|
}
|
|
21
|
-
|
|
22
19
|
if (copy) {
|
|
23
20
|
ctx.drawImage(sourceObject, 0, 0);
|
|
24
21
|
}
|
|
25
|
-
|
|
26
22
|
return [canvas, ctx];
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
exports.createWorkingCanvas = createWorkingCanvas;
|
|
23
|
+
};
|