@tresjs/core 1.3.2 → 1.4.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/dist/core/useRenderer/index.d.ts +6 -1
- package/dist/tres.js +244 -246
- package/dist/tres.umd.cjs +2 -2
- package/dist/types/index.d.ts +1 -0
- package/package.json +3 -3
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { MaybeComputedRef, MaybeElementRef } from '@vueuse/core';
|
|
2
2
|
import { WebGLRendererParameters, WebGLRenderer, ShadowMapType } from 'three';
|
|
3
3
|
import type { TextureEncoding, ToneMapping } from 'three';
|
|
4
|
+
import { TresColor } from '../../types';
|
|
4
5
|
export interface UseRendererOptions extends WebGLRendererParameters {
|
|
5
6
|
/**
|
|
6
7
|
* Enable shadows in the Renderer
|
|
@@ -10,6 +11,8 @@ export interface UseRendererOptions extends WebGLRendererParameters {
|
|
|
10
11
|
shadows?: MaybeComputedRef<boolean>;
|
|
11
12
|
/**
|
|
12
13
|
* Set the shadow map type
|
|
14
|
+
* Can be PCFShadowMap, PCFSoftShadowMap, BasicShadowMap, VSMShadowMap
|
|
15
|
+
* [see](https://threejs.org/docs/?q=we#api/en/constants/Renderer)
|
|
13
16
|
*
|
|
14
17
|
* @default PCFSoftShadowMap
|
|
15
18
|
*/
|
|
@@ -23,12 +26,14 @@ export interface UseRendererOptions extends WebGLRendererParameters {
|
|
|
23
26
|
physicallyCorrectLights?: MaybeComputedRef<boolean>;
|
|
24
27
|
/**
|
|
25
28
|
* Defines the output encoding of the renderer.
|
|
29
|
+
* Can be LinearEncoding, sRGBEncoding
|
|
26
30
|
*
|
|
27
31
|
* @default LinearEncoding
|
|
28
32
|
*/
|
|
29
33
|
outputEncoding?: MaybeComputedRef<TextureEncoding>;
|
|
30
34
|
/**
|
|
31
35
|
* Defines the tone mapping used by the renderer.
|
|
36
|
+
* Can be NoToneMapping, LinearToneMapping, ReinhardToneMapping, Uncharted2ToneMapping, CineonToneMapping, ACESFilmicToneMapping, CustomToneMapping
|
|
32
37
|
*
|
|
33
38
|
* @default NoToneMapping
|
|
34
39
|
*/
|
|
@@ -63,7 +68,7 @@ export interface UseRendererOptions extends WebGLRendererParameters {
|
|
|
63
68
|
*
|
|
64
69
|
* @default 0x000000
|
|
65
70
|
*/
|
|
66
|
-
clearColor?: MaybeComputedRef<
|
|
71
|
+
clearColor?: MaybeComputedRef<TresColor>;
|
|
67
72
|
windowSize?: MaybeComputedRef<boolean>;
|
|
68
73
|
}
|
|
69
74
|
/**
|
package/dist/tres.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v1.
|
|
3
|
+
* version: v1.4.0
|
|
4
4
|
* (c) 2022
|
|
5
5
|
* description: Declarative ThreeJS using Vue Components
|
|
6
6
|
* author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
|
|
7
7
|
*/
|
|
8
|
-
import { computed as
|
|
9
|
-
import { useWindowSize as
|
|
10
|
-
import * as
|
|
11
|
-
import { PerspectiveCamera as $, OrthographicCamera as
|
|
12
|
-
var
|
|
13
|
-
const
|
|
8
|
+
import { computed as N, watch as O, inject as L, ref as b, defineComponent as k, shallowRef as W, reactive as Ce, toRefs as ne, provide as B, onBeforeUnmount as Se, h as Q } from "vue";
|
|
9
|
+
import { useWindowSize as re, createEventHook as G, useRafFn as Me, resolveUnref as p, useElementSize as xe, useDevicePixelRatio as Ee, unrefElement as U } from "@vueuse/core";
|
|
10
|
+
import * as X from "three";
|
|
11
|
+
import { PerspectiveCamera as $, OrthographicCamera as ae, Vector3 as Pe, Color as j, BufferAttribute as Te, Clock as Re, Scene as Le, LoadingManager as be, TextureLoader as Ae, PCFShadowMap as Oe, LinearEncoding as Y, NoToneMapping as Z, WebGLRenderer as Be } from "three";
|
|
12
|
+
var $e = /* @__PURE__ */ ((e) => (e.Perspective = "Perspective", e.Orthographic = "Orthographic", e))($e || {});
|
|
13
|
+
const E = {
|
|
14
14
|
cameras: []
|
|
15
|
-
},
|
|
16
|
-
let
|
|
17
|
-
function
|
|
18
|
-
const { width: e, height:
|
|
19
|
-
function
|
|
20
|
-
if (
|
|
21
|
-
const { near:
|
|
15
|
+
}, Ie = 45;
|
|
16
|
+
let S;
|
|
17
|
+
function oe() {
|
|
18
|
+
const { width: e, height: n } = re(), { setState: r } = me();
|
|
19
|
+
function c(t = "Perspective", s) {
|
|
20
|
+
if (t === "Perspective") {
|
|
21
|
+
const { near: u, far: a, fov: o } = s || {
|
|
22
22
|
near: 0.1,
|
|
23
23
|
far: 1e3,
|
|
24
|
-
fov:
|
|
24
|
+
fov: Ie
|
|
25
25
|
};
|
|
26
|
-
|
|
26
|
+
S = new $(o, i.value, u, a), E.cameras.push(S);
|
|
27
27
|
} else {
|
|
28
|
-
const { left:
|
|
28
|
+
const { left: u, right: a, top: o, bottom: h, near: m, far: w } = s || {
|
|
29
29
|
left: -100,
|
|
30
30
|
right: 100,
|
|
31
31
|
top: 100,
|
|
@@ -33,308 +33,306 @@ function ne() {
|
|
|
33
33
|
near: 0.1,
|
|
34
34
|
far: 1e3
|
|
35
35
|
};
|
|
36
|
-
|
|
36
|
+
S = new ae(u, a, o, h, m, w), E.cameras.push(S);
|
|
37
37
|
}
|
|
38
|
-
return
|
|
38
|
+
return E.cameras.push(S), S;
|
|
39
39
|
}
|
|
40
|
-
const i =
|
|
40
|
+
const i = N(() => e.value / n.value), l = N(() => E.cameras[0]);
|
|
41
41
|
function f() {
|
|
42
42
|
l.value instanceof $ && (l.value.aspect = i.value), l.value.updateProjectionMatrix();
|
|
43
43
|
}
|
|
44
|
-
function
|
|
45
|
-
const
|
|
46
|
-
|
|
44
|
+
function g(t) {
|
|
45
|
+
const s = L("camera");
|
|
46
|
+
t && s && (s.value = t, r("camera", s.value)), E.cameras.push(t), t instanceof $ && (t.aspect = i.value), t.updateProjectionMatrix();
|
|
47
47
|
}
|
|
48
48
|
return O(i, f), {
|
|
49
49
|
activeCamera: l,
|
|
50
|
-
createCamera:
|
|
50
|
+
createCamera: c,
|
|
51
51
|
updateCamera: f,
|
|
52
|
-
pushCamera:
|
|
52
|
+
pushCamera: g
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
|
-
const
|
|
56
|
-
function
|
|
57
|
-
function e(
|
|
58
|
-
console.error(`${
|
|
55
|
+
const ee = "[TresJS ▲ ■ ●] ";
|
|
56
|
+
function _() {
|
|
57
|
+
function e(c, i) {
|
|
58
|
+
console.error(`${ee} ${c}`, i || "");
|
|
59
59
|
}
|
|
60
|
-
function
|
|
61
|
-
console.warn(`${
|
|
60
|
+
function n(c) {
|
|
61
|
+
console.warn(`${ee} ${c}`);
|
|
62
62
|
}
|
|
63
|
-
function
|
|
63
|
+
function r(c, i) {
|
|
64
64
|
}
|
|
65
65
|
return {
|
|
66
66
|
logError: e,
|
|
67
|
-
logWarning:
|
|
68
|
-
logMessage:
|
|
67
|
+
logWarning: n,
|
|
68
|
+
logMessage: r
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
|
-
const
|
|
72
|
-
delete
|
|
73
|
-
let
|
|
74
|
-
function
|
|
75
|
-
const { logMessage:
|
|
76
|
-
!
|
|
77
|
-
const { createComponentInstances: i } =
|
|
71
|
+
const R = b({ ...X, uuid: X.MathUtils.generateUUID() });
|
|
72
|
+
delete R.value.Scene;
|
|
73
|
+
let P;
|
|
74
|
+
function se(e, n = "Tres") {
|
|
75
|
+
const { logMessage: r, logError: c } = _();
|
|
76
|
+
!P && e && (P = e);
|
|
77
|
+
const { createComponentInstances: i } = ie(n);
|
|
78
78
|
return {
|
|
79
79
|
extend: (f) => {
|
|
80
80
|
if (!f) {
|
|
81
|
-
|
|
81
|
+
c("No objects provided to extend catalogue");
|
|
82
82
|
return;
|
|
83
83
|
}
|
|
84
|
-
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
84
|
+
R.value = Object.assign(R.value, f);
|
|
85
|
+
const g = i(b(f));
|
|
86
|
+
r("Adding objects to catalogue", { objects: f, catalogue: R.value.uuid }), P && g.forEach(([t, s]) => {
|
|
87
|
+
P._context.components[t] || P.component(t, s);
|
|
88
88
|
});
|
|
89
89
|
},
|
|
90
|
-
catalogue:
|
|
90
|
+
catalogue: R
|
|
91
91
|
};
|
|
92
92
|
}
|
|
93
|
-
const
|
|
94
|
-
function
|
|
95
|
-
return typeof e == "number" ? [e, e, e] : e instanceof
|
|
93
|
+
const T = (e) => typeof e < "u", _e = (e) => typeof e == "function", I = (e) => !!e && e.constructor === Array;
|
|
94
|
+
function De(e) {
|
|
95
|
+
return typeof e == "number" ? [e, e, e] : e instanceof Pe ? [e.x, e.y, e.z] : e;
|
|
96
96
|
}
|
|
97
|
-
function
|
|
98
|
-
return e instanceof
|
|
97
|
+
function Fe(e) {
|
|
98
|
+
return e instanceof j ? e : Array.isArray(e) ? new j(...e) : new j(e);
|
|
99
99
|
}
|
|
100
100
|
const ze = ["rotation", "scale", "position"];
|
|
101
|
-
function
|
|
102
|
-
const { logMessage:
|
|
103
|
-
function
|
|
104
|
-
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
|
|
101
|
+
function ie(e) {
|
|
102
|
+
const { logMessage: n, logError: r } = _();
|
|
103
|
+
function c(t, s) {
|
|
104
|
+
T(t) && T(s) && Object.entries(t).forEach(([u, a]) => {
|
|
105
|
+
const o = u.replace(/(-\w)/g, (h) => h[1].toUpperCase());
|
|
106
|
+
s.setAttribute(o, new Te(...a));
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function i(t, s) {
|
|
110
|
+
T(t) && T(s) && Object.entries(t).forEach(([u, a]) => {
|
|
111
|
+
const o = u.replace(/(-\w)/g, (h) => h[1].toUpperCase());
|
|
112
|
+
if (!(o === "args" || a === void 0)) {
|
|
113
|
+
ze.includes(o) && a && (a = De(a)), t.ref && (t.ref = s);
|
|
108
114
|
try {
|
|
109
|
-
if (
|
|
110
|
-
|
|
115
|
+
if (s[o] && T(s[o].set))
|
|
116
|
+
s[o].set(...I(a) ? a : [a]);
|
|
111
117
|
else {
|
|
112
|
-
if (a === "" && (a = !0),
|
|
118
|
+
if (a === "" && (a = !0), _e(s[o])) {
|
|
113
119
|
if (u === "center" && !a)
|
|
114
120
|
return;
|
|
115
|
-
|
|
121
|
+
s[o](...I(a) ? a : [a]);
|
|
116
122
|
return;
|
|
117
123
|
}
|
|
118
|
-
|
|
124
|
+
s[o] = a;
|
|
119
125
|
}
|
|
120
|
-
} catch (
|
|
121
|
-
|
|
126
|
+
} catch (h) {
|
|
127
|
+
r(`There was an error setting ${o} property`, h);
|
|
122
128
|
}
|
|
123
129
|
}
|
|
124
130
|
});
|
|
125
131
|
}
|
|
126
|
-
function
|
|
132
|
+
function l(t) {
|
|
127
133
|
var a;
|
|
128
|
-
const
|
|
129
|
-
if (
|
|
130
|
-
return
|
|
131
|
-
if (u.test(
|
|
134
|
+
const s = /^Symbol\(Fragment\)$/g, u = /^Symbol\(Text\)$/g;
|
|
135
|
+
if (s.test(t.type.toString()))
|
|
136
|
+
return t.children.map((o) => l(o));
|
|
137
|
+
if (u.test(t.type.toString()))
|
|
132
138
|
return;
|
|
133
139
|
{
|
|
134
|
-
const
|
|
135
|
-
let
|
|
136
|
-
return m && ((a =
|
|
140
|
+
const o = t.type.name.replace(e, ""), { catalogue: h } = se(), m = L("catalogue") || h;
|
|
141
|
+
let w;
|
|
142
|
+
return m && ((a = t == null ? void 0 : t.props) != null && a.args ? m != null && m.value[o] ? w = new m.value[o](...t.props.args) : r(`There is no ${o} in the catalogue`, m == null ? void 0 : m.value.uuid) : w = new m.value[o]()), t != null && t.props && (o === "BufferGeometry" ? c(t.props, w) : i(t.props, w)), w;
|
|
137
143
|
}
|
|
138
144
|
}
|
|
139
|
-
function
|
|
145
|
+
function f(t, s, u) {
|
|
140
146
|
if (u.default && (u != null && u.default())) {
|
|
141
|
-
const a = u.default().map((
|
|
142
|
-
return new
|
|
147
|
+
const a = u.default().map((o) => l(o));
|
|
148
|
+
return new t(...a.flat().filter(Boolean));
|
|
143
149
|
} else
|
|
144
|
-
return
|
|
150
|
+
return s.args ? new t(...s.args) : new t();
|
|
145
151
|
}
|
|
146
|
-
function
|
|
147
|
-
return Object.entries(
|
|
148
|
-
var a,
|
|
149
|
-
return (
|
|
150
|
-
}).map(([
|
|
151
|
-
const a = `${e}${
|
|
152
|
+
function g(t) {
|
|
153
|
+
return Object.entries(t.value).filter(([s, u]) => {
|
|
154
|
+
var a, o;
|
|
155
|
+
return (o = (a = u == null ? void 0 : u.prototype) == null ? void 0 : a.constructor) == null ? void 0 : o.toString().includes("class");
|
|
156
|
+
}).map(([s, u]) => {
|
|
157
|
+
const a = `${e}${s}`, o = k({
|
|
152
158
|
name: a,
|
|
153
|
-
setup(
|
|
154
|
-
const { scene:
|
|
155
|
-
let
|
|
156
|
-
return
|
|
157
|
-
sceneuuid:
|
|
158
|
-
catalogue:
|
|
159
|
-
props:
|
|
159
|
+
setup(h, { slots: m, attrs: w, ...M }) {
|
|
160
|
+
const { scene: D } = pe(), v = L("local-scene") || D, x = L("catalogue"), { pushCamera: C } = oe();
|
|
161
|
+
let y = f(u, w, m);
|
|
162
|
+
return i(w, y), (y instanceof $ || y instanceof ae) && C(y), y.isObject3D && (v == null || v.value.add(y)), v != null && v.value && y.isFog && (v.value.fog = y), M.expose(y), n(a, {
|
|
163
|
+
sceneuuid: v == null ? void 0 : v.value.uuid,
|
|
164
|
+
catalogue: x == null ? void 0 : x.value.uuid,
|
|
165
|
+
props: h,
|
|
160
166
|
slots: m.default ? m.default() : void 0,
|
|
161
|
-
attrs:
|
|
162
|
-
ctx:
|
|
163
|
-
scene:
|
|
167
|
+
attrs: w,
|
|
168
|
+
ctx: M,
|
|
169
|
+
scene: v
|
|
164
170
|
}), () => {
|
|
165
171
|
};
|
|
166
172
|
}
|
|
167
173
|
});
|
|
168
|
-
return [a,
|
|
174
|
+
return [a, o];
|
|
169
175
|
});
|
|
170
176
|
}
|
|
171
177
|
return {
|
|
172
|
-
createComponentInstances:
|
|
173
|
-
processProps:
|
|
174
|
-
createInstanceFromVNode:
|
|
178
|
+
createComponentInstances: g,
|
|
179
|
+
processProps: i,
|
|
180
|
+
createInstanceFromVNode: l
|
|
175
181
|
};
|
|
176
182
|
}
|
|
177
|
-
const
|
|
183
|
+
const ce = G(), ue = G(), le = G(), te = new Re(), { pause: Ue, resume: je, isActive: Ve } = Me(
|
|
178
184
|
() => {
|
|
179
|
-
const e =
|
|
180
|
-
|
|
185
|
+
const e = te.getElapsedTime(), n = te.getDelta();
|
|
186
|
+
ce.trigger({ delta: n, elapsed: e }), ue.trigger({ delta: n, elapsed: e }), le.trigger({ delta: n, elapsed: e });
|
|
181
187
|
},
|
|
182
188
|
{ immediate: !1 }
|
|
183
189
|
);
|
|
184
|
-
function
|
|
190
|
+
function fe() {
|
|
185
191
|
return {
|
|
186
|
-
onBeforeLoop:
|
|
187
|
-
onLoop:
|
|
188
|
-
onAfterLoop:
|
|
189
|
-
pause:
|
|
190
|
-
resume:
|
|
192
|
+
onBeforeLoop: ce.on,
|
|
193
|
+
onLoop: ue.on,
|
|
194
|
+
onAfterLoop: le.on,
|
|
195
|
+
pause: Ue,
|
|
196
|
+
resume: je,
|
|
191
197
|
isActive: Ve
|
|
192
198
|
};
|
|
193
199
|
}
|
|
194
|
-
const
|
|
195
|
-
function
|
|
200
|
+
const Ne = W(new Le());
|
|
201
|
+
function pe() {
|
|
196
202
|
return {
|
|
197
|
-
scene:
|
|
203
|
+
scene: Ne
|
|
198
204
|
};
|
|
199
205
|
}
|
|
200
|
-
function
|
|
201
|
-
const
|
|
202
|
-
return e && e.traverse((
|
|
203
|
-
|
|
204
|
-
}),
|
|
206
|
+
function ke(e) {
|
|
207
|
+
const n = { nodes: {}, materials: {} };
|
|
208
|
+
return e && e.traverse((r) => {
|
|
209
|
+
r.name && (n.nodes[r.name] = r), r.material && !n.materials[r.material.name] && (n.materials[r.material.name] = r.material);
|
|
210
|
+
}), n;
|
|
205
211
|
}
|
|
206
|
-
async function
|
|
207
|
-
const { logError: l } =
|
|
208
|
-
i && i(f),
|
|
209
|
-
const
|
|
210
|
-
(
|
|
212
|
+
async function Xe(e, n, r, c, i) {
|
|
213
|
+
const { logError: l } = _(), f = new e();
|
|
214
|
+
i && i(f), r && r(f);
|
|
215
|
+
const t = (Array.isArray(n) ? n : [n]).map(
|
|
216
|
+
(s) => new Promise((u, a) => {
|
|
211
217
|
f.load(
|
|
212
|
-
u,
|
|
213
|
-
(p) => {
|
|
214
|
-
p.scene && Object.assign(p, Ne(p.scene)), a(p);
|
|
215
|
-
},
|
|
216
218
|
s,
|
|
217
|
-
(
|
|
219
|
+
(o) => {
|
|
220
|
+
o.scene && Object.assign(o, ke(o.scene)), u(o);
|
|
221
|
+
},
|
|
222
|
+
c,
|
|
223
|
+
(o) => a(l("[useLoader] - Failed to load resource", o))
|
|
218
224
|
);
|
|
219
225
|
})
|
|
220
226
|
);
|
|
221
|
-
return
|
|
227
|
+
return I(n) ? await Promise.all(t) : await t[0];
|
|
222
228
|
}
|
|
223
|
-
async function
|
|
224
|
-
const
|
|
225
|
-
|
|
229
|
+
async function Ye(e) {
|
|
230
|
+
const n = new be(), r = new Ae(n), c = (i) => new Promise((l, f) => {
|
|
231
|
+
r.load(
|
|
226
232
|
i,
|
|
227
|
-
(
|
|
233
|
+
(g) => l(g),
|
|
228
234
|
() => null,
|
|
229
235
|
() => {
|
|
230
236
|
f(new Error("[useTextures] - Failed to load texture"));
|
|
231
237
|
}
|
|
232
238
|
);
|
|
233
239
|
});
|
|
234
|
-
if (
|
|
235
|
-
const i = await Promise.all(e.map((l) =>
|
|
240
|
+
if (I(e)) {
|
|
241
|
+
const i = await Promise.all(e.map((l) => c(l)));
|
|
236
242
|
return e.length > 1 ? i : i[0];
|
|
237
243
|
} else {
|
|
238
|
-
const { map: i, displacementMap: l, normalMap: f, roughnessMap:
|
|
244
|
+
const { map: i, displacementMap: l, normalMap: f, roughnessMap: g, metalnessMap: t, aoMap: s } = e;
|
|
239
245
|
return {
|
|
240
|
-
map: i ? await
|
|
241
|
-
displacementMap: l ? await
|
|
242
|
-
normalMap: f ? await
|
|
243
|
-
roughnessMap:
|
|
244
|
-
metalnessMap:
|
|
245
|
-
aoMap:
|
|
246
|
+
map: i ? await c(i) : null,
|
|
247
|
+
displacementMap: l ? await c(l) : null,
|
|
248
|
+
normalMap: f ? await c(f) : null,
|
|
249
|
+
roughnessMap: g ? await c(g) : null,
|
|
250
|
+
metalnessMap: t ? await c(t) : null,
|
|
251
|
+
aoMap: s ? await c(s) : null
|
|
246
252
|
};
|
|
247
253
|
}
|
|
248
254
|
}
|
|
249
|
-
const
|
|
250
|
-
function
|
|
251
|
-
function e(
|
|
252
|
-
return
|
|
255
|
+
const A = Ce({});
|
|
256
|
+
function me() {
|
|
257
|
+
function e(r) {
|
|
258
|
+
return A[r];
|
|
253
259
|
}
|
|
254
|
-
function
|
|
255
|
-
|
|
260
|
+
function n(r, c) {
|
|
261
|
+
A[r] = c;
|
|
256
262
|
}
|
|
257
263
|
return {
|
|
258
|
-
state:
|
|
259
|
-
...
|
|
264
|
+
state: A,
|
|
265
|
+
...ne(A),
|
|
260
266
|
getState: e,
|
|
261
|
-
setState:
|
|
267
|
+
setState: n
|
|
262
268
|
};
|
|
263
269
|
}
|
|
264
|
-
const d =
|
|
265
|
-
function
|
|
270
|
+
const d = W(), V = b(!1);
|
|
271
|
+
function We(e, n, r) {
|
|
266
272
|
const {
|
|
267
|
-
alpha:
|
|
268
|
-
antialias: i,
|
|
273
|
+
alpha: c = !0,
|
|
274
|
+
antialias: i = !0,
|
|
269
275
|
depth: l,
|
|
270
276
|
logarithmicDepthBuffer: f,
|
|
271
|
-
failIfMajorPerformanceCaveat:
|
|
272
|
-
precision:
|
|
273
|
-
premultipliedAlpha:
|
|
274
|
-
stencil:
|
|
275
|
-
shadows:
|
|
276
|
-
shadowMapType:
|
|
277
|
-
physicallyCorrectLights:
|
|
278
|
-
outputEncoding:
|
|
279
|
-
toneMapping:
|
|
280
|
-
toneMappingExposure:
|
|
281
|
-
context:
|
|
282
|
-
powerPreference:
|
|
283
|
-
preserveDrawingBuffer:
|
|
284
|
-
clearColor:
|
|
285
|
-
windowSize:
|
|
286
|
-
} =
|
|
287
|
-
d.value && (d.value.setSize(
|
|
277
|
+
failIfMajorPerformanceCaveat: g,
|
|
278
|
+
precision: t,
|
|
279
|
+
premultipliedAlpha: s,
|
|
280
|
+
stencil: u,
|
|
281
|
+
shadows: a = !1,
|
|
282
|
+
shadowMapType: o = Oe,
|
|
283
|
+
physicallyCorrectLights: h = !1,
|
|
284
|
+
outputEncoding: m = Y,
|
|
285
|
+
toneMapping: w = Z,
|
|
286
|
+
toneMappingExposure: M = 1,
|
|
287
|
+
context: D = void 0,
|
|
288
|
+
powerPreference: v = "default",
|
|
289
|
+
preserveDrawingBuffer: x = !1,
|
|
290
|
+
clearColor: C,
|
|
291
|
+
windowSize: y = !1
|
|
292
|
+
} = ne(r), { width: F, height: z } = p(y) ? re() : xe(n), { pixelRatio: H } = Ee(), { pause: de, resume: ge } = fe(), he = N(() => F.value / z.value), K = () => {
|
|
293
|
+
d.value && (d.value.setSize(F.value, z.value), d.value.setPixelRatio(Math.min(H.value, 2)));
|
|
288
294
|
}, J = () => {
|
|
289
|
-
d.value && (d.value.shadowMap.enabled =
|
|
290
|
-
},
|
|
291
|
-
const
|
|
292
|
-
if (d.value || !
|
|
295
|
+
d.value && (d.value.shadowMap.enabled = p(a), d.value.shadowMap.type = p(o), d.value.toneMapping = p(w) || Z, d.value.toneMappingExposure = p(M), d.value.outputEncoding = p(m) || Y, C != null && C.value && d.value.setClearColor(Fe(p(C))), d.value.physicallyCorrectLights = p(h));
|
|
296
|
+
}, we = () => {
|
|
297
|
+
const q = U(e);
|
|
298
|
+
if (d.value || !q)
|
|
293
299
|
return;
|
|
294
|
-
d.value = new
|
|
295
|
-
canvas:
|
|
296
|
-
alpha:
|
|
297
|
-
antialias: i,
|
|
298
|
-
context:
|
|
299
|
-
depth: l,
|
|
300
|
-
failIfMajorPerformanceCaveat:
|
|
301
|
-
logarithmicDepthBuffer: f,
|
|
302
|
-
powerPreference:
|
|
303
|
-
precision:
|
|
304
|
-
stencil:
|
|
305
|
-
preserveDrawingBuffer:
|
|
306
|
-
premultipliedAlpha:
|
|
300
|
+
d.value = new Be({
|
|
301
|
+
canvas: q,
|
|
302
|
+
alpha: p(c),
|
|
303
|
+
antialias: p(i),
|
|
304
|
+
context: p(D),
|
|
305
|
+
depth: p(l),
|
|
306
|
+
failIfMajorPerformanceCaveat: p(g),
|
|
307
|
+
logarithmicDepthBuffer: p(f),
|
|
308
|
+
powerPreference: p(v),
|
|
309
|
+
precision: p(t),
|
|
310
|
+
stencil: p(u),
|
|
311
|
+
preserveDrawingBuffer: p(x),
|
|
312
|
+
premultipliedAlpha: p(s)
|
|
307
313
|
});
|
|
308
|
-
const { setState:
|
|
309
|
-
|
|
310
|
-
},
|
|
311
|
-
d.value && (d.value.dispose(), d.value = void 0, V.value = !1,
|
|
314
|
+
const { setState: ye } = me();
|
|
315
|
+
ye("renderer", d.value), J(), K(), ge(), V.value = !0;
|
|
316
|
+
}, ve = () => {
|
|
317
|
+
d.value && (d.value.dispose(), d.value = void 0, V.value = !1, de());
|
|
312
318
|
};
|
|
313
|
-
return O([
|
|
314
|
-
|
|
315
|
-
c,
|
|
316
|
-
p,
|
|
317
|
-
g,
|
|
318
|
-
m,
|
|
319
|
-
v,
|
|
320
|
-
R,
|
|
321
|
-
h
|
|
322
|
-
],
|
|
319
|
+
return O([F, z, H], K), O(
|
|
320
|
+
[a, o, m, h, w, M, C],
|
|
323
321
|
J
|
|
324
322
|
), O(
|
|
325
|
-
() => [e,
|
|
323
|
+
() => [e, n],
|
|
326
324
|
() => {
|
|
327
|
-
|
|
325
|
+
U(e) && U(n) && we();
|
|
328
326
|
},
|
|
329
327
|
{ immediate: !0, deep: !0 }
|
|
330
328
|
), {
|
|
331
329
|
renderer: d,
|
|
332
330
|
isReady: V,
|
|
333
|
-
dispose:
|
|
334
|
-
aspectRatio:
|
|
331
|
+
dispose: ve,
|
|
332
|
+
aspectRatio: he
|
|
335
333
|
};
|
|
336
334
|
}
|
|
337
|
-
const
|
|
335
|
+
const Ge = k({
|
|
338
336
|
name: "TresCanvas",
|
|
339
337
|
props: {
|
|
340
338
|
shadows: Boolean,
|
|
@@ -349,14 +347,14 @@ const We = N({
|
|
|
349
347
|
clearColor: String,
|
|
350
348
|
windowSize: Boolean
|
|
351
349
|
},
|
|
352
|
-
setup(e, { slots:
|
|
353
|
-
const { logError:
|
|
354
|
-
return
|
|
355
|
-
var
|
|
356
|
-
return (
|
|
357
|
-
}) &&
|
|
358
|
-
if (
|
|
359
|
-
return
|
|
350
|
+
setup(e, { slots: n, attrs: r }) {
|
|
351
|
+
const { logError: c } = _(), i = b(), l = b(), { renderer: f, dispose: g, aspectRatio: t } = We(i, l, e), s = W();
|
|
352
|
+
return B("camera", s), B("renderer", f), B("aspect-ratio", t), n.default && !n.default().some((u) => u.type.name === "Scene") && c("TresCanvas must contain a Scene component."), n.default && !n.default().some((u) => {
|
|
353
|
+
var a;
|
|
354
|
+
return (a = u.type.name) == null ? void 0 : a.includes("Camera");
|
|
355
|
+
}) && c("Scene must contain a Camera component."), Se(() => g()), () => {
|
|
356
|
+
if (n.default)
|
|
357
|
+
return Q(
|
|
360
358
|
"div",
|
|
361
359
|
{
|
|
362
360
|
ref: l,
|
|
@@ -364,57 +362,57 @@ const We = N({
|
|
|
364
362
|
position: "relative",
|
|
365
363
|
width: "100%",
|
|
366
364
|
height: "100vh",
|
|
367
|
-
...
|
|
365
|
+
...r.style
|
|
368
366
|
}
|
|
369
367
|
},
|
|
370
368
|
[
|
|
371
|
-
|
|
369
|
+
Q("canvas", {
|
|
372
370
|
ref: i,
|
|
373
371
|
style: { width: "100%", height: "100%", position: "absolute", top: 0, left: 0 }
|
|
374
372
|
}),
|
|
375
|
-
|
|
373
|
+
n.default()
|
|
376
374
|
]
|
|
377
375
|
);
|
|
378
376
|
};
|
|
379
377
|
}
|
|
380
|
-
}), He =
|
|
378
|
+
}), He = k({
|
|
381
379
|
name: "Scene",
|
|
382
|
-
setup(e, { slots:
|
|
383
|
-
const { scene:
|
|
384
|
-
return
|
|
385
|
-
|
|
380
|
+
setup(e, { slots: n }) {
|
|
381
|
+
const { scene: r } = pe(), c = L("renderer"), { activeCamera: i } = oe(), { onLoop: l } = fe();
|
|
382
|
+
return B("local-scene", r), l(() => {
|
|
383
|
+
c != null && c.value && (i != null && i.value) && (r != null && r.value) && c.value.render(r == null ? void 0 : r.value, i.value);
|
|
386
384
|
}), () => {
|
|
387
|
-
if (
|
|
388
|
-
return
|
|
385
|
+
if (n.default)
|
|
386
|
+
return n.default();
|
|
389
387
|
};
|
|
390
388
|
}
|
|
391
|
-
}),
|
|
392
|
-
install(e,
|
|
393
|
-
const
|
|
394
|
-
e.component(`${
|
|
395
|
-
const { catalogue:
|
|
396
|
-
e.provide("catalogue",
|
|
397
|
-
const { createComponentInstances: l } =
|
|
398
|
-
l(
|
|
399
|
-
e.component(
|
|
389
|
+
}), Ze = Symbol("UseTresState"), Ke = "1.4.0", et = {
|
|
390
|
+
install(e, n) {
|
|
391
|
+
const r = (n == null ? void 0 : n.prefix) || "Tres";
|
|
392
|
+
e.component(`${r}Canvas`, Ge), e.component(`${r}Scene`, He);
|
|
393
|
+
const { catalogue: c, extend: i } = se(e, r);
|
|
394
|
+
e.provide("catalogue", c), e.provide("extend", i);
|
|
395
|
+
const { createComponentInstances: l } = ie(r);
|
|
396
|
+
l(c).forEach(([g, t]) => {
|
|
397
|
+
e.component(g, t);
|
|
400
398
|
}), window.__TRES__ = {
|
|
401
399
|
app: e,
|
|
402
|
-
version:
|
|
400
|
+
version: Ke
|
|
403
401
|
};
|
|
404
402
|
}
|
|
405
403
|
};
|
|
406
404
|
export {
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
405
|
+
$e as CameraType,
|
|
406
|
+
Ze as UseTresStateSymbol,
|
|
407
|
+
et as default,
|
|
408
|
+
ke as trasverseObjects,
|
|
409
|
+
oe as useCamera,
|
|
410
|
+
se as useCatalogue,
|
|
411
|
+
ie as useInstanceCreator,
|
|
412
|
+
Xe as useLoader,
|
|
413
|
+
fe as useRenderLoop,
|
|
414
|
+
We as useRenderer,
|
|
415
|
+
pe as useScene,
|
|
416
|
+
Ye as useTexture,
|
|
417
|
+
me as useTres
|
|
420
418
|
};
|
package/dist/tres.umd.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v1.
|
|
3
|
+
* version: v1.4.0
|
|
4
4
|
* (c) 2022
|
|
5
5
|
* description: Declarative ThreeJS using Vue Components
|
|
6
6
|
* author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
|
|
7
7
|
*/
|
|
8
|
-
(function(d,i){typeof exports=="object"&&typeof module<"u"?i(exports,require("vue"),require("@vueuse/core"),require("three")):typeof define=="function"&&define.amd?define(["exports","vue","@vueuse/core","three"],i):(d=typeof globalThis<"u"?globalThis:d||self,i(d.tres={},d.Vue,d.VueUseCore,d.Three))})(this,function(d,i,h,g){"use strict";function re(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const W=re(g);var q=(e=>(e.Perspective="Perspective",e.Orthographic="Orthographic",e))(q||{});const O={cameras:[]},ae=45;let P;function A(){const{width:e,height:t}=h.useWindowSize(),{setState:n}=F();function r(a="Perspective",l){if(a==="Perspective"){const{near:s,far:u,fov:m}=l||{near:.1,far:1e3,fov:ae};P=new g.PerspectiveCamera(m,c.value,s,u),O.cameras.push(P)}else{const{left:s,right:u,top:m,bottom:C,near:y,far:M}=l||{left:-100,right:100,top:100,bottom:-100,near:.1,far:1e3};P=new g.OrthographicCamera(s,u,m,C,y,M),O.cameras.push(P)}return O.cameras.push(P),P}const c=i.computed(()=>e.value/t.value),f=i.computed(()=>O.cameras[0]);function p(){f.value instanceof g.PerspectiveCamera&&(f.value.aspect=c.value),f.value.updateProjectionMatrix()}function o(a){const l=i.inject("camera");a&&l&&(l.value=a,n("camera",l.value)),O.cameras.push(a),a instanceof g.PerspectiveCamera&&(a.aspect=c.value),a.updateProjectionMatrix()}return i.watch(c,p),{activeCamera:f,createCamera:r,updateCamera:p,pushCamera:o}}const G="[TresJS ▲ ■ ●] ";function _(){function e(r,c){console.error(`${G} ${r}`,c||"")}function t(r){console.warn(`${G} ${r}`)}function n(r,c){}return{logError:e,logWarning:t,logMessage:n}}const L=i.ref({...W,uuid:W.MathUtils.generateUUID()});delete L.value.Scene;let b;function I(e,t="Tres"){const{logMessage:n,logError:r}=_();!b&&e&&(b=e);const{createComponentInstances:c}=z(t);return{extend:p=>{if(!p){r("No objects provided to extend catalogue");return}L.value=Object.assign(L.value,p);const o=c(i.ref(p));n("Adding objects to catalogue",{objects:p,catalogue:L.value.uuid}),b&&o.forEach(([a,l])=>{b._context.components[a]||b.component(a,l)})},catalogue:L}}const $=e=>typeof e<"u",oe=e=>typeof e=="function",j=e=>!!e&&e.constructor===Array;function se(e){return typeof e=="number"?[e,e,e]:e instanceof g.Vector3?[e.x,e.y,e.z]:e}function J(e){return e instanceof g.Color?e:Array.isArray(e)?new g.Color(...e):new g.Color(e)}const ie=["rotation","scale","position"];function z(e){const{logMessage:t,logError:n}=_();function r(o,a){$(o)&&$(a)&&Object.entries(o).forEach(([l,s])=>{const u=l.replace(/(-\w)/g,m=>m[1].toUpperCase());if(!(u==="args"||s===void 0)){ie.includes(u)&&s&&(s=se(s)),o.ref&&(o.ref=a);try{if(a[u]&&$(a[u].set))a[u].set(...j(s)?s:[s]);else{if(s===""&&(s=!0),oe(a[u])){if(l==="center"&&!s)return;a[u](...j(s)?s:[s]);return}a[u]=s}}catch(m){n(`There was an error setting ${u} property`,m)}}})}function c(o){var s;const a=/^Symbol\(Fragment\)$/g,l=/^Symbol\(Text\)$/g;if(a.test(o.type.toString()))return o.children.map(u=>c(u));if(l.test(o.type.toString()))return;{const u=o.type.name.replace(e,""),{catalogue:m}=I(),C=i.inject("catalogue")||m;let y;return C&&((s=o==null?void 0:o.props)!=null&&s.args?C!=null&&C.value[u]?y=new C.value[u](...o.props.args):n(`There is no ${u} in the catalogue`,C==null?void 0:C.value.uuid):y=new C.value[u]),o!=null&&o.props&&r(o.props,y),y}}function f(o,a,l){if(l.default&&(l!=null&&l.default())){const s=l.default().map(u=>c(u));return new o(...s.flat().filter(Boolean))}else return a.args?new o(...a.args):new o}function p(o){return Object.entries(o.value).filter(([a,l])=>{var s,u;return(u=(s=l==null?void 0:l.prototype)==null?void 0:s.constructor)==null?void 0:u.toString().includes("class")}).map(([a,l])=>{const s=`${e}${a}`,u=i.defineComponent({name:s,setup(m,{slots:C,attrs:y,...M}){const{scene:T}=D(),v=i.inject("local-scene")||T,x=i.inject("catalogue"),{pushCamera:V}=A();let S=f(l,y,C);return r(y,S),(S instanceof g.PerspectiveCamera||S instanceof g.OrthographicCamera)&&V(S),S.isObject3D&&(v==null||v.value.add(S)),M.expose(S),t(s,{sceneuuid:v==null?void 0:v.value.uuid,catalogue:x==null?void 0:x.value.uuid,props:m,slots:C.default?C.default():void 0,attrs:y,ctx:M,scene:v}),()=>{}}});return[s,u]})}return{createComponentInstances:p,processProps:r,createInstanceFromVNode:c}}const K=h.createEventHook(),Q=h.createEventHook(),X=h.createEventHook(),Y=new g.Clock,{pause:ce,resume:ue,isActive:le}=h.useRafFn(()=>{const e=Y.getElapsedTime(),t=Y.getDelta();K.trigger({delta:t,elapsed:e}),Q.trigger({delta:t,elapsed:e}),X.trigger({delta:t,elapsed:e})},{immediate:!1});function B(){return{onBeforeLoop:K.on,onLoop:Q.on,onAfterLoop:X.on,pause:ce,resume:ue,isActive:le}}const fe=i.shallowRef(new g.Scene);function D(){return{scene:fe}}function Z(e){const t={nodes:{},materials:{}};return e&&e.traverse(n=>{n.name&&(t.nodes[n.name]=n),n.material&&!t.materials[n.material.name]&&(t.materials[n.material.name]=n.material)}),t}async function pe(e,t,n,r,c){const{logError:f}=_(),p=new e;c&&c(p),n&&n(p);const a=(Array.isArray(t)?t:[t]).map(l=>new Promise((s,u)=>{p.load(l,m=>{m.scene&&Object.assign(m,Z(m.scene)),s(m)},r,m=>u(f("[useLoader] - Failed to load resource",m)))}));return j(t)?await Promise.all(a):await a[0]}async function de(e){const t=new g.LoadingManager,n=new g.TextureLoader(t),r=c=>new Promise((f,p)=>{n.load(c,o=>f(o),()=>null,()=>{p(new Error("[useTextures] - Failed to load texture"))})});if(j(e)){const c=await Promise.all(e.map(f=>r(f)));return e.length>1?c:c[0]}else{const{map:c,displacementMap:f,normalMap:p,roughnessMap:o,metalnessMap:a,aoMap:l}=e;return{map:c?await r(c):null,displacementMap:f?await r(f):null,normalMap:p?await r(p):null,roughnessMap:o?await r(o):null,metalnessMap:a?await r(a):null,aoMap:l?await r(l):null}}}const U=i.reactive({});function F(){function e(n){return U[n]}function t(n,r){U[n]=r}return{state:U,...i.toRefs(U),getState:e,setState:t}}const w=i.shallowRef(),R=i.ref(!1);function E(e,t,n){const{alpha:r=!1,antialias:c,depth:f,logarithmicDepthBuffer:p,failIfMajorPerformanceCaveat:o,precision:a,premultipliedAlpha:l,stencil:s,shadows:u=!1,shadowMapType:m=g.PCFShadowMap,physicallyCorrectLights:C=!1,outputEncoding:y=g.LinearEncoding,toneMapping:M=g.NoToneMapping,toneMappingExposure:T=1,context:v=void 0,powerPreference:x="default",preserveDrawingBuffer:V=!1,clearColor:S=J("#000000"),windowSize:ye=!1}=n,{width:k,height:N}=ye?h.useWindowSize():h.useElementSize(t),{pixelRatio:H}=h.useDevicePixelRatio(),{pause:Se,resume:ve}=B(),Me=i.computed(()=>k.value/N.value),ee=()=>{w.value&&(w.value.setSize(k.value,N.value),w.value.setPixelRatio(Math.min(H.value,2)))},te=()=>{w.value&&(w.value.shadowMap.enabled=h.resolveUnref(u),w.value.outputEncoding=h.resolveUnref(y),w.value.shadowMap.type=h.resolveUnref(m),w.value.physicallyCorrectLights=h.resolveUnref(C),w.value.toneMapping=h.resolveUnref(M),w.value.toneMappingExposure=h.resolveUnref(T),w.value.setClearColor(J(h.resolveUnref(S))))},Pe=()=>{const ne=h.unrefElement(e);if(w.value||!ne)return;w.value=new g.WebGLRenderer({canvas:ne,alpha:r,antialias:c,context:v,depth:f,failIfMajorPerformanceCaveat:o,logarithmicDepthBuffer:p,powerPreference:x,precision:a,stencil:s,preserveDrawingBuffer:V,premultipliedAlpha:l});const{setState:Le}=F();Le("renderer",w.value),te(),ee(),ve(),R.value=!0},Oe=()=>{w.value&&(w.value.dispose(),w.value=void 0,R.value=!1,Se())};return i.watch([k,N,H],ee),i.watch(()=>[u,m,y,C,M,T,S],te),i.watch(()=>[e,t],()=>{h.unrefElement(e)&&h.unrefElement(t)&&Pe()},{immediate:!0,deep:!0}),{renderer:w,isReady:R,dispose:Oe,aspectRatio:Me}}const me=i.defineComponent({name:"TresCanvas",props:{shadows:Boolean,shadowMapType:Object,physicallyCorrectLights:Boolean,outputEncoding:Object,toneMapping:Object,toneMappingExposure:Number,context:Object,powerPreference:Object,preserveDrawingBuffer:Boolean,clearColor:String,windowSize:Boolean},setup(e,{slots:t,attrs:n}){const{logError:r}=_(),c=i.ref(),f=i.ref(),{renderer:p,dispose:o,aspectRatio:a}=E(c,f,e),l=i.shallowRef();return i.provide("camera",l),i.provide("renderer",p),i.provide("aspect-ratio",a),t.default&&!t.default().some(s=>s.type.name==="Scene")&&r("TresCanvas must contain a Scene component."),t.default&&!t.default().some(s=>{var u;return(u=s.type.name)==null?void 0:u.includes("Camera")})&&r("Scene must contain a Camera component."),i.onBeforeUnmount(()=>o()),()=>{if(t.default)return i.h("div",{ref:f,style:{position:"relative",width:"100%",height:"100vh",...n.style}},[i.h("canvas",{ref:c,style:{width:"100%",height:"100%",position:"absolute",top:0,left:0}}),t.default()])}}}),ge=i.defineComponent({name:"Scene",setup(e,{slots:t}){const{scene:n}=D(),r=i.inject("renderer"),{activeCamera:c}=A(),{onLoop:f}=B();return i.provide("local-scene",n),f(()=>{r!=null&&r.value&&(c!=null&&c.value)&&(n!=null&&n.value)&&r.value.render(n==null?void 0:n.value,c.value)}),()=>{if(t.default)return t.default()}}}),he=Symbol("UseTresState"),we="1.3.2",Ce={install(e,t){const n=(t==null?void 0:t.prefix)||"Tres";e.component(`${n}Canvas`,me),e.component(`${n}Scene`,ge);const{catalogue:r,extend:c}=I(e,n);e.provide("catalogue",r),e.provide("extend",c);const{createComponentInstances:f}=z(n);f(r).forEach(([o,a])=>{e.component(o,a)}),window.__TRES__={app:e,version:we}}};d.CameraType=q,d.UseTresStateSymbol=he,d.default=Ce,d.trasverseObjects=Z,d.useCamera=A,d.useCatalogue=I,d.useInstanceCreator=z,d.useLoader=pe,d.useRenderLoop=B,d.useRenderer=E,d.useScene=D,d.useTexture=de,d.useTres=F,Object.defineProperties(d,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
8
|
+
(function(g,i){typeof exports=="object"&&typeof module<"u"?i(exports,require("vue"),require("@vueuse/core"),require("three")):typeof define=="function"&&define.amd?define(["exports","vue","@vueuse/core","three"],i):(g=typeof globalThis<"u"?globalThis:g||self,i(g.tres={},g.Vue,g.VueUseCore,g.Three))})(this,function(g,i,l,m){"use strict";function re(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,s.get?s:{enumerable:!0,get:()=>e[r]})}}return n.default=e,Object.freeze(n)}const q=re(m);var G=(e=>(e.Perspective="Perspective",e.Orthographic="Orthographic",e))(G||{});const b={cameras:[]},ae=45;let U;function D(){const{width:e,height:n}=l.useWindowSize(),{setState:r}=V();function s(t="Perspective",c){if(t==="Perspective"){const{near:f,far:a,fov:o}=c||{near:.1,far:1e3,fov:ae};U=new m.PerspectiveCamera(o,u.value,f,a),b.cameras.push(U)}else{const{left:f,right:a,top:o,bottom:C,near:w,far:y}=c||{left:-100,right:100,top:100,bottom:-100,near:.1,far:1e3};U=new m.OrthographicCamera(f,a,o,C,w,y),b.cameras.push(U)}return b.cameras.push(U),U}const u=i.computed(()=>e.value/n.value),p=i.computed(()=>b.cameras[0]);function d(){p.value instanceof m.PerspectiveCamera&&(p.value.aspect=u.value),p.value.updateProjectionMatrix()}function v(t){const c=i.inject("camera");t&&c&&(c.value=t,r("camera",c.value)),b.cameras.push(t),t instanceof m.PerspectiveCamera&&(t.aspect=u.value),t.updateProjectionMatrix()}return i.watch(u,d),{activeCamera:p,createCamera:s,updateCamera:d,pushCamera:v}}const K="[TresJS ▲ ■ ●] ";function _(){function e(s,u){console.error(`${K} ${s}`,u||"")}function n(s){console.warn(`${K} ${s}`)}function r(s,u){}return{logError:e,logWarning:n,logMessage:r}}const O=i.ref({...q,uuid:q.MathUtils.generateUUID()});delete O.value.Scene;let L;function T(e,n="Tres"){const{logMessage:r,logError:s}=_();!L&&e&&(L=e);const{createComponentInstances:u}=$(n);return{extend:d=>{if(!d){s("No objects provided to extend catalogue");return}O.value=Object.assign(O.value,d);const v=u(i.ref(d));r("Adding objects to catalogue",{objects:d,catalogue:O.value.uuid}),L&&v.forEach(([t,c])=>{L._context.components[t]||L.component(t,c)})},catalogue:O}}const x=e=>typeof e<"u",oe=e=>typeof e=="function",B=e=>!!e&&e.constructor===Array;function se(e){return typeof e=="number"?[e,e,e]:e instanceof m.Vector3?[e.x,e.y,e.z]:e}function ie(e){return e instanceof m.Color?e:Array.isArray(e)?new m.Color(...e):new m.Color(e)}const ce=["rotation","scale","position"];function $(e){const{logMessage:n,logError:r}=_();function s(t,c){x(t)&&x(c)&&Object.entries(t).forEach(([f,a])=>{const o=f.replace(/(-\w)/g,C=>C[1].toUpperCase());c.setAttribute(o,new m.BufferAttribute(...a))})}function u(t,c){x(t)&&x(c)&&Object.entries(t).forEach(([f,a])=>{const o=f.replace(/(-\w)/g,C=>C[1].toUpperCase());if(!(o==="args"||a===void 0)){ce.includes(o)&&a&&(a=se(a)),t.ref&&(t.ref=c);try{if(c[o]&&x(c[o].set))c[o].set(...B(a)?a:[a]);else{if(a===""&&(a=!0),oe(c[o])){if(f==="center"&&!a)return;c[o](...B(a)?a:[a]);return}c[o]=a}}catch(C){r(`There was an error setting ${o} property`,C)}}})}function p(t){var a;const c=/^Symbol\(Fragment\)$/g,f=/^Symbol\(Text\)$/g;if(c.test(t.type.toString()))return t.children.map(o=>p(o));if(f.test(t.type.toString()))return;{const o=t.type.name.replace(e,""),{catalogue:C}=T(),w=i.inject("catalogue")||C;let y;return w&&((a=t==null?void 0:t.props)!=null&&a.args?w!=null&&w.value[o]?y=new w.value[o](...t.props.args):r(`There is no ${o} in the catalogue`,w==null?void 0:w.value.uuid):y=new w.value[o]),t!=null&&t.props&&(o==="BufferGeometry"?s(t.props,y):u(t.props,y)),y}}function d(t,c,f){if(f.default&&(f!=null&&f.default())){const a=f.default().map(o=>p(o));return new t(...a.flat().filter(Boolean))}else return c.args?new t(...c.args):new t}function v(t){return Object.entries(t.value).filter(([c,f])=>{var a,o;return(o=(a=f==null?void 0:f.prototype)==null?void 0:a.constructor)==null?void 0:o.toString().includes("class")}).map(([c,f])=>{const a=`${e}${c}`,o=i.defineComponent({name:a,setup(C,{slots:w,attrs:y,...j}){const{scene:N}=F(),S=i.inject("local-scene")||N,A=i.inject("catalogue"),{pushCamera:P}=D();let M=d(f,y,w);return u(y,M),(M instanceof m.PerspectiveCamera||M instanceof m.OrthographicCamera)&&P(M),M.isObject3D&&(S==null||S.value.add(M)),S!=null&&S.value&&M.isFog&&(S.value.fog=M),j.expose(M),n(a,{sceneuuid:S==null?void 0:S.value.uuid,catalogue:A==null?void 0:A.value.uuid,props:C,slots:w.default?w.default():void 0,attrs:y,ctx:j,scene:S}),()=>{}}});return[a,o]})}return{createComponentInstances:v,processProps:u,createInstanceFromVNode:p}}const J=l.createEventHook(),Q=l.createEventHook(),X=l.createEventHook(),Y=new m.Clock,{pause:ue,resume:le,isActive:fe}=l.useRafFn(()=>{const e=Y.getElapsedTime(),n=Y.getDelta();J.trigger({delta:n,elapsed:e}),Q.trigger({delta:n,elapsed:e}),X.trigger({delta:n,elapsed:e})},{immediate:!1});function z(){return{onBeforeLoop:J.on,onLoop:Q.on,onAfterLoop:X.on,pause:ue,resume:le,isActive:fe}}const pe=i.shallowRef(new m.Scene);function F(){return{scene:pe}}function Z(e){const n={nodes:{},materials:{}};return e&&e.traverse(r=>{r.name&&(n.nodes[r.name]=r),r.material&&!n.materials[r.material.name]&&(n.materials[r.material.name]=r.material)}),n}async function de(e,n,r,s,u){const{logError:p}=_(),d=new e;u&&u(d),r&&r(d);const t=(Array.isArray(n)?n:[n]).map(c=>new Promise((f,a)=>{d.load(c,o=>{o.scene&&Object.assign(o,Z(o.scene)),f(o)},s,o=>a(p("[useLoader] - Failed to load resource",o)))}));return B(n)?await Promise.all(t):await t[0]}async function me(e){const n=new m.LoadingManager,r=new m.TextureLoader(n),s=u=>new Promise((p,d)=>{r.load(u,v=>p(v),()=>null,()=>{d(new Error("[useTextures] - Failed to load texture"))})});if(B(e)){const u=await Promise.all(e.map(p=>s(p)));return e.length>1?u:u[0]}else{const{map:u,displacementMap:p,normalMap:d,roughnessMap:v,metalnessMap:t,aoMap:c}=e;return{map:u?await s(u):null,displacementMap:p?await s(p):null,normalMap:d?await s(d):null,roughnessMap:v?await s(v):null,metalnessMap:t?await s(t):null,aoMap:c?await s(c):null}}}const I=i.reactive({});function V(){function e(r){return I[r]}function n(r,s){I[r]=s}return{state:I,...i.toRefs(I),getState:e,setState:n}}const h=i.shallowRef(),k=i.ref(!1);function E(e,n,r){const{alpha:s=!0,antialias:u=!0,depth:p,logarithmicDepthBuffer:d,failIfMajorPerformanceCaveat:v,precision:t,premultipliedAlpha:c,stencil:f,shadows:a=!1,shadowMapType:o=m.PCFShadowMap,physicallyCorrectLights:C=!1,outputEncoding:w=m.LinearEncoding,toneMapping:y=m.NoToneMapping,toneMappingExposure:j=1,context:N=void 0,powerPreference:S="default",preserveDrawingBuffer:A=!1,clearColor:P,windowSize:M=!1}=i.toRefs(r),{width:R,height:W}=l.resolveUnref(M)?l.useWindowSize():l.useElementSize(n),{pixelRatio:H}=l.useDevicePixelRatio(),{pause:ye,resume:Se}=z(),Me=i.computed(()=>R.value/W.value),ee=()=>{h.value&&(h.value.setSize(R.value,W.value),h.value.setPixelRatio(Math.min(H.value,2)))},te=()=>{h.value&&(h.value.shadowMap.enabled=l.resolveUnref(a),h.value.shadowMap.type=l.resolveUnref(o),h.value.toneMapping=l.resolveUnref(y)||m.NoToneMapping,h.value.toneMappingExposure=l.resolveUnref(j),h.value.outputEncoding=l.resolveUnref(w)||m.LinearEncoding,P!=null&&P.value&&h.value.setClearColor(ie(l.resolveUnref(P))),h.value.physicallyCorrectLights=l.resolveUnref(C))},Pe=()=>{const ne=l.unrefElement(e);if(h.value||!ne)return;h.value=new m.WebGLRenderer({canvas:ne,alpha:l.resolveUnref(s),antialias:l.resolveUnref(u),context:l.resolveUnref(N),depth:l.resolveUnref(p),failIfMajorPerformanceCaveat:l.resolveUnref(v),logarithmicDepthBuffer:l.resolveUnref(d),powerPreference:l.resolveUnref(S),precision:l.resolveUnref(t),stencil:l.resolveUnref(f),preserveDrawingBuffer:l.resolveUnref(A),premultipliedAlpha:l.resolveUnref(c)});const{setState:be}=V();be("renderer",h.value),te(),ee(),Se(),k.value=!0},Ue=()=>{h.value&&(h.value.dispose(),h.value=void 0,k.value=!1,ye())};return i.watch([R,W,H],ee),i.watch([a,o,w,C,y,j,P],te),i.watch(()=>[e,n],()=>{l.unrefElement(e)&&l.unrefElement(n)&&Pe()},{immediate:!0,deep:!0}),{renderer:h,isReady:k,dispose:Ue,aspectRatio:Me}}const ge=i.defineComponent({name:"TresCanvas",props:{shadows:Boolean,shadowMapType:Object,physicallyCorrectLights:Boolean,outputEncoding:Object,toneMapping:Object,toneMappingExposure:Number,context:Object,powerPreference:Object,preserveDrawingBuffer:Boolean,clearColor:String,windowSize:Boolean},setup(e,{slots:n,attrs:r}){const{logError:s}=_(),u=i.ref(),p=i.ref(),{renderer:d,dispose:v,aspectRatio:t}=E(u,p,e),c=i.shallowRef();return i.provide("camera",c),i.provide("renderer",d),i.provide("aspect-ratio",t),n.default&&!n.default().some(f=>f.type.name==="Scene")&&s("TresCanvas must contain a Scene component."),n.default&&!n.default().some(f=>{var a;return(a=f.type.name)==null?void 0:a.includes("Camera")})&&s("Scene must contain a Camera component."),i.onBeforeUnmount(()=>v()),()=>{if(n.default)return i.h("div",{ref:p,style:{position:"relative",width:"100%",height:"100vh",...r.style}},[i.h("canvas",{ref:u,style:{width:"100%",height:"100%",position:"absolute",top:0,left:0}}),n.default()])}}}),he=i.defineComponent({name:"Scene",setup(e,{slots:n}){const{scene:r}=F(),s=i.inject("renderer"),{activeCamera:u}=D(),{onLoop:p}=z();return i.provide("local-scene",r),p(()=>{s!=null&&s.value&&(u!=null&&u.value)&&(r!=null&&r.value)&&s.value.render(r==null?void 0:r.value,u.value)}),()=>{if(n.default)return n.default()}}}),we=Symbol("UseTresState"),ve="1.4.0",Ce={install(e,n){const r=(n==null?void 0:n.prefix)||"Tres";e.component(`${r}Canvas`,ge),e.component(`${r}Scene`,he);const{catalogue:s,extend:u}=T(e,r);e.provide("catalogue",s),e.provide("extend",u);const{createComponentInstances:p}=$(r);p(s).forEach(([v,t])=>{e.component(v,t)}),window.__TRES__={app:e,version:ve}}};g.CameraType=G,g.UseTresStateSymbol=we,g.default=Ce,g.trasverseObjects=Z,g.useCamera=D,g.useCatalogue=T,g.useInstanceCreator=$,g.useLoader=de,g.useRenderLoop=z,g.useRenderer=E,g.useScene=F,g.useTexture=me,g.useTres=V,Object.defineProperties(g,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
package/dist/types/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export type TresVNodeType = VNodeTypes & {
|
|
|
12
12
|
export type TresVNode = VNode & { children?: Array<VNode>; type: TresVNodeType }
|
|
13
13
|
export type TresAttributes = Record<string, any> & { args?: number[] }
|
|
14
14
|
|
|
15
|
+
export type TresColor = string | number | Color | number[]
|
|
15
16
|
declare global {
|
|
16
17
|
// Define the window interface, with type annotations for the properties and methods of the window object
|
|
17
18
|
interface Window {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tresjs/core",
|
|
3
3
|
"description": "Declarative ThreeJS using Vue Components",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.4.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)",
|
|
7
7
|
"files": [
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"threejs-vue"
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"three": "^0.
|
|
33
|
+
"three": "^0.148.0",
|
|
34
34
|
"vue": "^3.2.45"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"rollup-plugin-analyzer": "^4.0.0",
|
|
55
55
|
"rollup-plugin-visualizer": "^5.8.3",
|
|
56
56
|
"unplugin-vue-components": "^0.22.12",
|
|
57
|
-
"vite": "^4.0.
|
|
57
|
+
"vite": "^4.0.3",
|
|
58
58
|
"vite-plugin-banner": "^0.7.0",
|
|
59
59
|
"vite-plugin-dts": "^1.7.1",
|
|
60
60
|
"vite-plugin-glsl": "^1.0.1",
|