@react-three/drei 9.0.0-beta.1 → 9.0.0-beta.4
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 +461 -48
- package/core/ArcballControls.cjs.js +1 -1
- package/core/ArcballControls.d.ts +8 -8
- package/core/ArcballControls.js +19 -30
- 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 +4 -1
- package/core/Cloud.js +7 -3
- 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 +4 -1
- package/core/ContactShadows.js +33 -13
- package/core/CubeCamera.cjs.js +1 -1
- package/core/CubeCamera.js +6 -7
- package/core/CurveModifier.cjs.js +1 -1
- package/core/CurveModifier.js +18 -22
- package/core/Detailed.d.ts +1 -1
- package/core/DeviceOrientationControls.cjs.js +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 +100 -56
- package/core/FirstPersonControls.cjs.js +1 -1
- package/core/FirstPersonControls.d.ts +1 -1
- package/core/FirstPersonControls.js +2 -6
- package/core/Float.cjs.js +1 -1
- package/core/Float.d.ts +1 -1
- package/core/Float.js +5 -4
- package/core/GizmoHelper.cjs.js +1 -1
- package/core/GizmoHelper.d.ts +2 -1
- package/core/GizmoHelper.js +31 -41
- package/core/GizmoViewcube.cjs.js +1 -1
- package/core/GizmoViewcube.js +1 -1
- package/core/GradientTexture.cjs.js +1 -1
- package/core/GradientTexture.js +5 -2
- package/core/Image.cjs.js +1 -1
- package/core/Image.d.ts +6 -4
- package/core/Image.js +6 -1
- package/core/Instances.cjs.js +1 -1
- package/core/Instances.d.ts +2 -2
- 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/Line.d.ts +1 -1
- package/core/MapControls.d.ts +1 -1
- package/core/MeshDistortMaterial.d.ts +2 -4
- package/core/MeshReflectorMaterial.cjs.js +1 -1
- package/core/MeshReflectorMaterial.d.ts +2 -2
- package/core/MeshReflectorMaterial.js +7 -7
- package/core/MeshWobbleMaterial.d.ts +2 -4
- package/core/OrbitControls.cjs.js +1 -1
- package/core/OrbitControls.d.ts +10 -10
- package/core/OrbitControls.js +14 -26
- package/core/OrthographicCamera.d.ts +1 -1
- package/core/PerspectiveCamera.d.ts +1 -1
- 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 +36 -22
- 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.cjs.js +1 -1
- package/core/Reflector.d.ts +1 -1
- package/core/Reflector.js +1 -2
- package/core/RoundedBox.cjs.js +1 -1
- package/core/RoundedBox.d.ts +2 -1
- package/core/RoundedBox.js +2 -1
- package/core/Sampler.cjs.js +1 -0
- package/core/Sampler.d.ts +21 -0
- package/core/Sampler.js +65 -0
- package/core/Shadow.d.ts +1 -1
- package/core/SpotLight.d.ts +20 -4
- package/core/Stage.cjs.js +1 -1
- package/core/Stage.d.ts +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 +2 -2
- package/core/Text.cjs.js +1 -1
- package/core/Text.d.ts +3 -2
- package/core/Text.js +9 -1
- package/core/TrackballControls.cjs.js +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 +13 -11
- package/core/index.cjs.js +1 -1
- package/core/index.d.ts +6 -0
- package/core/index.js +11 -4
- package/core/shaderMaterial.d.ts +1 -1
- package/core/useBoxProjectedEnv.cjs.js +1 -0
- package/core/useBoxProjectedEnv.d.ts +8 -0
- package/core/useBoxProjectedEnv.js +98 -0
- package/core/useDetectGPU.cjs.js +1 -1
- package/core/useDetectGPU.js +2 -2
- package/core/useFBO.cjs.js +1 -1
- package/core/useFBO.d.ts +1 -1
- package/core/useFBO.js +22 -24
- package/core/useHelper.cjs.js +1 -1
- package/core/useHelper.d.ts +4 -1
- package/core/useHelper.js +16 -6
- package/core/useMatcapTexture.cjs.js +1 -1
- package/core/useMatcapTexture.js +2 -5
- package/core/useNormalTexture.cjs.js +1 -1
- package/core/useNormalTexture.js +2 -5
- package/helpers/Position.cjs.js +1 -1
- package/helpers/Position.js +3 -2
- package/helpers/environment-assets.cjs.js +1 -1
- package/helpers/environment-assets.js +10 -10
- 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 -35
- package/materials/SpotLightMaterial.cjs.js +1 -1
- package/materials/SpotLightMaterial.js +3 -0
- package/native/index.cjs.js +1 -1
- package/native/index.js +11 -4
- package/package.json +8 -7
- package/web/Html.cjs.js +1 -1
- package/web/Html.js +4 -5
- package/web/ScrollControls.cjs.js +1 -1
- package/web/ScrollControls.js +6 -5
- package/web/Select.cjs.js +1 -1
- package/web/Select.d.ts +2 -1
- package/web/Select.js +3 -2
- package/web/index.cjs.js +1 -1
- package/web/index.js +12 -5
package/core/Sampler.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { MeshSurfaceSampler } from 'three-stdlib';
|
|
4
|
+
import { Vector3, Color, Object3D } from 'three';
|
|
5
|
+
|
|
6
|
+
const Sampler = ({
|
|
7
|
+
children,
|
|
8
|
+
weight,
|
|
9
|
+
transform,
|
|
10
|
+
instances,
|
|
11
|
+
mesh,
|
|
12
|
+
...props
|
|
13
|
+
}) => {
|
|
14
|
+
const group = React.useRef(null);
|
|
15
|
+
const instancedRef = React.useRef(null);
|
|
16
|
+
const meshToSampleRef = React.useRef(null);
|
|
17
|
+
React.useEffect(() => {
|
|
18
|
+
var _instances$current, _mesh$current;
|
|
19
|
+
|
|
20
|
+
instancedRef.current = (_instances$current = instances == null ? void 0 : instances.current) !== null && _instances$current !== void 0 ? _instances$current : group.current.children.find(c => c.hasOwnProperty('instanceMatrix'));
|
|
21
|
+
meshToSampleRef.current = (_mesh$current = mesh == null ? void 0 : mesh.current) !== null && _mesh$current !== void 0 ? _mesh$current : group.current.children.find(c => c.type === 'Mesh');
|
|
22
|
+
}, [children, mesh == null ? void 0 : mesh.current, instances == null ? void 0 : instances.current]);
|
|
23
|
+
React.useEffect(() => {
|
|
24
|
+
if (typeof meshToSampleRef.current === 'undefined') return;
|
|
25
|
+
if (typeof instancedRef.current === 'undefined') return;
|
|
26
|
+
const sampler = new MeshSurfaceSampler(meshToSampleRef.current);
|
|
27
|
+
|
|
28
|
+
if (weight) {
|
|
29
|
+
sampler.setWeightAttribute(weight);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
sampler.build();
|
|
33
|
+
const position = new Vector3();
|
|
34
|
+
const normal = new Vector3();
|
|
35
|
+
const color = new Color();
|
|
36
|
+
const dummy = new Object3D();
|
|
37
|
+
meshToSampleRef.current.updateMatrixWorld(true);
|
|
38
|
+
|
|
39
|
+
for (let i = 0; i < instancedRef.current.count; i++) {
|
|
40
|
+
sampler.sample(position, normal, color);
|
|
41
|
+
|
|
42
|
+
if (typeof transform === 'function') {
|
|
43
|
+
transform({
|
|
44
|
+
dummy,
|
|
45
|
+
sampledMesh: meshToSampleRef.current,
|
|
46
|
+
position,
|
|
47
|
+
normal,
|
|
48
|
+
color
|
|
49
|
+
}, i);
|
|
50
|
+
} else {
|
|
51
|
+
dummy.position.copy(position);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
dummy.updateMatrix();
|
|
55
|
+
instancedRef.current.setMatrixAt(i, dummy.matrix);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
instancedRef.current.instanceMatrix.needsUpdate = true;
|
|
59
|
+
}, [children, mesh == null ? void 0 : mesh.current, instances == null ? void 0 : instances.current]);
|
|
60
|
+
return /*#__PURE__*/React.createElement("group", _extends({
|
|
61
|
+
ref: group
|
|
62
|
+
}, props), children);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export { Sampler };
|
package/core/Shadow.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { Mesh, Color } from 'three';
|
|
3
|
-
export declare const Shadow: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").
|
|
3
|
+
export declare const Shadow: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").ExtendedColors<import("@react-three/fiber").Overwrite<Partial<Mesh<import("three").BufferGeometry, import("three").Material | import("three").Material[]>>, import("@react-three/fiber").NodeProps<Mesh<import("three").BufferGeometry, import("three").Material | import("three").Material[]>, typeof Mesh>>>, import("@react-three/fiber").NonFunctionKeys<{
|
|
4
4
|
position?: import("@react-three/fiber").Vector3 | undefined;
|
|
5
5
|
up?: import("@react-three/fiber").Vector3 | undefined;
|
|
6
6
|
scale?: import("@react-three/fiber").Vector3 | undefined;
|
package/core/SpotLight.d.ts
CHANGED
|
@@ -1,8 +1,24 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { DepthTexture, SpotLight as SpotLightImpl } from 'three';
|
|
3
|
-
declare const SpotLight: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
declare const SpotLight: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").ExtendedColors<import("@react-three/fiber").Overwrite<Partial<SpotLightImpl>, import("@react-three/fiber").NodeProps<SpotLightImpl, typeof SpotLightImpl>>>, import("@react-three/fiber").NonFunctionKeys<{
|
|
4
|
+
position?: import("@react-three/fiber").Vector3 | undefined;
|
|
5
|
+
up?: import("@react-three/fiber").Vector3 | undefined;
|
|
6
|
+
scale?: import("@react-three/fiber").Vector3 | undefined;
|
|
7
|
+
rotation?: import("@react-three/fiber").Euler | undefined;
|
|
8
|
+
matrix?: import("@react-three/fiber").Matrix4 | undefined;
|
|
9
|
+
quaternion?: import("@react-three/fiber").Quaternion | undefined;
|
|
10
|
+
layers?: import("@react-three/fiber").Layers | undefined;
|
|
11
|
+
dispose?: (() => void) | null | undefined;
|
|
12
|
+
}>> & {
|
|
13
|
+
position?: import("@react-three/fiber").Vector3 | undefined;
|
|
14
|
+
up?: import("@react-three/fiber").Vector3 | undefined;
|
|
15
|
+
scale?: import("@react-three/fiber").Vector3 | undefined;
|
|
16
|
+
rotation?: import("@react-three/fiber").Euler | undefined;
|
|
17
|
+
matrix?: import("@react-three/fiber").Matrix4 | undefined;
|
|
18
|
+
quaternion?: import("@react-three/fiber").Quaternion | undefined;
|
|
19
|
+
layers?: import("@react-three/fiber").Layers | undefined;
|
|
20
|
+
dispose?: (() => void) | null | undefined;
|
|
21
|
+
} & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
|
|
6
22
|
depthBuffer?: DepthTexture | undefined;
|
|
7
23
|
attenuation?: number | undefined;
|
|
8
24
|
anglePower?: number | undefined;
|
|
@@ -10,5 +26,5 @@ declare const SpotLight: React.ForwardRefExoticComponent<Pick<Omit<import("@reac
|
|
|
10
26
|
radiusBottom?: number | undefined;
|
|
11
27
|
opacity?: number | undefined;
|
|
12
28
|
color?: string | number | undefined;
|
|
13
|
-
}, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "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" | "color" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "distance" | "opacity" | "decay" | "target" | "angle" | "intensity" | "isLight" | "shadow" | "shadowCameraFov" | "shadowCameraLeft" | "shadowCameraRight" | "shadowCameraTop" | "shadowCameraBottom" | "shadowCameraNear" | "shadowCameraFar" | "shadowBias" | "shadowMapWidth" | "shadowMapHeight" | "power" | "depthBuffer" | "
|
|
29
|
+
}, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "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" | "color" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "distance" | "opacity" | "decay" | "target" | "angle" | "attenuation" | "penumbra" | "intensity" | "isLight" | "shadow" | "shadowCameraFov" | "shadowCameraLeft" | "shadowCameraRight" | "shadowCameraTop" | "shadowCameraBottom" | "shadowCameraNear" | "shadowCameraFar" | "shadowBias" | "shadowMapWidth" | "shadowMapHeight" | "power" | "depthBuffer" | "isSpotLight" | "anglePower" | "radiusTop" | "radiusBottom"> & React.RefAttributes<SpotLightImpl>>;
|
|
14
30
|
export { SpotLight };
|
package/core/Stage.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),n=require("@react-three/fiber"),i=require("./Environment.cjs.js"),a=require("./ContactShadows.cjs.js");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),n=require("@react-three/fiber"),i=require("./Environment.cjs.js"),a=require("./ContactShadows.cjs.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}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 n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("three-stdlib"),require("../helpers/environment-assets.cjs.js");var u=o(e),c=s(t),l=s(r);const f={rembrandt:{main:[1,2,1],fill:[-2,-.5,-2]},portrait:{main:[-1,2,.5],fill:[-1,.5,-1.5]},upfront:{main:[0,2,1],fill:[-1,.5,-1.5]},soft:{main:[-2,4,4],fill:[-1,.5,-1.5]}};exports.Stage=function({children:e,controls:t,shadows:r=!0,adjustCamera:o=!0,environment:s="city",intensity:d=1,preset:m="rembrandt",shadowBias:h=0,contactShadow:p={blur:2,opacity:.5,position:[0,0,0]},...b}){const g=f[m],y=n.useThree((e=>e.camera)),j=n.useThree((e=>e.controls)),w=c.useRef(null),E=c.useRef(null),[{radius:x,width:v,height:q},O]=c.useState({radius:0,width:0,height:0});return c.useLayoutEffect((()=>{w.current.position.set(0,0,0),w.current.updateWorldMatrix(!0,!0);const e=(new l.Box3).setFromObject(E.current),t=new l.Vector3,r=new l.Sphere,n=e.max.y-e.min.y,i=e.max.x-e.min.x;e.getCenter(t),e.getBoundingSphere(r),O({radius:r.radius,width:i,height:n}),w.current.position.set(-t.x,-t.y+n/2,-t.z)}),[e]),c.useLayoutEffect((()=>{if(o){const e=x/(q>v?1.5:2.5);y.position.set(0,.5*x,2.5*x),y.near=.1,y.far=Math.max(5e3,4*x),y.lookAt(0,e,0);const r=j||(null==t?void 0:t.current);r&&(r.target.set(0,e,0),r.update())}}),[j,x,q,v,o]),c.createElement("group",b,c.createElement("group",{ref:w},c.createElement("group",{ref:E},e)),p&&c.createElement(a.ContactShadows,u.default({scale:2*x,far:x/2},p)),s&&c.createElement(i.Environment,{preset:s}),c.createElement("ambientLight",{intensity:d/3}),c.createElement("spotLight",{penumbra:1,position:[g.main[0]*x,g.main[1]*x,g.main[2]*x],intensity:2*d,castShadow:r,"shadow-bias":h}),c.createElement("pointLight",{position:[g.fill[0]*x,g.fill[1]*x,g.fill[2]*x],intensity:d}))};
|
package/core/Stage.d.ts
CHANGED
|
@@ -26,7 +26,7 @@ declare type ControlsProto = {
|
|
|
26
26
|
declare type Props = JSX.IntrinsicElements['group'] & {
|
|
27
27
|
shadows?: boolean;
|
|
28
28
|
adjustCamera?: boolean;
|
|
29
|
-
environment?: PresetsType;
|
|
29
|
+
environment?: PresetsType | null;
|
|
30
30
|
intensity?: number;
|
|
31
31
|
ambience?: number;
|
|
32
32
|
controls?: React.MutableRefObject<ControlsProto>;
|
package/core/Stage.js
CHANGED
|
@@ -91,8 +91,7 @@ function Stage({
|
|
|
91
91
|
}, /*#__PURE__*/React.createElement("group", {
|
|
92
92
|
ref: inner
|
|
93
93
|
}, children)), contactShadow && /*#__PURE__*/React.createElement(ContactShadows, _extends({
|
|
94
|
-
|
|
95
|
-
height: radius * 2,
|
|
94
|
+
scale: radius * 2,
|
|
96
95
|
far: radius / 2
|
|
97
96
|
}, contactShadow)), environment && /*#__PURE__*/React.createElement(Environment, {
|
|
98
97
|
preset: environment
|
package/core/Stars.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@react-three/fiber"),r=require("three");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@react-three/fiber"),r=require("three");function n(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var a=n(e);class o extends r.ShaderMaterial{constructor(){super({uniforms:{time:{value:0},fade:{value:1}},vertexShader:"\n uniform float time;\n attribute float size;\n varying vec3 vColor;\n void main() {\n vColor = color;\n vec4 mvPosition = modelViewMatrix * vec4(position, 0.5);\n gl_PointSize = size * (30.0 / -mvPosition.z) * (3.0 + sin(mvPosition.x + 2.0 * time + 100.0));\n gl_Position = projectionMatrix * mvPosition;\n }",fragmentShader:"\n uniform sampler2D pointTexture;\n uniform float fade;\n varying vec3 vColor;\n void main() {\n float opacity = 1.0;\n if (fade == 1.0) {\n float d = distance(gl_PointCoord, vec2(0.5, 0.5));\n opacity = 1.0 / (1.0 + exp(16.0 * (d - 0.25)));\n }\n gl_FragColor = vec4(vColor, opacity);\n\n #include <tonemapping_fragment>\n\t #include <encodings_fragment>\n }"})}}const i=e=>(new r.Vector3).setFromSpherical(new r.Spherical(e,Math.acos(1-2*Math.random()),2*Math.random()*Math.PI)),c=a.forwardRef((({radius:e=100,depth:n=50,count:c=5e3,saturation:s=0,factor:u=4,fade:l=!1},f)=>{const m=a.useRef(),[d,v,p]=a.useMemo((()=>{const t=[],a=[],o=Array.from({length:c},(()=>(.5+.5*Math.random())*u)),l=new r.Color;let f=e+n;const m=n/c;for(let e=0;e<c;e++)f-=m*Math.random(),t.push(...i(f).toArray()),l.setHSL(e/c,s,.9),a.push(l.r,l.g,l.b);return[new Float32Array(t),new Float32Array(a),new Float32Array(o)]}),[c,n,u,e,s]);t.useFrame((e=>m.current&&(m.current.uniforms.time.value=e.clock.getElapsedTime())));const[g]=a.useState((()=>new o));return a.createElement("points",{ref:f},a.createElement("bufferGeometry",{attach:"geometry"},a.createElement("bufferAttribute",{attach:"attributes-position",args:[d,3]}),a.createElement("bufferAttribute",{attach:"attributes-color",args:[v,3]}),a.createElement("bufferAttribute",{attach:"attributes-size",args:[p,1]})),a.createElement("primitive",{dispose:void 0,ref:m,object:g,attach:"material",blending:r.AdditiveBlending,"uniforms-fade-value":l,transparent:!0,vertexColors:!0}))}));exports.Stars=c;
|
package/core/Stars.js
CHANGED
package/core/Stats.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@react-three/fiber"),r=require("
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@react-three/fiber"),r=require("stats.js"),n=require("../helpers/useEffectfulState.cjs.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function f(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var c=f(e),a=u(r);exports.Stats=function({showPanel:e=0,className:r,parent:u}){const f=n.useEffectfulState((()=>new a.default),[]);return c.useEffect((()=>{if(f){const n=u&&u.current||document.body;f.showPanel(e),null==n||n.appendChild(f.dom),r&&f.dom.classList.add(...r.split(" ").filter((e=>e)));const c=t.addEffect((()=>f.begin())),a=t.addAfterEffect((()=>f.end()));return()=>{null==n||n.removeChild(f.dom),c(),a()}}}),[u,f,r,e]),null};
|
package/core/Stats.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { addEffect, addAfterEffect } from '@react-three/fiber';
|
|
3
|
-
import StatsImpl from '
|
|
3
|
+
import StatsImpl from 'stats.js';
|
|
4
4
|
import { useEffectfulState } from '../helpers/useEffectfulState.js';
|
|
5
5
|
|
|
6
6
|
function Stats({
|
|
@@ -14,7 +14,7 @@ function Stats({
|
|
|
14
14
|
const node = parent && parent.current || document.body;
|
|
15
15
|
stats.showPanel(showPanel);
|
|
16
16
|
node == null ? void 0 : node.appendChild(stats.dom);
|
|
17
|
-
if (className) stats.dom.classList.add(className);
|
|
17
|
+
if (className) stats.dom.classList.add(...className.split(' ').filter(cls => cls));
|
|
18
18
|
const begin = addEffect(() => stats.begin());
|
|
19
19
|
const end = addAfterEffect(() => stats.end());
|
|
20
20
|
return () => {
|
package/core/Text.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("troika-three-text"),n=require("@react-three/fiber");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("troika-three-text"),n=require("@react-three/fiber"),o=require("suspend-react");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}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 n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var a=c(e),i=u(t);const f=i.forwardRef((({anchorX:e="center",anchorY:t="middle",font:c,children:u,characters:f,onSync:s,...d},l)=>{const p=n.useThree((({invalidate:e})=>e)),[h]=i.useState((()=>new r.Text)),[b,y]=i.useMemo((()=>{const e=[];let t="";return i.Children.forEach(u,(r=>{"string"==typeof r||"number"==typeof r?t+=r:e.push(r)})),[e,t]}),[u]);return o.suspend((()=>new Promise((e=>r.preloadFont({font:c,characters:f},e)))),["troika-text",c,f]),i.useLayoutEffect((()=>{h.sync((()=>{p(),s&&s(h)}))})),i.useEffect((()=>()=>h.dispose()),[h]),i.createElement("primitive",a.default({object:h,ref:l,font:c,text:y,anchorX:e,anchorY:t},d),b)}));exports.Text=f;
|
package/core/Text.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { ReactThreeFiber } from '@react-three/fiber';
|
|
3
|
-
export declare const Text: React.ForwardRefExoticComponent<Pick<Omit<ReactThreeFiber.
|
|
3
|
+
export declare const Text: React.ForwardRefExoticComponent<Pick<Omit<ReactThreeFiber.ExtendedColors<ReactThreeFiber.Overwrite<Partial<import("three").Mesh<import("three").BufferGeometry, import("three").Material | import("three").Material[]>>, ReactThreeFiber.NodeProps<import("three").Mesh<import("three").BufferGeometry, import("three").Material | import("three").Material[]>, typeof import("three").Mesh>>>, ReactThreeFiber.NonFunctionKeys<{
|
|
4
4
|
position?: ReactThreeFiber.Vector3 | undefined;
|
|
5
5
|
up?: ReactThreeFiber.Vector3 | undefined;
|
|
6
6
|
scale?: ReactThreeFiber.Vector3 | undefined;
|
|
@@ -20,6 +20,7 @@ export declare const Text: React.ForwardRefExoticComponent<Pick<Omit<ReactThreeF
|
|
|
20
20
|
dispose?: (() => void) | null | undefined;
|
|
21
21
|
} & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
|
|
22
22
|
children: React.ReactNode;
|
|
23
|
+
characters?: string | undefined;
|
|
23
24
|
color?: ReactThreeFiber.Color | undefined;
|
|
24
25
|
fontSize?: number | undefined;
|
|
25
26
|
maxWidth?: number | undefined;
|
|
@@ -46,4 +47,4 @@ export declare const Text: React.ForwardRefExoticComponent<Pick<Omit<ReactThreeF
|
|
|
46
47
|
fillOpacity?: number | undefined;
|
|
47
48
|
debugSDF?: boolean | undefined;
|
|
48
49
|
onSync?: ((troika: TextMeshImpl) => void) | undefined;
|
|
49
|
-
}, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "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" | "color" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "font" | "material" | "direction" | "fontSize" | "letterSpacing" | "lineHeight" | "maxWidth" | "outlineColor" | "outlineWidth" | "overflowWrap" | "textAlign" | "whiteSpace" | "fillOpacity" | "strokeOpacity" | "strokeWidth" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "anchorX" | "anchorY" | "onSync" | "clipRect" | "depthOffset" | "outlineOffsetX" | "outlineOffsetY" | "outlineBlur" | "outlineOpacity" | "strokeColor" | "debugSDF"> & React.RefAttributes<unknown>>;
|
|
50
|
+
}, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "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" | "color" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "font" | "material" | "direction" | "fontSize" | "letterSpacing" | "lineHeight" | "maxWidth" | "outlineColor" | "outlineWidth" | "overflowWrap" | "textAlign" | "whiteSpace" | "fillOpacity" | "strokeOpacity" | "strokeWidth" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "anchorX" | "anchorY" | "characters" | "onSync" | "clipRect" | "depthOffset" | "outlineOffsetX" | "outlineOffsetY" | "outlineBlur" | "outlineOpacity" | "strokeColor" | "debugSDF"> & React.RefAttributes<unknown>>;
|
package/core/Text.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { Text as Text$1 } from 'troika-three-text';
|
|
3
|
+
import { Text as Text$1, preloadFont } from 'troika-three-text';
|
|
4
4
|
import { useThree } from '@react-three/fiber';
|
|
5
|
+
import { suspend } from 'suspend-react';
|
|
5
6
|
|
|
6
7
|
// eslint-disable-next-line prettier/prettier
|
|
7
8
|
const Text = /*#__PURE__*/React.forwardRef(({
|
|
8
9
|
anchorX = 'center',
|
|
9
10
|
anchorY = 'middle',
|
|
11
|
+
font,
|
|
10
12
|
children,
|
|
13
|
+
characters,
|
|
11
14
|
onSync,
|
|
12
15
|
...props
|
|
13
16
|
}, ref) => {
|
|
@@ -27,6 +30,10 @@ const Text = /*#__PURE__*/React.forwardRef(({
|
|
|
27
30
|
});
|
|
28
31
|
return [n, t];
|
|
29
32
|
}, [children]);
|
|
33
|
+
suspend(() => new Promise(res => preloadFont({
|
|
34
|
+
font,
|
|
35
|
+
characters
|
|
36
|
+
}, res)), ['troika-text', font, characters]);
|
|
30
37
|
React.useLayoutEffect(() => void troikaMesh.sync(() => {
|
|
31
38
|
invalidate();
|
|
32
39
|
if (onSync) onSync(troikaMesh);
|
|
@@ -37,6 +44,7 @@ const Text = /*#__PURE__*/React.forwardRef(({
|
|
|
37
44
|
return /*#__PURE__*/React.createElement("primitive", _extends({
|
|
38
45
|
object: troikaMesh,
|
|
39
46
|
ref: ref,
|
|
47
|
+
font: font,
|
|
40
48
|
text: text,
|
|
41
49
|
anchorX: anchorX,
|
|
42
50
|
anchorY: anchorY
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=o(e),c=a(r);const u=c.forwardRef((({makeDefault:e,camera:r,domElement:o,regress:a,onChange:u,onStart:i,onEnd:l
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function a(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=o(e),c=a(r);const u=c.forwardRef((({makeDefault:e,camera:r,domElement:o,regress:a,onChange:u,onStart:i,onEnd:f,...l},d)=>{const{invalidate:v,camera:m,gl:b,events:E,set:p,get:g,performance:h,viewport:j}=t.useThree(),O=r||m,L=o||E.connected||b.domElement,y=c.useMemo((()=>new n.TrackballControls(O)),[O]);return t.useFrame((()=>{y.enabled&&y.update()})),c.useEffect((()=>(y.connect(L),()=>{y.dispose()})),[L,a,y,v]),c.useEffect((()=>{const e=e=>{v(),a&&h.regress(),u&&u(e)};return y.addEventListener("change",e),i&&y.addEventListener("start",i),f&&y.addEventListener("end",f),()=>{i&&y.removeEventListener("start",i),f&&y.removeEventListener("end",f),y.removeEventListener("change",e)}}),[u,i,f]),c.useEffect((()=>{y.handleResize()}),[j]),c.useEffect((()=>{if(e){const e=g().controls;return p({controls:y}),()=>p({controls:e})}}),[e,y]),c.createElement("primitive",s.default({ref:d,object:y},l))}));exports.TrackballControls=u;
|
|
@@ -24,11 +24,15 @@ const TrackballControls = /*#__PURE__*/React.forwardRef(({
|
|
|
24
24
|
viewport
|
|
25
25
|
} = useThree();
|
|
26
26
|
const explCamera = camera || defaultCamera;
|
|
27
|
-
const explDomElement = domElement ||
|
|
27
|
+
const explDomElement = domElement || events.connected || gl.domElement;
|
|
28
28
|
const controls = React.useMemo(() => new TrackballControls$1(explCamera), [explCamera]);
|
|
29
29
|
useFrame(() => {
|
|
30
30
|
if (controls.enabled) controls.update();
|
|
31
31
|
});
|
|
32
|
+
React.useEffect(() => {
|
|
33
|
+
controls.connect(explDomElement);
|
|
34
|
+
return () => void controls.dispose();
|
|
35
|
+
}, [explDomElement, regress, controls, invalidate]);
|
|
32
36
|
React.useEffect(() => {
|
|
33
37
|
const callback = e => {
|
|
34
38
|
invalidate();
|
|
@@ -36,17 +40,15 @@ const TrackballControls = /*#__PURE__*/React.forwardRef(({
|
|
|
36
40
|
if (onChange) onChange(e);
|
|
37
41
|
};
|
|
38
42
|
|
|
39
|
-
controls.connect(explDomElement);
|
|
40
43
|
controls.addEventListener('change', callback);
|
|
41
44
|
if (onStart) controls.addEventListener('start', onStart);
|
|
42
45
|
if (onEnd) controls.addEventListener('end', onEnd);
|
|
43
46
|
return () => {
|
|
44
|
-
controls.removeEventListener('change', callback);
|
|
45
47
|
if (onStart) controls.removeEventListener('start', onStart);
|
|
46
48
|
if (onEnd) controls.removeEventListener('end', onEnd);
|
|
47
|
-
controls.
|
|
49
|
+
controls.removeEventListener('change', callback);
|
|
48
50
|
};
|
|
49
|
-
}, [
|
|
51
|
+
}, [onChange, onStart, onEnd]);
|
|
50
52
|
React.useEffect(() => {
|
|
51
53
|
controls.handleResize();
|
|
52
54
|
}, [viewport]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@react-three/fiber"),t=require("react"),r=require("three"),n=require("meshline");function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var i=o(t);const s={width:.2,length:1,decay:1,local:!1,stride:0,interval:1},u=(e,t=1)=>(e.set(e.subarray(t)),e.fill(-1/0,-t),e);function c(t,n){const{length:o,local:c,decay:l,interval:a,stride:f}={...s,...n},d=i.useRef(),[h]=i.useState((()=>new r.Vector3));i.useLayoutEffect((()=>{t&&(d.current=Float32Array.from({length:10*o*3},((e,r)=>t.position.getComponent(r%3))))}),[o,t]);const p=i.useRef(new r.Vector3),y=i.useRef(0);return e.useFrame((()=>{if(t&&d.current){if(0===y.current){let e;c?e=t.position:(t.getWorldPosition(h),e=h);const r=1*l;for(let t=0;t<r;t++)e.distanceTo(p.current)<f||(u(d.current,3),d.current.set(e.toArray(),d.current.length-3));p.current.copy(e)}y.current++,y.current=y.current%a}})),d}const l=i.forwardRef(((t,o)=>{const{children:u}=t,{width:l,length:a,decay:f,local:d,stride:h,interval:p}={...s,...t},{color:y="hotpink",attenuation:g,target:m}=t,v=e.useThree((e=>e.size)),b=i.useRef(null),[w,M]=i.useState(null),j=c(w,{length:a,decay:f,local:d,stride:h,interval:p});i.useEffect((()=>{const e=(null==m?void 0:m.current)||b.current.children.find((e=>e instanceof r.Object3D));e&&M(e)}),[j,m]);const O=i.useMemo((()=>new n.MeshLine),[]),E=i.useMemo((()=>{var e;const t=new n.MeshLineMaterial({lineWidth:.1*l,color:y,sizeAttenuation:1,resolution:new r.Vector2(v.width,v.height)});let o;if(u)if(Array.isArray(u))o=u.find((e=>{const t=e;return"string"==typeof t.type&&"meshLineMaterial"===t.type}));else{const e=u;"string"==typeof e.type&&"meshLineMaterial"===e.type&&(o=e)}return"object"==typeof(null==(e=o)?void 0:e.props)&&t.setValues(o.props),t}),[l,y,v,u]);return i.useEffect((()=>{E.uniforms.resolution.value.set(v.width,v.height)}),[v]),e.useFrame((()=>{j.current&&O.setPoints(j.current,g)})),i.createElement("group",null,i.createElement("mesh",{ref:o,geometry:O,material:E}),i.createElement("group",{ref:b},u))}));exports.Trail=l,exports.useTrail=c;
|
package/core/Trail.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ColorRepresentation, Object3D } from 'three';
|
|
3
|
+
import { MeshLine as MeshLineImpl } from 'meshline';
|
|
4
|
+
declare type Settings = {
|
|
5
|
+
width: number;
|
|
6
|
+
length: number;
|
|
7
|
+
decay: number;
|
|
8
|
+
local: boolean;
|
|
9
|
+
stride: number;
|
|
10
|
+
interval: number;
|
|
11
|
+
};
|
|
12
|
+
export declare function useTrail(target: Object3D, settings: Partial<Settings>): React.MutableRefObject<Float32Array | undefined>;
|
|
13
|
+
export declare type MeshLine = THREE.Mesh & MeshLineImpl;
|
|
14
|
+
export declare const Trail: React.ForwardRefExoticComponent<{
|
|
15
|
+
color?: ColorRepresentation | undefined;
|
|
16
|
+
attenuation?: ((width: number) => number) | undefined;
|
|
17
|
+
target?: React.MutableRefObject<Object3D<import("three").Event>> | undefined;
|
|
18
|
+
} & Partial<Settings> & {
|
|
19
|
+
children?: React.ReactNode;
|
|
20
|
+
} & React.RefAttributes<MeshLine>>;
|
|
21
|
+
export {};
|
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"),
|
|
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" | "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>>>;
|
|
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" | "update" | "axis" | "connect" | "setSize" | "domElement" | "isTransformControls" | "detach" | "getMode" | "setMode" | "setTranslationSnap" | "setRotationSnap" | "setScaleSnap" | "setSpace" | "onObjectChange" | "mode" | "translationSnap" | "rotationSnap" | "scaleSnap" | "showX" | "showY" | "showZ"> & React.RefAttributes<TransformControlsImpl<THREE.Camera>>>;
|
|
@@ -25,20 +25,22 @@ 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
|
-
if (object)
|
|
37
|
+
if (object) {
|
|
38
|
+
controls.attach(object instanceof THREE.Object3D ? object : object.current);
|
|
39
|
+
} else if (group.current instanceof THREE.Object3D) {
|
|
40
|
+
controls.attach(group.current);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return () => void controls.detach();
|
|
42
44
|
}, [object, children, controls]);
|
|
43
45
|
React.useEffect(() => {
|
|
44
46
|
if (defaultControls) {
|