@react-three/drei 9.0.0-beta.3 → 9.0.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/README.md +293 -26
- package/core/AdaptiveEvents.cjs.js +1 -1
- package/core/AdaptiveEvents.js +8 -3
- package/core/ArcballControls.cjs.js +1 -1
- package/core/ArcballControls.js +13 -25
- package/core/Bounds.cjs.js +1 -1
- package/core/Bounds.d.ts +2 -1
- package/core/Bounds.js +25 -14
- package/core/Clone.cjs.js +1 -0
- package/core/Clone.d.ts +11 -0
- package/core/Clone.js +92 -0
- package/core/Cloud.cjs.js +1 -1
- package/core/Cloud.d.ts +3 -1
- package/core/Cloud.js +4 -1
- package/core/ComputedAttribute.cjs.js +1 -0
- package/core/ComputedAttribute.d.ts +9 -0
- package/core/ComputedAttribute.js +34 -0
- package/core/ContactShadows.cjs.js +1 -1
- package/core/ContactShadows.d.ts +3 -1
- package/core/ContactShadows.js +15 -2
- package/core/CubeCamera.cjs.js +1 -1
- package/core/CubeCamera.js +6 -6
- package/core/DeviceOrientationControls.cjs.js +1 -1
- package/core/DeviceOrientationControls.d.ts +1 -1
- package/core/DeviceOrientationControls.js +2 -6
- package/core/Effects.cjs.js +1 -1
- package/core/Effects.d.ts +3 -2
- package/core/Effects.js +2 -2
- package/core/Environment.cjs.js +1 -1
- package/core/Environment.d.ts +13 -3
- package/core/Environment.js +96 -33
- package/core/FirstPersonControls.cjs.js +1 -1
- package/core/FirstPersonControls.d.ts +4 -2
- package/core/FirstPersonControls.js +9 -8
- package/core/Float.cjs.js +1 -1
- package/core/Float.d.ts +1 -1
- package/core/Float.js +5 -4
- package/core/FlyControls.cjs.js +1 -1
- package/core/FlyControls.d.ts +1 -0
- package/core/FlyControls.js +10 -11
- package/core/GizmoHelper.cjs.js +1 -1
- package/core/GizmoHelper.d.ts +2 -1
- package/core/GizmoHelper.js +31 -41
- package/core/Image.cjs.js +1 -1
- package/core/Image.d.ts +5 -3
- package/core/Image.js +6 -1
- package/core/Instances.cjs.js +1 -1
- package/core/Instances.d.ts +1 -1
- package/core/Instances.js +5 -11
- package/core/Lightformer.cjs.js +1 -0
- package/core/Lightformer.d.ts +41 -0
- package/core/Lightformer.js +51 -0
- package/core/MapControls.cjs.js +1 -1
- package/core/MapControls.d.ts +2 -1
- package/core/MapControls.js +8 -11
- package/core/MeshReflectorMaterial.cjs.js +1 -1
- package/core/MeshReflectorMaterial.d.ts +1 -2
- package/core/MeshReflectorMaterial.js +4 -5
- package/core/OrbitControls.cjs.js +1 -1
- package/core/OrbitControls.js +18 -31
- package/core/PointMaterial.cjs.js +1 -1
- package/core/PointMaterial.d.ts +5 -8
- package/core/PointMaterial.js +16 -34
- package/core/PointerLockControls.cjs.js +1 -1
- package/core/PointerLockControls.d.ts +3 -1
- package/core/PointerLockControls.js +43 -25
- package/core/Points.cjs.js +1 -1
- package/core/Points.d.ts +3 -3
- package/core/Points.js +11 -30
- package/core/PositionalAudio.d.ts +1 -1
- package/core/Reflector.d.ts +1 -1
- package/core/Sampler.cjs.js +1 -0
- package/core/Sampler.d.ts +21 -0
- package/core/Sampler.js +65 -0
- package/core/SpotLight.d.ts +1 -1
- package/core/Stage.cjs.js +1 -1
- package/core/Stage.js +1 -2
- package/core/Stars.cjs.js +1 -1
- package/core/Stars.js +3 -0
- package/core/Stats.cjs.js +1 -1
- package/core/Stats.js +1 -1
- package/core/Text.cjs.js +1 -1
- package/core/Text.d.ts +2 -1
- package/core/Text.js +3 -2
- package/core/TrackballControls.cjs.js +1 -1
- package/core/TrackballControls.d.ts +1 -1
- package/core/TrackballControls.js +7 -5
- package/core/Trail.cjs.js +1 -0
- package/core/Trail.d.ts +21 -0
- package/core/Trail.js +160 -0
- package/core/TransformControls.cjs.js +1 -1
- package/core/TransformControls.d.ts +1 -1
- package/core/TransformControls.js +7 -13
- package/core/index.cjs.js +1 -1
- package/core/index.d.ts +6 -0
- package/core/index.js +9 -2
- package/core/useBoxProjectedEnv.cjs.js +1 -0
- package/core/useBoxProjectedEnv.d.ts +8 -0
- package/core/useBoxProjectedEnv.js +98 -0
- package/core/useFBO.cjs.js +1 -1
- package/core/useFBO.d.ts +1 -1
- package/core/useFBO.js +22 -24
- package/core/useGLTF.d.ts +1 -1
- package/core/useHelper.d.ts +3 -1
- package/core/useMatcapTexture.cjs.js +1 -1
- package/core/useProgress.d.ts +1 -1
- package/index.cjs.js +1 -1
- package/index.js +7 -1
- package/materials/ConvolutionMaterial.cjs.js +1 -1
- package/materials/ConvolutionMaterial.js +2 -0
- package/materials/MeshReflectorMaterial.cjs.js +1 -1
- package/materials/MeshReflectorMaterial.d.ts +0 -3
- package/materials/MeshReflectorMaterial.js +8 -34
- package/materials/SpotLightMaterial.cjs.js +1 -1
- package/materials/SpotLightMaterial.js +3 -0
- package/native/index.cjs.js +1 -1
- package/native/index.js +9 -2
- package/package.json +6 -5
- package/web/CycleRaycast.cjs.js +1 -1
- package/web/CycleRaycast.js +23 -20
- package/web/ScrollControls.cjs.js +1 -1
- package/web/ScrollControls.js +16 -12
- package/web/Select.cjs.js +1 -1
- package/web/Select.js +9 -8
- package/web/index.cjs.js +1 -1
- package/web/index.js +9 -2
package/core/Trail.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { useFrame, useThree } from '@react-three/fiber';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Vector3, Object3D, Vector2 } from 'three';
|
|
4
|
+
import { MeshLine, MeshLineMaterial } from 'meshline';
|
|
5
|
+
|
|
6
|
+
const defaults = {
|
|
7
|
+
width: 0.2,
|
|
8
|
+
length: 1,
|
|
9
|
+
decay: 1,
|
|
10
|
+
local: false,
|
|
11
|
+
stride: 0,
|
|
12
|
+
interval: 1
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const shiftLeft = (collection, steps = 1) => {
|
|
16
|
+
collection.set(collection.subarray(steps));
|
|
17
|
+
collection.fill(-Infinity, -steps);
|
|
18
|
+
return collection;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
function useTrail(target, settings) {
|
|
22
|
+
const {
|
|
23
|
+
length,
|
|
24
|
+
local,
|
|
25
|
+
decay,
|
|
26
|
+
interval,
|
|
27
|
+
stride
|
|
28
|
+
} = { ...defaults,
|
|
29
|
+
...settings
|
|
30
|
+
};
|
|
31
|
+
const points = React.useRef();
|
|
32
|
+
const [worldPosition] = React.useState(() => new Vector3());
|
|
33
|
+
React.useLayoutEffect(() => {
|
|
34
|
+
if (target) {
|
|
35
|
+
points.current = Float32Array.from({
|
|
36
|
+
length: length * 10 * 3
|
|
37
|
+
}, (_, i) => target.position.getComponent(i % 3));
|
|
38
|
+
}
|
|
39
|
+
}, [length, target]);
|
|
40
|
+
const prevPosition = React.useRef(new Vector3());
|
|
41
|
+
const frameCount = React.useRef(0);
|
|
42
|
+
useFrame(() => {
|
|
43
|
+
if (!target) return;
|
|
44
|
+
if (!points.current) return;
|
|
45
|
+
|
|
46
|
+
if (frameCount.current === 0) {
|
|
47
|
+
let newPosition;
|
|
48
|
+
|
|
49
|
+
if (local) {
|
|
50
|
+
newPosition = target.position;
|
|
51
|
+
} else {
|
|
52
|
+
target.getWorldPosition(worldPosition);
|
|
53
|
+
newPosition = worldPosition;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const steps = 1 * decay;
|
|
57
|
+
|
|
58
|
+
for (let i = 0; i < steps; i++) {
|
|
59
|
+
if (newPosition.distanceTo(prevPosition.current) < stride) continue;
|
|
60
|
+
shiftLeft(points.current, 3);
|
|
61
|
+
points.current.set(newPosition.toArray(), points.current.length - 3);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
prevPosition.current.copy(newPosition);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
frameCount.current++;
|
|
68
|
+
frameCount.current = frameCount.current % interval;
|
|
69
|
+
});
|
|
70
|
+
return points;
|
|
71
|
+
}
|
|
72
|
+
const Trail = /*#__PURE__*/React.forwardRef((props, forwardRef) => {
|
|
73
|
+
const {
|
|
74
|
+
children
|
|
75
|
+
} = props;
|
|
76
|
+
const {
|
|
77
|
+
width,
|
|
78
|
+
length,
|
|
79
|
+
decay,
|
|
80
|
+
local,
|
|
81
|
+
stride,
|
|
82
|
+
interval
|
|
83
|
+
} = { ...defaults,
|
|
84
|
+
...props
|
|
85
|
+
};
|
|
86
|
+
const {
|
|
87
|
+
color = 'hotpink',
|
|
88
|
+
attenuation,
|
|
89
|
+
target
|
|
90
|
+
} = props;
|
|
91
|
+
const size = useThree(s => s.size);
|
|
92
|
+
const ref = React.useRef(null);
|
|
93
|
+
const [anchor, setAnchor] = React.useState(null);
|
|
94
|
+
const points = useTrail(anchor, {
|
|
95
|
+
length,
|
|
96
|
+
decay,
|
|
97
|
+
local,
|
|
98
|
+
stride,
|
|
99
|
+
interval
|
|
100
|
+
});
|
|
101
|
+
React.useEffect(() => {
|
|
102
|
+
const t = (target == null ? void 0 : target.current) || ref.current.children.find(o => {
|
|
103
|
+
return o instanceof Object3D;
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
if (t) {
|
|
107
|
+
setAnchor(t);
|
|
108
|
+
}
|
|
109
|
+
}, [points, target]);
|
|
110
|
+
const geo = React.useMemo(() => new MeshLine(), []);
|
|
111
|
+
const mat = React.useMemo(() => {
|
|
112
|
+
var _matOverride;
|
|
113
|
+
|
|
114
|
+
const m = new MeshLineMaterial({
|
|
115
|
+
lineWidth: 0.1 * width,
|
|
116
|
+
color: color,
|
|
117
|
+
sizeAttenuation: 1,
|
|
118
|
+
resolution: new Vector2(size.width, size.height)
|
|
119
|
+
}); // Get and apply first <meshLineMaterial /> from children
|
|
120
|
+
|
|
121
|
+
let matOverride;
|
|
122
|
+
|
|
123
|
+
if (children) {
|
|
124
|
+
if (Array.isArray(children)) {
|
|
125
|
+
matOverride = children.find(child => {
|
|
126
|
+
const c = child;
|
|
127
|
+
return typeof c.type === 'string' && c.type === 'meshLineMaterial';
|
|
128
|
+
});
|
|
129
|
+
} else {
|
|
130
|
+
const c = children;
|
|
131
|
+
|
|
132
|
+
if (typeof c.type === 'string' && c.type === 'meshLineMaterial') {
|
|
133
|
+
matOverride = c;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (typeof ((_matOverride = matOverride) == null ? void 0 : _matOverride.props) === 'object') {
|
|
139
|
+
m.setValues(matOverride.props);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return m;
|
|
143
|
+
}, [width, color, size, children]);
|
|
144
|
+
React.useEffect(() => {
|
|
145
|
+
mat.uniforms.resolution.value.set(size.width, size.height);
|
|
146
|
+
}, [size]);
|
|
147
|
+
useFrame(() => {
|
|
148
|
+
if (!points.current) return;
|
|
149
|
+
geo.setPoints(points.current, attenuation);
|
|
150
|
+
});
|
|
151
|
+
return /*#__PURE__*/React.createElement("group", null, /*#__PURE__*/React.createElement("mesh", {
|
|
152
|
+
ref: forwardRef,
|
|
153
|
+
geometry: geo,
|
|
154
|
+
material: mat
|
|
155
|
+
}), /*#__PURE__*/React.createElement("group", {
|
|
156
|
+
ref: ref
|
|
157
|
+
}, children));
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
export { Trail, useTrail };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),n=require("@react-three/fiber"),t=require("lodash.omit"),r=require("lodash.pick"),o=require("react"),a=require("three"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),n=require("@react-three/fiber"),t=require("lodash.omit"),r=require("lodash.pick"),o=require("react"),a=require("three"),u=require("three-stdlib");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:function(){return e[t]}})}})),n.default=e,Object.freeze(n)}var i=l(e),c=l(t),d=l(r),v=s(o),f=s(a);const m=v.forwardRef((({children:e,domElement:t,onChange:r,onMouseDown:o,onMouseUp:a,onObjectChange:l,object:s,...m},h)=>{const E=["enabled","axis","mode","translationSnap","rotationSnap","scaleSnap","space","size","showX","showY","showZ"],{camera:b,...g}=m,p=d.default(g,E),L=c.default(g,E),j=n.useThree((e=>e.controls)),O=n.useThree((e=>e.gl)),w=n.useThree((e=>e.events)),q=n.useThree((e=>e.camera)),T=n.useThree((e=>e.invalidate)),y=b||q,C=t||w.connected||O.domElement,D=v.useMemo((()=>new u.TransformControls(y,C)),[y,C]),M=v.useRef();return v.useLayoutEffect((()=>(s?D.attach(s instanceof f.Object3D?s:s.current):M.current instanceof f.Object3D&&D.attach(M.current),()=>{D.detach()})),[s,e,D]),v.useEffect((()=>{if(j){const e=e=>j.enabled=!e.value;return D.addEventListener("dragging-changed",e),()=>D.removeEventListener("dragging-changed",e)}}),[D,j]),v.useEffect((()=>{const e=e=>{T(),r&&r(e)};return null==D||null==D.addEventListener||D.addEventListener("change",e),o&&(null==D||null==D.addEventListener||D.addEventListener("mouseDown",o)),a&&(null==D||null==D.addEventListener||D.addEventListener("mouseUp",a)),l&&(null==D||null==D.addEventListener||D.addEventListener("objectChange",l)),()=>{null==D||null==D.removeEventListener||D.removeEventListener("change",e),o&&(null==D||null==D.removeEventListener||D.removeEventListener("mouseDown",o)),a&&(null==D||null==D.removeEventListener||D.removeEventListener("mouseUp",a)),l&&(null==D||null==D.removeEventListener||D.removeEventListener("objectChange",l))}}),[r,o,a,l,D,T]),D?v.createElement(v.Fragment,null,v.createElement("primitive",i.default({ref:h,dispose:void 0,object:D},p)),v.createElement("group",i.default({ref:M},L),e)):null}));exports.TransformControls=m;
|
|
@@ -23,4 +23,4 @@ export declare type TransformControlsProps = ReactThreeFiber.Object3DNode<Transf
|
|
|
23
23
|
onMouseUp?: (e?: THREE.Event) => void;
|
|
24
24
|
onObjectChange?: (e?: THREE.Event) => void;
|
|
25
25
|
};
|
|
26
|
-
export declare const TransformControls: React.ForwardRefExoticComponent<Pick<TransformControlsProps, "object" | "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "isGroup" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | "onMouseDown" | "onMouseUp" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "size" | "space" | "enabled" | "
|
|
26
|
+
export declare const TransformControls: React.ForwardRefExoticComponent<Pick<TransformControlsProps, "object" | "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "isGroup" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | "onMouseDown" | "onMouseUp" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "size" | "space" | "enabled" | "connect" | "update" | "axis" | "setSize" | "domElement" | "isTransformControls" | "detach" | "getMode" | "setMode" | "setTranslationSnap" | "setRotationSnap" | "setScaleSnap" | "setSpace" | "onObjectChange" | "mode" | "translationSnap" | "rotationSnap" | "scaleSnap" | "showX" | "showY" | "showZ"> & React.RefAttributes<TransformControlsImpl<THREE.Camera>>>;
|
|
@@ -25,17 +25,13 @@ const TransformControls = /*#__PURE__*/React.forwardRef(({
|
|
|
25
25
|
const objectProps = omit(rest, transformOnlyPropNames); // @ts-expect-error new in @react-three/fiber@7.0.5
|
|
26
26
|
|
|
27
27
|
const defaultControls = useThree(state => state.controls);
|
|
28
|
-
const gl = useThree(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const
|
|
32
|
-
camera
|
|
33
|
-
}) => camera);
|
|
34
|
-
const invalidate = useThree(({
|
|
35
|
-
invalidate
|
|
36
|
-
}) => invalidate);
|
|
28
|
+
const gl = useThree(state => state.gl);
|
|
29
|
+
const events = useThree(state => state.events);
|
|
30
|
+
const defaultCamera = useThree(state => state.camera);
|
|
31
|
+
const invalidate = useThree(state => state.invalidate);
|
|
37
32
|
const explCamera = camera || defaultCamera;
|
|
38
|
-
const
|
|
33
|
+
const explDomElement = domElement || events.connected || gl.domElement;
|
|
34
|
+
const controls = React.useMemo(() => new TransformControls$1(explCamera, explDomElement), [explCamera, explDomElement]);
|
|
39
35
|
const group = React.useRef();
|
|
40
36
|
React.useLayoutEffect(() => {
|
|
41
37
|
if (object) {
|
|
@@ -44,9 +40,7 @@ const TransformControls = /*#__PURE__*/React.forwardRef(({
|
|
|
44
40
|
controls.attach(group.current);
|
|
45
41
|
}
|
|
46
42
|
|
|
47
|
-
return () =>
|
|
48
|
-
controls.detach();
|
|
49
|
-
};
|
|
43
|
+
return () => void controls.detach();
|
|
50
44
|
}, [object, children, controls]);
|
|
51
45
|
React.useEffect(() => {
|
|
52
46
|
if (defaultControls) {
|
package/core/index.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./QuadraticBezierLine.cjs.js"),s=require("./CubicBezierLine.cjs.js"),t=require("./Line.cjs.js"),o=require("./PositionalAudio.cjs.js"),i=require("./Text.cjs.js"),u=require("./Effects.cjs.js"),a=require("./GradientTexture.cjs.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./QuadraticBezierLine.cjs.js"),s=require("./CubicBezierLine.cjs.js"),t=require("./Line.cjs.js"),o=require("./PositionalAudio.cjs.js"),i=require("./Text.cjs.js"),u=require("./Effects.cjs.js"),a=require("./GradientTexture.cjs.js"),n=require("./Image.cjs.js"),j=require("./Edges.cjs.js"),c=require("./Trail.cjs.js"),p=require("./Sampler.cjs.js"),l=require("./ComputedAttribute.cjs.js"),x=require("./Clone.cjs.js"),q=require("./OrthographicCamera.cjs.js"),d=require("./PerspectiveCamera.cjs.js"),C=require("./CubeCamera.cjs.js"),m=require("./DeviceOrientationControls.cjs.js"),h=require("./FlyControls.cjs.js"),b=require("./MapControls.cjs.js"),B=require("./OrbitControls.cjs.js"),P=require("./TrackballControls.cjs.js"),S=require("./ArcballControls.cjs.js"),M=require("./TransformControls.cjs.js"),T=require("./PointerLockControls.cjs.js"),f=require("./FirstPersonControls.cjs.js"),g=require("./GizmoHelper.cjs.js"),v=require("./GizmoViewcube.cjs.js"),L=require("./GizmoViewport.cjs.js"),A=require("./useCubeTexture.cjs.js"),E=require("./useFBX.cjs.js"),G=require("./useGLTF.cjs.js"),k=require("./useProgress.cjs.js"),D=require("./useTexture.cjs.js"),F=require("./useKTX2.cjs.js"),w=require("./Stats.cjs.js"),z=require("./useDepthBuffer.cjs.js"),I=require("./useAspect.cjs.js"),O=require("./useCamera.cjs.js"),R=require("./useDetectGPU.cjs.js"),y=require("./useHelper.cjs.js"),H=require("./useBVH.cjs.js"),V=require("./useContextBridge.cjs.js"),Q=require("./useAnimations.cjs.js"),X=require("./useFBO.cjs.js"),K=require("./useIntersect.cjs.js"),W=require("./useBoxProjectedEnv.cjs.js"),N=require("./CurveModifier.cjs.js"),U=require("./MeshDistortMaterial.cjs.js"),_=require("./MeshWobbleMaterial.cjs.js"),J=require("./MeshReflectorMaterial.cjs.js"),Y=require("./PointMaterial.cjs.js"),Z=require("./shaderMaterial.cjs.js"),$=require("./softShadows.cjs.js"),ee=require("./shapes.cjs.js"),re=require("./RoundedBox.cjs.js"),se=require("./ScreenQuad.cjs.js"),te=require("./Center.cjs.js"),oe=require("./Bounds.cjs.js"),ie=require("./CameraShake.cjs.js"),ue=require("./Float.cjs.js"),ae=require("./Stage.cjs.js"),ne=require("./Backdrop.cjs.js"),je=require("./Shadow.cjs.js"),ce=require("./ContactShadows.cjs.js"),pe=require("./Reflector.cjs.js"),le=require("./SpotLight.cjs.js"),xe=require("./Environment.cjs.js"),qe=require("./Lightformer.cjs.js"),de=require("./Sky.cjs.js"),Ce=require("./Stars.cjs.js"),me=require("./Cloud.cjs.js"),he=require("./useMatcapTexture.cjs.js"),be=require("./useNormalTexture.cjs.js"),Be=require("./Points.cjs.js"),Pe=require("./Instances.cjs.js"),Se=require("./Segments.cjs.js"),Me=require("./Detailed.cjs.js"),Te=require("./Preload.cjs.js"),fe=require("./BakeShadows.cjs.js"),ge=require("./meshBounds.cjs.js"),ve=require("./AdaptiveDpr.cjs.js"),Le=require("./AdaptiveEvents.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("@react-three/fiber"),require("react-merge-refs"),require("three"),require("three-stdlib"),require("troika-three-text"),require("suspend-react"),require("meshline"),require("lodash.pick"),require("lodash.omit"),require("zustand"),require("stats.js"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("three-mesh-bvh"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("../helpers/Position.cjs.js"),require("react-composer"),exports.Billboard=e.Billboard,exports.QuadraticBezierLine=r.QuadraticBezierLine,exports.CubicBezierLine=s.CubicBezierLine,exports.Line=t.Line,exports.PositionalAudio=o.PositionalAudio,exports.Text=i.Text,exports.Effects=u.Effects,exports.isWebGL2Available=u.isWebGL2Available,exports.GradientTexture=a.GradientTexture,exports.Image=n.Image,exports.Edges=j.Edges,exports.Trail=c.Trail,exports.useTrail=c.useTrail,exports.Sampler=p.Sampler,exports.ComputedAttribute=l.ComputedAttribute,exports.Clone=x.Clone,exports.OrthographicCamera=q.OrthographicCamera,exports.PerspectiveCamera=d.PerspectiveCamera,exports.CubeCamera=C.CubeCamera,exports.DeviceOrientationControls=m.DeviceOrientationControls,exports.FlyControls=h.FlyControls,exports.MapControls=b.MapControls,exports.OrbitControls=B.OrbitControls,exports.TrackballControls=P.TrackballControls,exports.ArcballControls=S.ArcballControls,exports.TransformControls=M.TransformControls,exports.PointerLockControls=T.PointerLockControls,exports.FirstPersonControls=f.FirstPersonControls,exports.GizmoHelper=g.GizmoHelper,exports.useGizmoContext=g.useGizmoContext,exports.GizmoViewcube=v.GizmoViewcube,exports.GizmoViewport=L.GizmoViewport,exports.useCubeTexture=A.useCubeTexture,exports.useFBX=E.useFBX,exports.useGLTF=G.useGLTF,exports.useProgress=k.useProgress,exports.IsObject=D.IsObject,exports.useTexture=D.useTexture,exports.useKTX2=F.useKTX2,exports.Stats=w.Stats,exports.useDepthBuffer=z.useDepthBuffer,exports.useAspect=I.useAspect,exports.useCamera=O.useCamera,exports.useDetectGPU=R.useDetectGPU,exports.useHelper=y.useHelper,exports.useBVH=H.useBVH,exports.useContextBridge=V.useContextBridge,exports.useAnimations=Q.useAnimations,exports.useFBO=X.useFBO,exports.useIntersect=K.useIntersect,exports.useBoxProjectedEnv=W.useBoxProjectedEnv,exports.CurveModifier=N.CurveModifier,exports.MeshDistortMaterial=U.MeshDistortMaterial,exports.MeshWobbleMaterial=_.MeshWobbleMaterial,exports.MeshReflectorMaterial=J.MeshReflectorMaterial,exports.PointMaterial=Y.PointMaterial,exports.PointMaterialImpl=Y.PointMaterialImpl,exports.shaderMaterial=Z.shaderMaterial,exports.softShadows=$.softShadows,exports.Box=ee.Box,exports.Circle=ee.Circle,exports.Cone=ee.Cone,exports.Cylinder=ee.Cylinder,exports.Dodecahedron=ee.Dodecahedron,exports.Extrude=ee.Extrude,exports.Icosahedron=ee.Icosahedron,exports.Lathe=ee.Lathe,exports.Octahedron=ee.Octahedron,exports.Plane=ee.Plane,exports.Polyhedron=ee.Polyhedron,exports.Ring=ee.Ring,exports.Sphere=ee.Sphere,exports.Tetrahedron=ee.Tetrahedron,exports.Torus=ee.Torus,exports.TorusKnot=ee.TorusKnot,exports.Tube=ee.Tube,exports.RoundedBox=re.RoundedBox,exports.ScreenQuad=se.ScreenQuad,exports.Center=te.Center,exports.Bounds=oe.Bounds,exports.useBounds=oe.useBounds,exports.CameraShake=ie.CameraShake,exports.Float=ue.Float,exports.Stage=ae.Stage,exports.Backdrop=ne.Backdrop,exports.Shadow=je.Shadow,exports.ContactShadows=ce.ContactShadows,exports.Reflector=pe.Reflector,exports.SpotLight=le.SpotLight,exports.Environment=xe.Environment,exports.EnvironmentCube=xe.EnvironmentCube,exports.EnvironmentMap=xe.EnvironmentMap,exports.EnvironmentPortal=xe.EnvironmentPortal,exports.Lightformer=qe.Lightformer,exports.Sky=de.Sky,exports.calcPosFromAngles=de.calcPosFromAngles,exports.Stars=Ce.Stars,exports.Cloud=me.Cloud,exports.useMatcapTexture=he.useMatcapTexture,exports.useNormalTexture=be.useNormalTexture,exports.Point=Be.Point,exports.Points=Be.Points,exports.PointsBuffer=Be.PointsBuffer,exports.Instance=Pe.Instance,exports.Instances=Pe.Instances,exports.Merged=Pe.Merged,exports.Segment=Se.Segment,exports.Segments=Se.Segments,exports.Detailed=Me.Detailed,exports.Preload=Te.Preload,exports.BakeShadows=fe.BakeShadows,exports.meshBounds=ge.meshBounds,exports.AdaptiveDpr=ve.AdaptiveDpr,exports.AdaptiveEvents=Le.AdaptiveEvents;
|
package/core/index.d.ts
CHANGED
|
@@ -8,6 +8,10 @@ export * from './Effects';
|
|
|
8
8
|
export * from './GradientTexture';
|
|
9
9
|
export * from './Image';
|
|
10
10
|
export * from './Edges';
|
|
11
|
+
export * from './Trail';
|
|
12
|
+
export * from './Sampler';
|
|
13
|
+
export * from './ComputedAttribute';
|
|
14
|
+
export * from './Clone';
|
|
11
15
|
export * from './OrthographicCamera';
|
|
12
16
|
export * from './PerspectiveCamera';
|
|
13
17
|
export * from './CubeCamera';
|
|
@@ -40,6 +44,7 @@ export * from './useContextBridge';
|
|
|
40
44
|
export * from './useAnimations';
|
|
41
45
|
export * from './useFBO';
|
|
42
46
|
export * from './useIntersect';
|
|
47
|
+
export * from './useBoxProjectedEnv';
|
|
43
48
|
export * from './CurveModifier';
|
|
44
49
|
export * from './MeshDistortMaterial';
|
|
45
50
|
export * from './MeshWobbleMaterial';
|
|
@@ -61,6 +66,7 @@ export * from './ContactShadows';
|
|
|
61
66
|
export * from './Reflector';
|
|
62
67
|
export * from './SpotLight';
|
|
63
68
|
export * from './Environment';
|
|
69
|
+
export * from './Lightformer';
|
|
64
70
|
export * from './Sky';
|
|
65
71
|
export * from './Stars';
|
|
66
72
|
export * from './Cloud';
|
package/core/index.js
CHANGED
|
@@ -8,6 +8,10 @@ export { Effects, isWebGL2Available } from './Effects.js';
|
|
|
8
8
|
export { GradientTexture } from './GradientTexture.js';
|
|
9
9
|
export { Image } from './Image.js';
|
|
10
10
|
export { Edges } from './Edges.js';
|
|
11
|
+
export { Trail, useTrail } from './Trail.js';
|
|
12
|
+
export { Sampler } from './Sampler.js';
|
|
13
|
+
export { ComputedAttribute } from './ComputedAttribute.js';
|
|
14
|
+
export { Clone } from './Clone.js';
|
|
11
15
|
export { OrthographicCamera } from './OrthographicCamera.js';
|
|
12
16
|
export { PerspectiveCamera } from './PerspectiveCamera.js';
|
|
13
17
|
export { CubeCamera } from './CubeCamera.js';
|
|
@@ -40,6 +44,7 @@ export { useContextBridge } from './useContextBridge.js';
|
|
|
40
44
|
export { useAnimations } from './useAnimations.js';
|
|
41
45
|
export { useFBO } from './useFBO.js';
|
|
42
46
|
export { useIntersect } from './useIntersect.js';
|
|
47
|
+
export { useBoxProjectedEnv } from './useBoxProjectedEnv.js';
|
|
43
48
|
export { CurveModifier } from './CurveModifier.js';
|
|
44
49
|
export { MeshDistortMaterial } from './MeshDistortMaterial.js';
|
|
45
50
|
export { MeshWobbleMaterial } from './MeshWobbleMaterial.js';
|
|
@@ -60,7 +65,8 @@ export { Shadow } from './Shadow.js';
|
|
|
60
65
|
export { ContactShadows } from './ContactShadows.js';
|
|
61
66
|
export { Reflector } from './Reflector.js';
|
|
62
67
|
export { SpotLight } from './SpotLight.js';
|
|
63
|
-
export { Environment } from './Environment.js';
|
|
68
|
+
export { Environment, EnvironmentCube, EnvironmentMap, EnvironmentPortal } from './Environment.js';
|
|
69
|
+
export { Lightformer } from './Lightformer.js';
|
|
64
70
|
export { Sky, calcPosFromAngles } from './Sky.js';
|
|
65
71
|
export { Stars } from './Stars.js';
|
|
66
72
|
export { Cloud } from './Cloud.js';
|
|
@@ -83,8 +89,9 @@ import 'three';
|
|
|
83
89
|
import 'three-stdlib';
|
|
84
90
|
import 'troika-three-text';
|
|
85
91
|
import 'suspend-react';
|
|
86
|
-
import '
|
|
92
|
+
import 'meshline';
|
|
87
93
|
import 'lodash.pick';
|
|
94
|
+
import 'lodash.omit';
|
|
88
95
|
import 'zustand';
|
|
89
96
|
import 'stats.js';
|
|
90
97
|
import '../helpers/useEffectfulState.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),r=require("react"),n=require("@react-three/fiber");function i(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var i=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,i.get?i:{enumerable:!0,get:function(){return e[n]}})}})),r.default=e,Object.freeze(r)}var o=i(e),t=i(r);exports.useBoxProjectedEnv=function(e=new o.Vector3,r=new o.Vector3){const[i]=t.useState((()=>({position:new o.Vector3,size:new o.Vector3})));n.applyProps(i,{position:e,size:r});const a=t.useRef(null),c=t.useMemo((()=>({ref:a,onBeforeCompile:e=>function(e,r,n){e.defines.BOX_PROJECTED_ENV_MAP=!0,e.uniforms.envMapPosition={value:r},e.uniforms.envMapSize={value:n},e.vertexShader=`\n varying vec3 vWorldPosition;\n ${e.vertexShader.replace("#include <worldpos_vertex>","\n#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n #ifdef BOX_PROJECTED_ENV_MAP\n vWorldPosition = worldPosition.xyz;\n #endif\n#endif\n")}`,e.fragmentShader=`\n \n#ifdef BOX_PROJECTED_ENV_MAP\n uniform vec3 envMapSize;\n uniform vec3 envMapPosition;\n varying vec3 vWorldPosition;\n \n vec3 parallaxCorrectNormal( vec3 v, vec3 cubeSize, vec3 cubePos ) {\n vec3 nDir = normalize( v );\n vec3 rbmax = ( .5 * cubeSize + cubePos - vWorldPosition ) / nDir;\n vec3 rbmin = ( -.5 * cubeSize + cubePos - vWorldPosition ) / nDir;\n vec3 rbminmax;\n rbminmax.x = ( nDir.x > 0. ) ? rbmax.x : rbmin.x;\n rbminmax.y = ( nDir.y > 0. ) ? rbmax.y : rbmin.y;\n rbminmax.z = ( nDir.z > 0. ) ? rbmax.z : rbmin.z;\n float correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z );\n vec3 boxIntersection = vWorldPosition + nDir * correction; \n return boxIntersection - cubePos;\n }\n#endif\n\n ${e.fragmentShader.replace("#include <envmap_physical_pars_fragment>",o.ShaderChunk.envmap_physical_pars_fragment).replace("vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );","vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n \n#ifdef BOX_PROJECTED_ENV_MAP\n worldNormal = parallaxCorrectNormal( worldNormal, envMapSize, envMapPosition );\n#endif\n\n ").replace("reflectVec = inverseTransformDirection( reflectVec, viewMatrix );","reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n \n#ifdef BOX_PROJECTED_ENV_MAP\n reflectVec = parallaxCorrectNormal( reflectVec, envMapSize, envMapPosition );\n#endif\n\n ")}`}(e,i.position,i.size),customProgramCacheKey:()=>JSON.stringify(i.position.toArray())+JSON.stringify(i.size.toArray())})),[...i.position.toArray(),...i.size.toArray()]);return t.useLayoutEffect((()=>{a.current.needsUpdate=!0}),[i]),c};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { ReactThreeFiber } from '@react-three/fiber';
|
|
4
|
+
export declare function useBoxProjectedEnv(position?: ReactThreeFiber.Vector3, size?: ReactThreeFiber.Vector3): {
|
|
5
|
+
ref: React.MutableRefObject<THREE.Material>;
|
|
6
|
+
onBeforeCompile: (shader: THREE.Shader) => void;
|
|
7
|
+
customProgramCacheKey: () => string;
|
|
8
|
+
};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { applyProps } from '@react-three/fiber';
|
|
4
|
+
|
|
5
|
+
// and @0beqz https://gist.github.com/0beqz/8d51b4ae16d68021a09fb504af708fca
|
|
6
|
+
|
|
7
|
+
const worldposReplace =
|
|
8
|
+
/* glsl */
|
|
9
|
+
`
|
|
10
|
+
#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )
|
|
11
|
+
vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );
|
|
12
|
+
#ifdef BOX_PROJECTED_ENV_MAP
|
|
13
|
+
vWorldPosition = worldPosition.xyz;
|
|
14
|
+
#endif
|
|
15
|
+
#endif
|
|
16
|
+
`;
|
|
17
|
+
const boxProjectDefinitions =
|
|
18
|
+
/*glsl */
|
|
19
|
+
`
|
|
20
|
+
#ifdef BOX_PROJECTED_ENV_MAP
|
|
21
|
+
uniform vec3 envMapSize;
|
|
22
|
+
uniform vec3 envMapPosition;
|
|
23
|
+
varying vec3 vWorldPosition;
|
|
24
|
+
|
|
25
|
+
vec3 parallaxCorrectNormal( vec3 v, vec3 cubeSize, vec3 cubePos ) {
|
|
26
|
+
vec3 nDir = normalize( v );
|
|
27
|
+
vec3 rbmax = ( .5 * cubeSize + cubePos - vWorldPosition ) / nDir;
|
|
28
|
+
vec3 rbmin = ( -.5 * cubeSize + cubePos - vWorldPosition ) / nDir;
|
|
29
|
+
vec3 rbminmax;
|
|
30
|
+
rbminmax.x = ( nDir.x > 0. ) ? rbmax.x : rbmin.x;
|
|
31
|
+
rbminmax.y = ( nDir.y > 0. ) ? rbmax.y : rbmin.y;
|
|
32
|
+
rbminmax.z = ( nDir.z > 0. ) ? rbmax.z : rbmin.z;
|
|
33
|
+
float correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z );
|
|
34
|
+
vec3 boxIntersection = vWorldPosition + nDir * correction;
|
|
35
|
+
return boxIntersection - cubePos;
|
|
36
|
+
}
|
|
37
|
+
#endif
|
|
38
|
+
`; // will be inserted after "vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );"
|
|
39
|
+
|
|
40
|
+
const getIBLIrradiance_patch =
|
|
41
|
+
/* glsl */
|
|
42
|
+
`
|
|
43
|
+
#ifdef BOX_PROJECTED_ENV_MAP
|
|
44
|
+
worldNormal = parallaxCorrectNormal( worldNormal, envMapSize, envMapPosition );
|
|
45
|
+
#endif
|
|
46
|
+
`; // will be inserted after "reflectVec = inverseTransformDirection( reflectVec, viewMatrix );"
|
|
47
|
+
|
|
48
|
+
const getIBLRadiance_patch =
|
|
49
|
+
/* glsl */
|
|
50
|
+
`
|
|
51
|
+
#ifdef BOX_PROJECTED_ENV_MAP
|
|
52
|
+
reflectVec = parallaxCorrectNormal( reflectVec, envMapSize, envMapPosition );
|
|
53
|
+
#endif
|
|
54
|
+
`;
|
|
55
|
+
|
|
56
|
+
function boxProjectedEnvMap(shader, envMapPosition, envMapSize) {
|
|
57
|
+
shader.defines.BOX_PROJECTED_ENV_MAP = true; // uniforms
|
|
58
|
+
|
|
59
|
+
shader.uniforms.envMapPosition = {
|
|
60
|
+
value: envMapPosition
|
|
61
|
+
};
|
|
62
|
+
shader.uniforms.envMapSize = {
|
|
63
|
+
value: envMapSize
|
|
64
|
+
}; // vertex shader
|
|
65
|
+
|
|
66
|
+
shader.vertexShader = `
|
|
67
|
+
varying vec3 vWorldPosition;
|
|
68
|
+
${shader.vertexShader.replace('#include <worldpos_vertex>', worldposReplace)}`; // fragment shader
|
|
69
|
+
|
|
70
|
+
shader.fragmentShader = `
|
|
71
|
+
${boxProjectDefinitions}
|
|
72
|
+
${shader.fragmentShader.replace('#include <envmap_physical_pars_fragment>', THREE.ShaderChunk.envmap_physical_pars_fragment).replace('vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );', `vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
|
|
73
|
+
${getIBLIrradiance_patch}
|
|
74
|
+
`).replace('reflectVec = inverseTransformDirection( reflectVec, viewMatrix );', `reflectVec = inverseTransformDirection( reflectVec, viewMatrix );
|
|
75
|
+
${getIBLRadiance_patch}
|
|
76
|
+
`)}`;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function useBoxProjectedEnv(position = new THREE.Vector3(), size = new THREE.Vector3()) {
|
|
80
|
+
const [config] = React.useState(() => ({
|
|
81
|
+
position: new THREE.Vector3(),
|
|
82
|
+
size: new THREE.Vector3()
|
|
83
|
+
}));
|
|
84
|
+
applyProps(config, {
|
|
85
|
+
position,
|
|
86
|
+
size
|
|
87
|
+
});
|
|
88
|
+
const ref = React.useRef(null);
|
|
89
|
+
const spread = React.useMemo(() => ({
|
|
90
|
+
ref,
|
|
91
|
+
onBeforeCompile: shader => boxProjectedEnvMap(shader, config.position, config.size),
|
|
92
|
+
customProgramCacheKey: () => JSON.stringify(config.position.toArray()) + JSON.stringify(config.size.toArray())
|
|
93
|
+
}), [...config.position.toArray(), ...config.size.toArray()]);
|
|
94
|
+
React.useLayoutEffect(() => void (ref.current.needsUpdate = true), [config]);
|
|
95
|
+
return spread;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export { useBoxProjectedEnv };
|
package/core/useFBO.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("three"),r=require("@react-three/fiber");function u(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var u=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,u.get?u:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("three"),r=require("@react-three/fiber");function u(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var u=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,u.get?u:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var n=u(e),i=u(t);exports.useFBO=function(e,t,u){const{gl:o,size:s}=r.useThree(),a=n.useMemo((()=>o.getPixelRatio()),[o]),c="number"==typeof e?e:s.width*a,f="number"==typeof t?t:s.height*a,l=("number"==typeof e?u:e)||{},{samples:p,...b}=l,d=n.useMemo((()=>{let e;return e=new i.WebGLRenderTarget(c,f,{minFilter:i.LinearFilter,magFilter:i.LinearFilter,encoding:o.outputEncoding,type:i.HalfFloatType,...b}),e.samples=p,e}),[]);return n.useLayoutEffect((()=>{d.setSize(c,f),p&&(d.samples=p)}),[p,d,c,f]),n.useEffect((()=>()=>d.dispose()),[]),d};
|
package/core/useFBO.d.ts
CHANGED
|
@@ -3,5 +3,5 @@ declare type FBOSettings<T extends boolean = false> = {
|
|
|
3
3
|
multisample?: T;
|
|
4
4
|
samples?: number;
|
|
5
5
|
} & THREE.WebGLRenderTargetOptions;
|
|
6
|
-
export declare function useFBO<T extends boolean = false>(width?: number | FBOSettings<T>, height?: number, settings?: FBOSettings<T>):
|
|
6
|
+
export declare function useFBO<T extends boolean = false>(width?: number | FBOSettings<T>, height?: number, settings?: FBOSettings<T>): THREE.WebGLRenderTarget;
|
|
7
7
|
export {};
|
package/core/useFBO.js
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
import * as THREE from 'three';
|
|
3
3
|
import { useThree } from '@react-three/fiber';
|
|
4
4
|
|
|
5
5
|
// 👇 uncomment when TS version supports function overloads
|
|
6
6
|
// export function useFBO(settings?: FBOSettings)
|
|
7
7
|
function useFBO(width, height, settings) {
|
|
8
|
-
const
|
|
9
|
-
gl
|
|
10
|
-
}) => gl);
|
|
11
|
-
const size = useThree(({
|
|
8
|
+
const {
|
|
9
|
+
gl,
|
|
12
10
|
size
|
|
13
|
-
}
|
|
14
|
-
const dpr = useMemo(() => gl.getPixelRatio(), [gl]);
|
|
11
|
+
} = useThree();
|
|
12
|
+
const dpr = React.useMemo(() => gl.getPixelRatio(), [gl]);
|
|
15
13
|
|
|
16
14
|
const _width = typeof width === 'number' ? width : size.width * dpr;
|
|
17
15
|
|
|
@@ -19,27 +17,27 @@ function useFBO(width, height, settings) {
|
|
|
19
17
|
|
|
20
18
|
const _settings = (typeof width === 'number' ? settings : width) || {};
|
|
21
19
|
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
} = _settings;
|
|
20
|
+
const {
|
|
21
|
+
samples,
|
|
22
|
+
...targetSettings
|
|
23
|
+
} = _settings;
|
|
24
|
+
const target = React.useMemo(() => {
|
|
28
25
|
let target;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
26
|
+
target = new THREE.WebGLRenderTarget(_width, _height, {
|
|
27
|
+
minFilter: THREE.LinearFilter,
|
|
28
|
+
magFilter: THREE.LinearFilter,
|
|
29
|
+
encoding: gl.outputEncoding,
|
|
30
|
+
type: THREE.HalfFloatType,
|
|
31
|
+
...targetSettings
|
|
32
|
+
});
|
|
33
|
+
target.samples = samples;
|
|
37
34
|
return target;
|
|
38
35
|
}, []);
|
|
39
|
-
|
|
36
|
+
React.useLayoutEffect(() => {
|
|
40
37
|
target.setSize(_width, _height);
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
if (samples) target.samples = samples;
|
|
39
|
+
}, [samples, target, _width, _height]);
|
|
40
|
+
React.useEffect(() => {
|
|
43
41
|
return () => target.dispose();
|
|
44
42
|
}, []);
|
|
45
43
|
return target;
|
package/core/useGLTF.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { GLTFLoader } from 'three-stdlib';
|
|
2
|
-
export declare function useGLTF<T extends string | string[]>(path: T, useDraco?: boolean | string, useMeshOpt?: boolean, extendLoader?: (loader: GLTFLoader) => void): T extends any[] ?
|
|
2
|
+
export declare function useGLTF<T extends string | string[]>(path: T, useDraco?: boolean | string, useMeshOpt?: boolean, extendLoader?: (loader: GLTFLoader) => void): T extends any[] ? import("three-stdlib").GLTF[] : import("three-stdlib").GLTF;
|
|
3
3
|
export declare namespace useGLTF {
|
|
4
4
|
var preload: (path: string | string[], useDraco?: string | boolean, useMeshOpt?: boolean, extendLoader?: ((loader: GLTFLoader) => void) | undefined) => undefined;
|
|
5
5
|
var clear: (input: string | string[]) => void;
|
package/core/useHelper.d.ts
CHANGED
|
@@ -4,5 +4,7 @@ import { Falsey } from 'utility-types';
|
|
|
4
4
|
declare type Helper = Object3D & {
|
|
5
5
|
update: () => void;
|
|
6
6
|
};
|
|
7
|
-
|
|
7
|
+
declare type Constructor = new (...args: any[]) => any;
|
|
8
|
+
declare type Rest<T> = T extends [infer _, ...infer R] ? R : never;
|
|
9
|
+
export declare function useHelper<T extends Constructor>(object3D: React.MutableRefObject<Object3D | undefined> | Falsey | undefined, helperConstructor: T, ...args: Rest<ConstructorParameters<T>>): React.MutableRefObject<Helper | undefined>;
|
|
8
10
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./useTexture.cjs.js"),r=require("suspend-react");function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("three"),require("@react-three/fiber");var u=s(e);exports.useMatcapTexture=function(e=0,s=1024){const n=r.suspend((()=>fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json").then((e=>e.json()))),["matcapList"]),c=n[0],a=u.useMemo((()=>Object.keys(n).length),[]),i
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./useTexture.cjs.js"),r=require("suspend-react");function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("three"),require("@react-three/fiber");var u=s(e);exports.useMatcapTexture=function(e=0,s=1024){const n=r.suspend((()=>fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json").then((e=>e.json()))),["matcapList"]),c=n[0],a=u.useMemo((()=>Object.keys(n).length),[]),i=`${u.useMemo((()=>"string"==typeof e?e:"number"==typeof e?n[e]:null),[e])||c}${function(e){switch(e){case 64:return"-64px";case 128:return"-128px";case 256:return"-256px";case 512:return"-512px";default:return""}}(s)}.png`,p=`https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d/${s}/${i}`;return[t.useTexture(p),p,a]};
|
package/core/useProgress.d.ts
CHANGED