@headless-three/renderer 0.1.7 → 0.1.8
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/README.md +227 -52
- package/dist/attributes.d.ts +7 -5
- package/dist/attributes.d.ts.map +1 -1
- package/dist/attributes.js +112 -36
- package/dist/attributes.js.map +1 -1
- package/dist/camera.d.ts +1 -0
- package/dist/camera.d.ts.map +1 -1
- package/dist/camera.js +52 -13
- package/dist/camera.js.map +1 -1
- package/dist/clipping.d.ts +6 -0
- package/dist/clipping.d.ts.map +1 -0
- package/dist/clipping.js +84 -0
- package/dist/clipping.js.map +1 -0
- package/dist/color.d.ts +8 -3
- package/dist/color.d.ts.map +1 -1
- package/dist/color.js +136 -11
- package/dist/color.js.map +1 -1
- package/dist/index.d.ts +770 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6208 -46
- package/dist/index.js.map +1 -1
- package/dist/layers.d.ts +3 -0
- package/dist/layers.d.ts.map +1 -0
- package/dist/layers.js +33 -0
- package/dist/layers.js.map +1 -0
- package/dist/lights.d.ts +5 -4
- package/dist/lights.d.ts.map +1 -1
- package/dist/lights.js +473 -77
- package/dist/lights.js.map +1 -1
- package/dist/loaders.d.ts +92 -0
- package/dist/loaders.d.ts.map +1 -0
- package/dist/loaders.js +858 -0
- package/dist/loaders.js.map +1 -0
- package/dist/materials.d.ts +38 -6
- package/dist/materials.d.ts.map +1 -1
- package/dist/materials.js +4236 -162
- package/dist/materials.js.map +1 -1
- package/dist/math.js +2 -2
- package/dist/math.js.map +1 -1
- package/dist/morphs.d.ts.map +1 -1
- package/dist/morphs.js +50 -15
- package/dist/morphs.js.map +1 -1
- package/dist/objects.d.ts +4 -0
- package/dist/objects.d.ts.map +1 -0
- package/dist/objects.js +25 -0
- package/dist/objects.js.map +1 -0
- package/dist/scene.d.ts +251 -2
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +3679 -105
- package/dist/scene.js.map +1 -1
- package/dist/skinning.d.ts.map +1 -1
- package/dist/skinning.js +37 -18
- package/dist/skinning.js.map +1 -1
- package/dist/types.d.ts +1261 -12
- package/dist/types.d.ts.map +1 -1
- package/native.d.ts +761 -3
- package/native.js +54 -52
- package/package.json +20 -9
package/dist/attributes.js
CHANGED
|
@@ -1,63 +1,89 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getAttribute = getAttribute;
|
|
4
|
+
exports.geometryAttributes = geometryAttributes;
|
|
4
5
|
exports.readVec3Attribute = readVec3Attribute;
|
|
5
6
|
exports.readVec2Attribute = readVec2Attribute;
|
|
6
7
|
exports.readColorAttribute = readColorAttribute;
|
|
7
8
|
exports.readIndexAttribute = readIndexAttribute;
|
|
9
|
+
exports.attributeCount = attributeCount;
|
|
8
10
|
exports.attributeComponent = attributeComponent;
|
|
9
11
|
const math_1 = require("./math");
|
|
12
|
+
const COMPONENT_LABELS = ['x', 'y', 'z', 'w'];
|
|
10
13
|
function getAttribute(geometry, name) {
|
|
14
|
+
const attributes = geometryAttributes(geometry);
|
|
11
15
|
if (typeof geometry.getAttribute === 'function') {
|
|
12
16
|
return geometry.getAttribute(name);
|
|
13
17
|
}
|
|
14
|
-
return
|
|
18
|
+
return attributes[name];
|
|
15
19
|
}
|
|
16
|
-
function
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
function geometryAttributes(geometry) {
|
|
21
|
+
const attributes = geometry.attributes;
|
|
22
|
+
if (attributes == null)
|
|
23
|
+
return {};
|
|
24
|
+
if (typeof attributes !== 'object' || Array.isArray(attributes)) {
|
|
25
|
+
throw new TypeError('geometry.attributes must be an object.');
|
|
19
26
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
27
|
+
return attributes;
|
|
28
|
+
}
|
|
29
|
+
function readVec3Attribute(attribute, label = 'THREE.BufferAttribute') {
|
|
30
|
+
const count = attributeCount(attribute, label);
|
|
31
|
+
const values = new Array(count * 3);
|
|
32
|
+
for (let i = 0; i < count; i += 1) {
|
|
33
|
+
values[i * 3] = attributeComponent(attribute, i, 0, label);
|
|
34
|
+
values[i * 3 + 1] = attributeComponent(attribute, i, 1, label);
|
|
35
|
+
values[i * 3 + 2] = attributeComponent(attribute, i, 2, label);
|
|
25
36
|
}
|
|
26
37
|
return values;
|
|
27
38
|
}
|
|
28
|
-
function readVec2Attribute(attribute) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
values[i * 2] = attributeComponent(attribute, i, 0);
|
|
35
|
-
values[i * 2 + 1] = attributeComponent(attribute, i, 1);
|
|
39
|
+
function readVec2Attribute(attribute, label = 'THREE.BufferAttribute') {
|
|
40
|
+
const count = attributeCount(attribute, label);
|
|
41
|
+
const values = new Array(count * 2);
|
|
42
|
+
for (let i = 0; i < count; i += 1) {
|
|
43
|
+
values[i * 2] = attributeComponent(attribute, i, 0, label);
|
|
44
|
+
values[i * 2 + 1] = attributeComponent(attribute, i, 1, label);
|
|
36
45
|
}
|
|
37
46
|
return values;
|
|
38
47
|
}
|
|
39
|
-
function readColorAttribute(attribute,
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
values[i * 4
|
|
45
|
-
values[i * 4 +
|
|
46
|
-
values[i * 4 +
|
|
48
|
+
function readColorAttribute(attribute, _materialColor, label = 'THREE.BufferAttribute') {
|
|
49
|
+
const count = attributeCount(attribute, label);
|
|
50
|
+
const itemSize = attributeItemSize(attribute, label) ?? 3;
|
|
51
|
+
const values = new Array(count * 4);
|
|
52
|
+
for (let i = 0; i < count; i += 1) {
|
|
53
|
+
values[i * 4] = (0, math_1.clamp01)(attributeComponent(attribute, i, 0, label));
|
|
54
|
+
values[i * 4 + 1] = (0, math_1.clamp01)(attributeComponent(attribute, i, 1, label));
|
|
55
|
+
values[i * 4 + 2] = (0, math_1.clamp01)(attributeComponent(attribute, i, 2, label));
|
|
56
|
+
values[i * 4 + 3] = (0, math_1.clamp01)(itemSize >= 4 ? attributeComponent(attribute, i, 3, label) : 1);
|
|
47
57
|
}
|
|
48
58
|
return values;
|
|
49
59
|
}
|
|
50
|
-
function readIndexAttribute(attribute) {
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
60
|
+
function readIndexAttribute(attribute, label = 'THREE.BufferAttribute', vertexCount) {
|
|
61
|
+
const count = attributeCount(attribute, label);
|
|
62
|
+
const values = new Array(count);
|
|
63
|
+
for (let i = 0; i < count; i += 1) {
|
|
64
|
+
const value = attributeComponent(attribute, i, 0, label);
|
|
65
|
+
if (!Number.isInteger(value) || value < 0) {
|
|
66
|
+
throw new TypeError(`${label}[${i}].x must be a non-negative integer.`);
|
|
67
|
+
}
|
|
68
|
+
if (vertexCount !== undefined && value >= vertexCount) {
|
|
69
|
+
throw new RangeError(`${label}[${i}].x must reference a vertex below geometry.attributes.position.count (${vertexCount}).`);
|
|
70
|
+
}
|
|
71
|
+
values[i] = value;
|
|
54
72
|
}
|
|
55
73
|
return values;
|
|
56
74
|
}
|
|
57
|
-
function
|
|
58
|
-
if (
|
|
75
|
+
function attributeCount(attribute, label) {
|
|
76
|
+
if (Number.isInteger(attribute.count) && attribute.count >= 0)
|
|
77
|
+
return attribute.count;
|
|
78
|
+
throw new TypeError(`${label}.count must be a non-negative integer.`);
|
|
79
|
+
}
|
|
80
|
+
function attributeComponent(attribute, index, component, label = 'THREE.BufferAttribute') {
|
|
81
|
+
rejectPackedAttribute(attribute, label);
|
|
82
|
+
const itemSize = attributeItemSize(attribute, label) ?? 1;
|
|
83
|
+
if (component >= itemSize)
|
|
59
84
|
return 0;
|
|
60
85
|
let value;
|
|
86
|
+
let readFromRawArray = false;
|
|
61
87
|
if (component === 0 && typeof attribute.getX === 'function')
|
|
62
88
|
value = attribute.getX(index);
|
|
63
89
|
else if (component === 1 && typeof attribute.getY === 'function')
|
|
@@ -67,15 +93,57 @@ function attributeComponent(attribute, index, component) {
|
|
|
67
93
|
else if (component === 3 && typeof attribute.getW === 'function')
|
|
68
94
|
value = attribute.getW(index);
|
|
69
95
|
else {
|
|
70
|
-
const
|
|
71
|
-
const
|
|
72
|
-
const
|
|
96
|
+
const data = attributeData(attribute, label);
|
|
97
|
+
const array = attribute.array ?? data?.array;
|
|
98
|
+
const stride = attributeStride(attribute, label) ?? itemSize;
|
|
99
|
+
const offset = attributeOffset(attribute, label);
|
|
73
100
|
value = array?.[index * stride + offset + component];
|
|
101
|
+
readFromRawArray = true;
|
|
74
102
|
}
|
|
75
103
|
if (!Number.isFinite(value)) {
|
|
76
|
-
throw new TypeError(
|
|
104
|
+
throw new TypeError(`${label}[${index}].${COMPONENT_LABELS[component] ?? component} must be a finite number.`);
|
|
77
105
|
}
|
|
78
|
-
return attribute
|
|
106
|
+
return attributeNormalized(attribute, label) && readFromRawArray
|
|
107
|
+
? normalizeAttributeValue(value, attribute.array ?? attributeData(attribute, label)?.array)
|
|
108
|
+
: value;
|
|
109
|
+
}
|
|
110
|
+
function attributeItemSize(attribute, label) {
|
|
111
|
+
if (attribute.itemSize == null)
|
|
112
|
+
return undefined;
|
|
113
|
+
if (Number.isInteger(attribute.itemSize) && attribute.itemSize > 0)
|
|
114
|
+
return attribute.itemSize;
|
|
115
|
+
throw new TypeError(`${label}.itemSize must be a positive integer.`);
|
|
116
|
+
}
|
|
117
|
+
function attributeStride(attribute, label) {
|
|
118
|
+
const stride = attributeData(attribute, label)?.stride;
|
|
119
|
+
if (stride == null)
|
|
120
|
+
return undefined;
|
|
121
|
+
if (Number.isInteger(stride) && stride > 0)
|
|
122
|
+
return stride;
|
|
123
|
+
throw new TypeError(`${label}.data.stride must be a positive integer.`);
|
|
124
|
+
}
|
|
125
|
+
function attributeData(attribute, label) {
|
|
126
|
+
const data = attribute.data;
|
|
127
|
+
if (data == null)
|
|
128
|
+
return undefined;
|
|
129
|
+
if (typeof data !== 'object' || Array.isArray(data)) {
|
|
130
|
+
throw new TypeError(`${label}.data must be an object.`);
|
|
131
|
+
}
|
|
132
|
+
return data;
|
|
133
|
+
}
|
|
134
|
+
function attributeOffset(attribute, label) {
|
|
135
|
+
if (attribute.offset == null)
|
|
136
|
+
return 0;
|
|
137
|
+
if (Number.isInteger(attribute.offset) && attribute.offset >= 0)
|
|
138
|
+
return attribute.offset;
|
|
139
|
+
throw new TypeError(`${label}.offset must be a non-negative integer.`);
|
|
140
|
+
}
|
|
141
|
+
function attributeNormalized(attribute, label) {
|
|
142
|
+
if (attribute.normalized == null)
|
|
143
|
+
return false;
|
|
144
|
+
if (typeof attribute.normalized === 'boolean')
|
|
145
|
+
return attribute.normalized;
|
|
146
|
+
throw new TypeError(`${label}.normalized must be a boolean.`);
|
|
79
147
|
}
|
|
80
148
|
function normalizeAttributeValue(value, array) {
|
|
81
149
|
if (array instanceof Uint8Array || array instanceof Uint8ClampedArray)
|
|
@@ -88,4 +156,12 @@ function normalizeAttributeValue(value, array) {
|
|
|
88
156
|
return Math.max(value / 32767, -1);
|
|
89
157
|
return value;
|
|
90
158
|
}
|
|
159
|
+
function rejectPackedAttribute(attribute, label) {
|
|
160
|
+
if (attribute.isPacked !== true)
|
|
161
|
+
return;
|
|
162
|
+
const method = typeof attribute.packingMethod === 'string' && attribute.packingMethod.length > 0
|
|
163
|
+
? ` (${attribute.packingMethod})`
|
|
164
|
+
: '';
|
|
165
|
+
throw new Error(`${label} uses packed GeometryCompressionUtils data${method}, which is not supported by @headless-three/renderer. Decode packed position, normal, or UV attributes before rendering, or provide an explicit custom WGSL material path that performs the required attribute decode.`);
|
|
166
|
+
}
|
|
91
167
|
//# sourceMappingURL=attributes.js.map
|
package/dist/attributes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attributes.js","sourceRoot":"","sources":["../api/attributes.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"attributes.js","sourceRoot":"","sources":["../api/attributes.ts"],"names":[],"mappings":"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"}
|
package/dist/camera.d.ts
CHANGED
|
@@ -4,5 +4,6 @@ export declare function resolveSize(camera: ThreeCameraLike, options: RenderOpti
|
|
|
4
4
|
height: number;
|
|
5
5
|
};
|
|
6
6
|
export declare function cameraViewProjection(camera: ThreeCameraLike): Mat4;
|
|
7
|
+
export declare function cameraViewMatrix(camera: ThreeCameraLike): Mat4;
|
|
7
8
|
export declare function cameraWorldPosition(camera: ThreeCameraLike): number[];
|
|
8
9
|
//# sourceMappingURL=camera.d.ts.map
|
package/dist/camera.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../api/camera.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAMnE,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../api/camera.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAMnE,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAmC9G;AA6BD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAIlE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAE9D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,EAAE,CAerE"}
|
package/dist/camera.js
CHANGED
|
@@ -2,45 +2,84 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.resolveSize = resolveSize;
|
|
4
4
|
exports.cameraViewProjection = cameraViewProjection;
|
|
5
|
+
exports.cameraViewMatrix = cameraViewMatrix;
|
|
5
6
|
exports.cameraWorldPosition = cameraWorldPosition;
|
|
6
7
|
const math_1 = require("./math");
|
|
7
8
|
const DEFAULT_WIDTH = 512;
|
|
8
9
|
const DEFAULT_HEIGHT = 512;
|
|
9
10
|
function resolveSize(camera, options) {
|
|
10
|
-
let width = (
|
|
11
|
-
let height = (
|
|
11
|
+
let width = optionalDimension(options.width, 'options.width') ?? optionalDimension(options.target?.width, 'target.width');
|
|
12
|
+
let height = optionalDimension(options.height, 'options.height') ?? optionalDimension(options.target?.height, 'target.height');
|
|
13
|
+
let widthLabel = options.width != null ? 'options.width' : options.target?.width != null ? 'target.width' : 'output width';
|
|
14
|
+
let heightLabel = options.height != null ? 'options.height' : options.target?.height != null ? 'target.height' : 'output height';
|
|
12
15
|
if (width == null && height == null) {
|
|
13
|
-
|
|
14
|
-
|
|
16
|
+
const userData = cameraUserData(camera);
|
|
17
|
+
width = optionalDimension(userData?.width, 'camera.userData.width') ?? DEFAULT_WIDTH;
|
|
18
|
+
height = optionalDimension(userData?.height, 'camera.userData.height');
|
|
19
|
+
widthLabel = userData?.width != null ? 'camera.userData.width' : 'output width';
|
|
20
|
+
heightLabel = userData?.height != null ? 'camera.userData.height' : 'output height';
|
|
15
21
|
}
|
|
16
|
-
if (height == null && width != null &&
|
|
17
|
-
|
|
22
|
+
if (height == null && width != null && camera.aspect != null) {
|
|
23
|
+
const aspect = requiredPositiveFiniteNumber(camera.aspect, 'camera.aspect');
|
|
24
|
+
height = Math.round(width / aspect);
|
|
25
|
+
heightLabel = 'camera.aspect-derived height';
|
|
18
26
|
}
|
|
19
|
-
if (width == null && height != null &&
|
|
20
|
-
|
|
27
|
+
if (width == null && height != null && camera.aspect != null) {
|
|
28
|
+
const aspect = requiredPositiveFiniteNumber(camera.aspect, 'camera.aspect');
|
|
29
|
+
width = Math.round(height * aspect);
|
|
30
|
+
widthLabel = 'camera.aspect-derived width';
|
|
21
31
|
}
|
|
22
32
|
width ?? (width = DEFAULT_WIDTH);
|
|
23
33
|
height ?? (height = DEFAULT_HEIGHT);
|
|
24
34
|
if (!Number.isInteger(width) || width <= 0) {
|
|
25
|
-
throw new TypeError(
|
|
35
|
+
throw new TypeError(`${widthLabel} must be a positive integer.`);
|
|
26
36
|
}
|
|
27
37
|
if (!Number.isInteger(height) || height <= 0) {
|
|
28
|
-
throw new TypeError(
|
|
38
|
+
throw new TypeError(`${heightLabel} must be a positive integer.`);
|
|
29
39
|
}
|
|
30
40
|
return { width, height };
|
|
31
41
|
}
|
|
42
|
+
function cameraUserData(camera) {
|
|
43
|
+
const userData = camera.userData;
|
|
44
|
+
if (userData == null)
|
|
45
|
+
return undefined;
|
|
46
|
+
if (typeof userData !== 'object' || Array.isArray(userData)) {
|
|
47
|
+
throw new TypeError('camera.userData must be an object.');
|
|
48
|
+
}
|
|
49
|
+
return userData;
|
|
50
|
+
}
|
|
51
|
+
function optionalDimension(value, label) {
|
|
52
|
+
if (value == null)
|
|
53
|
+
return undefined;
|
|
54
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
55
|
+
throw new TypeError(`${label} must be a finite number.`);
|
|
56
|
+
}
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
function requiredPositiveFiniteNumber(value, label) {
|
|
60
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
61
|
+
throw new TypeError(`${label} must be a finite number.`);
|
|
62
|
+
}
|
|
63
|
+
if (value <= 0) {
|
|
64
|
+
throw new TypeError(`${label} must be positive.`);
|
|
65
|
+
}
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
32
68
|
function cameraViewProjection(camera) {
|
|
33
69
|
const projection = (0, math_1.matrixElements)(camera.projectionMatrix, 'camera.projectionMatrix');
|
|
34
70
|
const view = (0, math_1.matrixElements)(camera.matrixWorldInverse, 'camera.matrixWorldInverse');
|
|
35
71
|
return (0, math_1.multiplyMatrices)(math_1.OPENGL_TO_WGPU_CLIP, (0, math_1.multiplyMatrices)(projection, view));
|
|
36
72
|
}
|
|
73
|
+
function cameraViewMatrix(camera) {
|
|
74
|
+
return (0, math_1.matrixElements)(camera.matrixWorldInverse, 'camera.matrixWorldInverse');
|
|
75
|
+
}
|
|
37
76
|
function cameraWorldPosition(camera) {
|
|
38
|
-
if (camera.matrixWorld
|
|
39
|
-
const e = camera.matrixWorld.
|
|
77
|
+
if (camera.matrixWorld != null) {
|
|
78
|
+
const e = (0, math_1.matrixElements)(camera.matrixWorld, 'camera.matrixWorld');
|
|
40
79
|
return [e[12], e[13], e[14]];
|
|
41
80
|
}
|
|
42
81
|
if (camera.matrixWorldInverse?.elements) {
|
|
43
|
-
const e = camera.matrixWorldInverse.
|
|
82
|
+
const e = (0, math_1.matrixElements)(camera.matrixWorldInverse, 'camera.matrixWorldInverse');
|
|
44
83
|
const tx = e[12], ty = e[13], tz = e[14];
|
|
45
84
|
return [
|
|
46
85
|
-(e[0] * tx + e[1] * ty + e[2] * tz),
|
package/dist/camera.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera.js","sourceRoot":"","sources":["../api/camera.ts"],"names":[],"mappings":";;AAMA,
|
|
1
|
+
{"version":3,"file":"camera.js","sourceRoot":"","sources":["../api/camera.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ThreePlaneLike } from './types';
|
|
2
|
+
export declare const MAX_CLIPPING_PLANES = 8;
|
|
3
|
+
export type NativeClippingPlane = [number, number, number, number];
|
|
4
|
+
export declare function extractClippingPlanes(input: readonly ThreePlaneLike[] | null | undefined, label?: string, maxPlanes?: number): NativeClippingPlane[];
|
|
5
|
+
export declare function flattenClippingPlanes(planes: readonly NativeClippingPlane[]): number[] | undefined;
|
|
6
|
+
//# sourceMappingURL=clipping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipping.d.ts","sourceRoot":"","sources":["../api/clipping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,MAAM,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAElE,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI,GAAG,SAAS,EACnD,KAAK,SAAmB,EACxB,SAAS,SAAsB,GAC9B,mBAAmB,EAAE,CAmBvB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,GAAG,MAAM,EAAE,GAAG,SAAS,CAGlG"}
|
package/dist/clipping.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_CLIPPING_PLANES = void 0;
|
|
4
|
+
exports.extractClippingPlanes = extractClippingPlanes;
|
|
5
|
+
exports.flattenClippingPlanes = flattenClippingPlanes;
|
|
6
|
+
exports.MAX_CLIPPING_PLANES = 8;
|
|
7
|
+
function extractClippingPlanes(input, label = 'clippingPlanes', maxPlanes = exports.MAX_CLIPPING_PLANES) {
|
|
8
|
+
if (input == null)
|
|
9
|
+
return [];
|
|
10
|
+
if (!Array.isArray(input)) {
|
|
11
|
+
throw new TypeError(`${label} must be an array of clipping planes.`);
|
|
12
|
+
}
|
|
13
|
+
if (input.length === 0)
|
|
14
|
+
return [];
|
|
15
|
+
const planes = [];
|
|
16
|
+
for (let i = 0; i < input.length; i += 1) {
|
|
17
|
+
const parsed = parseClippingPlane(input[i], `${label}[${i}]`);
|
|
18
|
+
if (!parsed)
|
|
19
|
+
continue;
|
|
20
|
+
if (planes.length >= maxPlanes) {
|
|
21
|
+
throw new Error(`${label} exceeds the remaining native clipping plane budget (${maxPlanes} of ${exports.MAX_CLIPPING_PLANES} remaining). @headless-three/renderer supports at most ${exports.MAX_CLIPPING_PLANES} active global, group, and material clipping planes; reduce the active planes or render separate passes.`);
|
|
22
|
+
}
|
|
23
|
+
planes.push(parsed);
|
|
24
|
+
}
|
|
25
|
+
return planes;
|
|
26
|
+
}
|
|
27
|
+
function flattenClippingPlanes(planes) {
|
|
28
|
+
if (planes.length === 0)
|
|
29
|
+
return undefined;
|
|
30
|
+
return planes.flatMap((plane) => plane);
|
|
31
|
+
}
|
|
32
|
+
function parseClippingPlane(plane, label) {
|
|
33
|
+
if (!plane)
|
|
34
|
+
return null;
|
|
35
|
+
if (isArrayLike(plane)) {
|
|
36
|
+
if (plane.length < 4) {
|
|
37
|
+
throw new TypeError(`${label} must contain four finite numbers.`);
|
|
38
|
+
}
|
|
39
|
+
return normalizedPlane([
|
|
40
|
+
requiredFiniteNumber(plane[0], `${label}[0]`),
|
|
41
|
+
requiredFiniteNumber(plane[1], `${label}[1]`),
|
|
42
|
+
requiredFiniteNumber(plane[2], `${label}[2]`),
|
|
43
|
+
requiredFiniteNumber(plane[3], `${label}[3]`),
|
|
44
|
+
], label);
|
|
45
|
+
}
|
|
46
|
+
const normal = plane.normal;
|
|
47
|
+
const constant = plane.constant;
|
|
48
|
+
const finiteConstant = requiredFiniteNumber(constant, `${label}.constant`);
|
|
49
|
+
if (isArrayLike(normal)) {
|
|
50
|
+
if (normal.length < 3) {
|
|
51
|
+
throw new TypeError(`${label}.normal must contain three finite numbers.`);
|
|
52
|
+
}
|
|
53
|
+
return normalizedPlane([
|
|
54
|
+
requiredFiniteNumber(normal[0], `${label}.normal[0]`),
|
|
55
|
+
requiredFiniteNumber(normal[1], `${label}.normal[1]`),
|
|
56
|
+
requiredFiniteNumber(normal[2], `${label}.normal[2]`),
|
|
57
|
+
finiteConstant,
|
|
58
|
+
], label);
|
|
59
|
+
}
|
|
60
|
+
const vector = normal;
|
|
61
|
+
return normalizedPlane([
|
|
62
|
+
requiredFiniteNumber(vector?.x, `${label}.normal.x`),
|
|
63
|
+
requiredFiniteNumber(vector?.y, `${label}.normal.y`),
|
|
64
|
+
requiredFiniteNumber(vector?.z, `${label}.normal.z`),
|
|
65
|
+
finiteConstant,
|
|
66
|
+
], label);
|
|
67
|
+
}
|
|
68
|
+
function normalizedPlane(values, label) {
|
|
69
|
+
const [x, y, z, constant] = values;
|
|
70
|
+
const length = Math.hypot(x, y, z);
|
|
71
|
+
if (length <= 1e-8) {
|
|
72
|
+
throw new TypeError(`${label}.normal must have non-zero finite length.`);
|
|
73
|
+
}
|
|
74
|
+
return [x / length, y / length, z / length, constant / length];
|
|
75
|
+
}
|
|
76
|
+
function isArrayLike(value) {
|
|
77
|
+
return !!value && typeof value.length === 'number';
|
|
78
|
+
}
|
|
79
|
+
function requiredFiniteNumber(value, label) {
|
|
80
|
+
if (typeof value === 'number' && Number.isFinite(value))
|
|
81
|
+
return value;
|
|
82
|
+
throw new TypeError(`${label} must be a finite number.`);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=clipping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipping.js","sourceRoot":"","sources":["../api/clipping.ts"],"names":[],"mappings":"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"}
|
package/dist/color.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import type { Color4,
|
|
1
|
+
import type { Color4, RenderOutputColorSpace, ThreeSceneRootLike, RenderOptions } from './types';
|
|
2
|
+
export declare const DEFAULT_BACKGROUND_COLOR: Color4;
|
|
2
3
|
export declare function colorLikeToArray(value: unknown): Color4 | null;
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function
|
|
4
|
+
export declare function strictColorLikeToArray(value: unknown, label: string): Color4 | null;
|
|
5
|
+
export declare function validatedColorLikeToArray(value: unknown, label: string): Color4 | null;
|
|
6
|
+
export declare function cssColorStringToArray(value: string, label: string): Color4;
|
|
7
|
+
export declare function cssColorStringToLinearArray(value: string, label: string): Color4;
|
|
8
|
+
export declare function normalizeColorArray(values: number[], label?: string): Color4;
|
|
9
|
+
export declare function resolveBackground(scene: ThreeSceneRootLike, options: RenderOptions, hasBackgroundTexture?: boolean, fallbackBackground?: Color4, outputColorSpace?: RenderOutputColorSpace | undefined): Color4;
|
|
5
10
|
//# sourceMappingURL=color.d.ts.map
|
package/dist/color.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../api/color.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAkB,
|
|
1
|
+
{"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../api/color.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAkB,kBAAkB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAqBhH,eAAO,MAAM,wBAAwB,EAAE,MAA+B,CAAA;AAEtE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQ9D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAenF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmBtF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI1E;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhF;AAyBD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAU5E;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,aAAa,EACtB,oBAAoB,UAAQ,EAC5B,kBAAkB,GAAE,MAAiC,EACrD,gBAAgB,GAAE,sBAAsB,GAAG,SAAoC,GAC9E,MAAM,CAYR"}
|