@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/Environment.js
CHANGED
|
@@ -1,11 +1,93 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { useThree, useLoader } from '@react-three/fiber';
|
|
3
|
-
import { FloatType, EquirectangularReflectionMapping, CubeTextureLoader } from 'three';
|
|
2
|
+
import { useThree, useFrame, createPortal, useLoader } from '@react-three/fiber';
|
|
3
|
+
import { Scene, WebGLCubeRenderTarget, HalfFloatType, FloatType, CubeReflectionMapping, EquirectangularReflectionMapping, CubeTextureLoader } from 'three';
|
|
4
4
|
import { RGBELoader } from 'three-stdlib';
|
|
5
5
|
import { presetsObj } from '../helpers/environment-assets.js';
|
|
6
6
|
|
|
7
7
|
const CUBEMAP_ROOT = 'https://market-assets.fra1.cdn.digitaloceanspaces.com/market-assets/hdris/';
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
const isRef = obj => obj.current && obj.current.isScene;
|
|
10
|
+
|
|
11
|
+
const resolveScene = scene => isRef(scene) ? scene.current : scene;
|
|
12
|
+
|
|
13
|
+
function Environment(props) {
|
|
14
|
+
return props.map ? /*#__PURE__*/React.createElement(EnvironmentMap, props) : props.children ? /*#__PURE__*/React.createElement(EnvironmentPortal, props) : /*#__PURE__*/React.createElement(EnvironmentCube, props);
|
|
15
|
+
}
|
|
16
|
+
function EnvironmentMap({
|
|
17
|
+
scene,
|
|
18
|
+
background = false,
|
|
19
|
+
map
|
|
20
|
+
}) {
|
|
21
|
+
const defaultScene = useThree(state => state.scene);
|
|
22
|
+
React.useLayoutEffect(() => {
|
|
23
|
+
if (map) {
|
|
24
|
+
const target = resolveScene(scene || defaultScene);
|
|
25
|
+
const oldbg = target.background;
|
|
26
|
+
const oldenv = target.environment;
|
|
27
|
+
if (background !== 'only') target.environment = map;
|
|
28
|
+
if (background) target.background = map;
|
|
29
|
+
return () => {
|
|
30
|
+
if (background !== 'only') target.environment = oldenv;
|
|
31
|
+
if (background) target.background = oldbg;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}, [scene, map]);
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
function EnvironmentPortal({
|
|
38
|
+
children,
|
|
39
|
+
near = 1,
|
|
40
|
+
far = 1000,
|
|
41
|
+
resolution = 256,
|
|
42
|
+
frames = 1,
|
|
43
|
+
background = false,
|
|
44
|
+
scene,
|
|
45
|
+
files,
|
|
46
|
+
path,
|
|
47
|
+
preset = undefined,
|
|
48
|
+
extensions
|
|
49
|
+
}) {
|
|
50
|
+
const gl = useThree(state => state.gl);
|
|
51
|
+
const defaultScene = useThree(state => state.scene);
|
|
52
|
+
const camera = React.useRef(null);
|
|
53
|
+
const [virtualScene] = React.useState(() => new Scene());
|
|
54
|
+
const fbo = React.useMemo(() => {
|
|
55
|
+
const fbo = new WebGLCubeRenderTarget(resolution);
|
|
56
|
+
fbo.texture.type = HalfFloatType;
|
|
57
|
+
return fbo;
|
|
58
|
+
}, [resolution]);
|
|
59
|
+
React.useLayoutEffect(() => {
|
|
60
|
+
if (frames === 1) camera.current.update(gl, virtualScene);
|
|
61
|
+
const target = resolveScene(scene || defaultScene);
|
|
62
|
+
const oldbg = target.background;
|
|
63
|
+
const oldenv = target.environment;
|
|
64
|
+
if (background !== 'only') target.environment = fbo.texture;
|
|
65
|
+
if (background) target.background = fbo.texture;
|
|
66
|
+
return () => {
|
|
67
|
+
if (background !== 'only') target.environment = oldenv;
|
|
68
|
+
if (background) target.background = oldbg;
|
|
69
|
+
};
|
|
70
|
+
}, [children, scene]);
|
|
71
|
+
let count = 1;
|
|
72
|
+
useFrame(() => {
|
|
73
|
+
if (frames === Infinity || count < frames) {
|
|
74
|
+
camera.current.update(gl, virtualScene);
|
|
75
|
+
count++;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal( /*#__PURE__*/React.createElement(React.Fragment, null, children, /*#__PURE__*/React.createElement("cubeCamera", {
|
|
79
|
+
ref: camera,
|
|
80
|
+
args: [near, far, fbo]
|
|
81
|
+
}), (files || preset) && /*#__PURE__*/React.createElement(EnvironmentMap, {
|
|
82
|
+
background: true,
|
|
83
|
+
files: files,
|
|
84
|
+
preset: preset,
|
|
85
|
+
path: path,
|
|
86
|
+
extensions: extensions,
|
|
87
|
+
scene: virtualScene
|
|
88
|
+
})), virtualScene));
|
|
89
|
+
}
|
|
90
|
+
function EnvironmentCube({
|
|
9
91
|
background = false,
|
|
10
92
|
files = ['/px.png', '/nx.png', '/py.png', '/ny.png', '/pz.png', '/nz.png'],
|
|
11
93
|
path = '',
|
|
@@ -14,17 +96,12 @@ function Environment({
|
|
|
14
96
|
extensions
|
|
15
97
|
}) {
|
|
16
98
|
if (preset) {
|
|
17
|
-
if (!(preset in presetsObj))
|
|
18
|
-
throw new Error('Preset must be one of: ' + Object.keys(presetsObj).join(', '));
|
|
19
|
-
}
|
|
20
|
-
|
|
99
|
+
if (!(preset in presetsObj)) throw new Error('Preset must be one of: ' + Object.keys(presetsObj).join(', '));
|
|
21
100
|
files = presetsObj[preset];
|
|
22
101
|
path = CUBEMAP_ROOT;
|
|
23
102
|
}
|
|
24
103
|
|
|
25
|
-
const defaultScene = useThree(
|
|
26
|
-
scene
|
|
27
|
-
}) => scene);
|
|
104
|
+
const defaultScene = useThree(state => state.scene);
|
|
28
105
|
const isCubeMap = Array.isArray(files);
|
|
29
106
|
const loader = isCubeMap ? CubeTextureLoader : RGBELoader; // @ts-expect-error
|
|
30
107
|
|
|
@@ -35,33 +112,19 @@ function Environment({
|
|
|
35
112
|
if (extensions) extensions(loader);
|
|
36
113
|
});
|
|
37
114
|
const texture = isCubeMap ? loaderResult[0] : loaderResult;
|
|
38
|
-
texture.mapping = EquirectangularReflectionMapping;
|
|
115
|
+
texture.mapping = isCubeMap ? CubeReflectionMapping : EquirectangularReflectionMapping;
|
|
39
116
|
React.useLayoutEffect(() => {
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
if (
|
|
44
|
-
|
|
45
|
-
if (background) scene.background = texture;
|
|
46
|
-
} else {
|
|
47
|
-
defaultScene.environment = texture;
|
|
48
|
-
if (background) defaultScene.background = texture;
|
|
49
|
-
}
|
|
50
|
-
|
|
117
|
+
const target = resolveScene(scene || defaultScene);
|
|
118
|
+
const oldbg = target.background;
|
|
119
|
+
const oldenv = target.environment;
|
|
120
|
+
if (background !== 'only') target.environment = texture;
|
|
121
|
+
if (background) target.background = texture;
|
|
51
122
|
return () => {
|
|
52
|
-
if (
|
|
53
|
-
|
|
54
|
-
scene.background = oldbg;
|
|
55
|
-
} else {
|
|
56
|
-
defaultScene.environment = oldenv;
|
|
57
|
-
defaultScene.background = oldbg;
|
|
58
|
-
} // Environment textures are volatile, better dispose and uncache them
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
texture.dispose();
|
|
123
|
+
if (background !== 'only') target.environment = oldenv;
|
|
124
|
+
if (background) target.background = oldbg;
|
|
62
125
|
};
|
|
63
126
|
}, [texture, background, scene]);
|
|
64
127
|
return null;
|
|
65
128
|
}
|
|
66
129
|
|
|
67
|
-
export { Environment };
|
|
130
|
+
export { Environment, EnvironmentCube, EnvironmentMap, EnvironmentPortal };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("@react-three/fiber"),n=require("three-stdlib");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("@react-three/fiber"),n=require("three-stdlib");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var s=u(e),c=o(r);const a=c.forwardRef((({domElement:e,...r},u)=>{const o=t.useThree((e=>e.camera)),a=t.useThree((e=>e.gl)),i=t.useThree((e=>e.events)),l=e||i.connected||a.domElement,[f]=c.useState((()=>new n.FirstPersonControls(o,l)));return t.useFrame(((e,r)=>{f.update(r)})),f?c.createElement("primitive",s.default({ref:u,object:f},r)):null}));exports.FirstPersonControls=a;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { Object3DNode } from '@react-three/fiber';
|
|
3
3
|
import { FirstPersonControls as FirstPersonControlImpl } from 'three-stdlib';
|
|
4
|
-
export declare type FirstPersonControlsProps = Object3DNode<FirstPersonControlImpl, typeof FirstPersonControlImpl
|
|
5
|
-
|
|
4
|
+
export declare type FirstPersonControlsProps = Object3DNode<FirstPersonControlImpl, typeof FirstPersonControlImpl> & {
|
|
5
|
+
domElement?: HTMLElement;
|
|
6
|
+
};
|
|
7
|
+
export declare const FirstPersonControls: React.ForwardRefExoticComponent<Pick<FirstPersonControlsProps, "object" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "lookAt" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "enabled" | "connect" | "update" | "domElement" | "movementSpeed" | "autoForward" | "handleResize" | "lookSpeed" | "lookVertical" | "activeLook" | "heightSpeed" | "heightCoef" | "heightMin" | "heightMax" | "constrainVertical" | "verticalMin" | "verticalMax" | "mouseDragOn"> & React.RefAttributes<FirstPersonControlImpl>>;
|
|
@@ -3,14 +3,15 @@ import * as React from 'react';
|
|
|
3
3
|
import { useThree, useFrame } from '@react-three/fiber';
|
|
4
4
|
import { FirstPersonControls as FirstPersonControls$1 } from 'three-stdlib';
|
|
5
5
|
|
|
6
|
-
const FirstPersonControls = /*#__PURE__*/React.forwardRef((
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
6
|
+
const FirstPersonControls = /*#__PURE__*/React.forwardRef(({
|
|
7
|
+
domElement,
|
|
8
|
+
...props
|
|
9
|
+
}, ref) => {
|
|
10
|
+
const camera = useThree(state => state.camera);
|
|
11
|
+
const gl = useThree(state => state.gl);
|
|
12
|
+
const events = useThree(state => state.events);
|
|
13
|
+
const explDomElement = domElement || events.connected || gl.domElement;
|
|
14
|
+
const [controls] = React.useState(() => new FirstPersonControls$1(camera, explDomElement));
|
|
14
15
|
useFrame((_, delta) => {
|
|
15
16
|
controls.update(delta);
|
|
16
17
|
});
|
package/core/Float.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@react-three/fiber");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@react-three/fiber"),r=require("react-merge-refs");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}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 u=o(e),a=n(r);const c=u.forwardRef((({children:e,speed:r=1,rotationIntensity:n=1,floatIntensity:o=1,...c},i)=>{const f=u.useRef(null),s=u.useRef(1e4*Math.random());return t.useFrame((e=>{const t=s.current+e.clock.getElapsedTime();f.current.rotation.x=Math.cos(t/4*r)/8*n,f.current.rotation.y=Math.sin(t/4*r)/8*n,f.current.rotation.z=Math.sin(t/4*r)/20*n,f.current.position.y=Math.sin(t/4*r)/10*o})),u.createElement("group",c,u.createElement("group",{ref:a.default([f,i])},e))}));exports.Float=c;
|
package/core/Float.d.ts
CHANGED
|
@@ -5,4 +5,4 @@ export declare type FloatProps = JSX.IntrinsicElements['group'] & {
|
|
|
5
5
|
floatIntensity?: number;
|
|
6
6
|
children?: React.ReactNode;
|
|
7
7
|
};
|
|
8
|
-
export declare
|
|
8
|
+
export declare const Float: React.ForwardRefExoticComponent<Pick<FloatProps, "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" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "speed" | "rotationIntensity" | "floatIntensity"> & React.RefAttributes<import("three").Group>>;
|
package/core/Float.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { useFrame } from '@react-three/fiber';
|
|
3
|
+
import mergeRefs from 'react-merge-refs';
|
|
3
4
|
|
|
4
|
-
|
|
5
|
+
const Float = /*#__PURE__*/React.forwardRef(({
|
|
5
6
|
children,
|
|
6
7
|
speed = 1,
|
|
7
8
|
rotationIntensity = 1,
|
|
8
9
|
floatIntensity = 1,
|
|
9
10
|
...props
|
|
10
|
-
}) {
|
|
11
|
+
}, forwardRef) => {
|
|
11
12
|
const ref = React.useRef(null);
|
|
12
13
|
const offset = React.useRef(Math.random() * 10000);
|
|
13
14
|
useFrame(state => {
|
|
@@ -18,8 +19,8 @@ function Float({
|
|
|
18
19
|
ref.current.position.y = Math.sin(t / 4 * speed) / 10 * floatIntensity;
|
|
19
20
|
});
|
|
20
21
|
return /*#__PURE__*/React.createElement("group", props, /*#__PURE__*/React.createElement("group", {
|
|
21
|
-
ref: ref
|
|
22
|
+
ref: mergeRefs([ref, forwardRef])
|
|
22
23
|
}, children));
|
|
23
|
-
}
|
|
24
|
+
});
|
|
24
25
|
|
|
25
26
|
export { Float };
|
package/core/FlyControls.cjs.js
CHANGED
|
@@ -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 u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function l(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 o=u(e),i=l(r);const a=i.forwardRef(((e,
|
|
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 u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function l(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 o=u(e),i=l(r);const a=i.forwardRef((({domElement:e,...r},u)=>{const{onChange:l,...a}=r,s=t.useThree((e=>e.invalidate)),c=t.useThree((e=>e.camera)),d=t.useThree((e=>e.gl)),f=t.useThree((e=>e.events)),v=e||f.connected||d.domElement,[b]=i.useState((()=>new n.FlyControls(c,v)));return i.useEffect((()=>{const e=e=>{s(),l&&l(e)};return null==b||null==b.addEventListener||b.addEventListener("change",e),()=>null==b||null==b.removeEventListener?void 0:b.removeEventListener("change",e)}),[l,b,s]),t.useFrame(((e,t)=>null==b?void 0:b.update(t))),b?i.createElement("primitive",o.default({ref:u,dispose:void 0,object:b},a)):null}));exports.FlyControls=a;
|
package/core/FlyControls.d.ts
CHANGED
|
@@ -4,5 +4,6 @@ import * as THREE from 'three';
|
|
|
4
4
|
import { FlyControls as FlyControlsImpl } from 'three-stdlib';
|
|
5
5
|
export declare type FlyControlsProps = ReactThreeFiber.Object3DNode<FlyControlsImpl, typeof FlyControlsImpl> & {
|
|
6
6
|
onChange?: (e?: THREE.Event) => void;
|
|
7
|
+
domElement?: HTMLElement;
|
|
7
8
|
};
|
|
8
9
|
export declare const FlyControls: React.ForwardRefExoticComponent<Pick<FlyControlsProps, "object" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "update" | "domElement" | "movementSpeed" | "rollSpeed" | "dragToLook" | "autoForward"> & React.RefAttributes<FlyControlsImpl>>;
|
package/core/FlyControls.js
CHANGED
|
@@ -3,21 +3,20 @@ import { useThree, useFrame } from '@react-three/fiber';
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { FlyControls as FlyControls$1 } from 'three-stdlib';
|
|
5
5
|
|
|
6
|
-
const FlyControls = /*#__PURE__*/React.forwardRef((
|
|
6
|
+
const FlyControls = /*#__PURE__*/React.forwardRef(({
|
|
7
|
+
domElement,
|
|
8
|
+
...props
|
|
9
|
+
}, ref) => {
|
|
7
10
|
const {
|
|
8
11
|
onChange,
|
|
9
12
|
...rest
|
|
10
13
|
} = props;
|
|
11
|
-
const invalidate = useThree(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const gl = useThree(({
|
|
18
|
-
gl
|
|
19
|
-
}) => gl);
|
|
20
|
-
const [controls] = React.useState(() => new FlyControls$1(camera, gl.domElement));
|
|
14
|
+
const invalidate = useThree(state => state.invalidate);
|
|
15
|
+
const camera = useThree(state => state.camera);
|
|
16
|
+
const gl = useThree(state => state.gl);
|
|
17
|
+
const events = useThree(state => state.events);
|
|
18
|
+
const explDomElement = domElement || events.connected || gl.domElement;
|
|
19
|
+
const [controls] = React.useState(() => new FlyControls$1(camera, explDomElement));
|
|
21
20
|
React.useEffect(() => {
|
|
22
21
|
const callback = e => {
|
|
23
22
|
invalidate();
|
package/core/GizmoHelper.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("@react-three/fiber"),t=require("three"),n=require("./OrthographicCamera.cjs.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("@react-three/fiber"),t=require("three"),n=require("./OrthographicCamera.cjs.js"),a=require("./useCamera.cjs.js");function u(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}require("@babel/runtime/helpers/extends"),require("react-merge-refs");var o=u(e);const c=o.createContext({}),i=2*Math.PI,s=new t.Object3D,l=new t.Matrix4,[p,d]=[new t.Quaternion,new t.Quaternion],f=new t.Vector3,h=new t.Vector3;exports.GizmoHelper=({alignment:e="bottom-right",margin:u=[80,80],renderPriority:m=0,autoClear:g=!0,onUpdate:b,onTarget:y,children:w})=>{const v=r.useThree((({size:e})=>e)),j=r.useThree((({camera:e})=>e)),q=r.useThree((({controls:e})=>e)),C=r.useThree((({gl:e})=>e)),x=r.useThree((({scene:e})=>e)),O=r.useThree((({invalidate:e})=>e)),T=o.useRef(),k=o.useRef(),P=o.useRef(null),[R]=o.useState((()=>new t.Scene)),M=o.useRef(!1),z=o.useRef(0),E=o.useRef(new t.Vector3(0,0,0)),Q=o.useCallback((e=>{M.current=!0,(q||y)&&(E.current=(null==q?void 0:q.target)||(null==y?void 0:y())),z.current=j.position.distanceTo(f),p.copy(j.quaternion),h.copy(e).multiplyScalar(z.current).add(f),s.lookAt(h),d.copy(s.quaternion),O()}),[q,j,y,O]);o.useEffect((()=>(x.background&&(T.current=x.background,x.background=null,R.background=T.current),()=>{T.current&&(x.background=T.current)})),[]),r.useFrame(((e,r)=>{if(P.current&&k.current){var t;if(M.current)if(p.angleTo(d)<.01)M.current=!1;else{const e=r*i;p.rotateTowards(d,e),j.position.set(0,0,1).applyQuaternion(p).multiplyScalar(z.current).add(E.current),j.up.set(0,1,0).applyQuaternion(p).normalize(),j.quaternion.copy(p),b?b():q&&q.update(),O()}l.copy(j.matrix).invert(),null==(t=k.current)||t.quaternion.setFromRotationMatrix(l),g&&(C.autoClear=!1),C.clearDepth(),C.render(R,P.current)}}),m);const S=a.useCamera(P),_=o.useMemo((()=>({tweenCamera:Q,raycast:S})),[Q]),[D,V]=u,F=e.endsWith("-left")?-v.width/2+D:v.width/2-D,G=e.startsWith("top-")?v.height/2-V:-v.height/2+V;return r.createPortal(o.createElement(c.Provider,{value:_},o.createElement(n.OrthographicCamera,{ref:P,position:[0,0,200]}),o.createElement("group",{ref:k,position:[F,G,0]},w)),R)},exports.useGizmoContext=()=>o.useContext(c);
|
package/core/GizmoHelper.d.ts
CHANGED
|
@@ -8,8 +8,9 @@ export declare type GizmoHelperProps = JSX.IntrinsicElements['group'] & {
|
|
|
8
8
|
alignment?: 'top-left' | 'top-right' | 'bottom-right' | 'bottom-left';
|
|
9
9
|
margin?: [number, number];
|
|
10
10
|
renderPriority?: number;
|
|
11
|
+
autoClear?: boolean;
|
|
11
12
|
onUpdate?: () => void;
|
|
12
13
|
onTarget?: () => Vector3;
|
|
13
14
|
};
|
|
14
|
-
export declare const GizmoHelper: ({ alignment, margin, renderPriority, onUpdate, onTarget, children: GizmoHelperComponent, }: GizmoHelperProps) => any;
|
|
15
|
+
export declare const GizmoHelper: ({ alignment, margin, renderPriority, autoClear, onUpdate, onTarget, children: GizmoHelperComponent, }: GizmoHelperProps) => any;
|
|
15
16
|
export {};
|
package/core/GizmoHelper.js
CHANGED
|
@@ -19,6 +19,7 @@ const GizmoHelper = ({
|
|
|
19
19
|
alignment = 'bottom-right',
|
|
20
20
|
margin = [80, 80],
|
|
21
21
|
renderPriority = 0,
|
|
22
|
+
autoClear = true,
|
|
22
23
|
onUpdate,
|
|
23
24
|
onTarget,
|
|
24
25
|
children: GizmoHelperComponent
|
|
@@ -49,8 +50,7 @@ const GizmoHelper = ({
|
|
|
49
50
|
const animating = React.useRef(false);
|
|
50
51
|
const radius = React.useRef(0);
|
|
51
52
|
const focusPoint = React.useRef(new Vector3(0, 0, 0));
|
|
52
|
-
|
|
53
|
-
const tweenCamera = direction => {
|
|
53
|
+
const tweenCamera = React.useCallback(direction => {
|
|
54
54
|
animating.current = true;
|
|
55
55
|
if (defaultControls || onTarget) focusPoint.current = (defaultControls == null ? void 0 : defaultControls.target) || (onTarget == null ? void 0 : onTarget());
|
|
56
56
|
radius.current = mainCamera.position.distanceTo(target); // Rotate from current camera orientation
|
|
@@ -61,27 +61,7 @@ const GizmoHelper = ({
|
|
|
61
61
|
dummy.lookAt(targetPosition);
|
|
62
62
|
q2.copy(dummy.quaternion);
|
|
63
63
|
invalidate();
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
const animateStep = delta => {
|
|
67
|
-
if (!animating.current) return;
|
|
68
|
-
|
|
69
|
-
if (q1.angleTo(q2) < 0.01) {
|
|
70
|
-
animating.current = false;
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
const step = delta * turnRate; // animate position by doing a slerp and then scaling the position on the unit sphere
|
|
75
|
-
|
|
76
|
-
q1.rotateTowards(q2, step); // animate orientation
|
|
77
|
-
|
|
78
|
-
mainCamera.position.set(0, 0, 1).applyQuaternion(q1).multiplyScalar(radius.current).add(focusPoint.current);
|
|
79
|
-
mainCamera.up.set(0, 1, 0).applyQuaternion(q1).normalize();
|
|
80
|
-
mainCamera.quaternion.copy(q1);
|
|
81
|
-
if (onUpdate) onUpdate();else if (defaultControls) defaultControls.update();
|
|
82
|
-
invalidate();
|
|
83
|
-
};
|
|
84
|
-
|
|
64
|
+
}, [defaultControls, mainCamera, onTarget, invalidate]);
|
|
85
65
|
React.useEffect(() => {
|
|
86
66
|
if (scene.background) {
|
|
87
67
|
//Interchange the actual scene background with the virtual scene
|
|
@@ -92,33 +72,44 @@ const GizmoHelper = ({
|
|
|
92
72
|
|
|
93
73
|
return () => {
|
|
94
74
|
// reset on unmount
|
|
95
|
-
if (backgroundRef.current)
|
|
96
|
-
scene.background = backgroundRef.current;
|
|
97
|
-
}
|
|
75
|
+
if (backgroundRef.current) scene.background = backgroundRef.current;
|
|
98
76
|
};
|
|
99
77
|
}, []);
|
|
78
|
+
useFrame((_, delta) => {
|
|
79
|
+
if (virtualCam.current && gizmoRef.current) {
|
|
80
|
+
var _gizmoRef$current;
|
|
100
81
|
|
|
101
|
-
|
|
102
|
-
|
|
82
|
+
// Animate step
|
|
83
|
+
if (animating.current) {
|
|
84
|
+
if (q1.angleTo(q2) < 0.01) {
|
|
85
|
+
animating.current = false;
|
|
86
|
+
} else {
|
|
87
|
+
const step = delta * turnRate; // animate position by doing a slerp and then scaling the position on the unit sphere
|
|
103
88
|
|
|
104
|
-
|
|
105
|
-
matrix.copy(mainCamera.matrix).invert();
|
|
106
|
-
(_gizmoRef$current = gizmoRef.current) == null ? void 0 : _gizmoRef$current.quaternion.setFromRotationMatrix(matrix);
|
|
107
|
-
};
|
|
89
|
+
q1.rotateTowards(q2, step); // animate orientation
|
|
108
90
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
91
|
+
mainCamera.position.set(0, 0, 1).applyQuaternion(q1).multiplyScalar(radius.current).add(focusPoint.current);
|
|
92
|
+
mainCamera.up.set(0, 1, 0).applyQuaternion(q1).normalize();
|
|
93
|
+
mainCamera.quaternion.copy(q1);
|
|
94
|
+
if (onUpdate) onUpdate();else if (defaultControls) defaultControls.update();
|
|
95
|
+
invalidate();
|
|
96
|
+
}
|
|
97
|
+
} // Sync Gizmo with main camera orientation
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
matrix.copy(mainCamera.matrix).invert();
|
|
101
|
+
(_gizmoRef$current = gizmoRef.current) == null ? void 0 : _gizmoRef$current.quaternion.setFromRotationMatrix(matrix); // Render virtual camera
|
|
102
|
+
|
|
103
|
+
if (autoClear) gl.autoClear = false;
|
|
114
104
|
gl.clearDepth();
|
|
115
105
|
gl.render(virtualScene, virtualCam.current);
|
|
116
106
|
}
|
|
117
107
|
}, renderPriority);
|
|
118
|
-
const
|
|
108
|
+
const raycast = useCamera(virtualCam);
|
|
109
|
+
const gizmoHelperContext = React.useMemo(() => ({
|
|
119
110
|
tweenCamera,
|
|
120
|
-
raycast
|
|
121
|
-
}; // Position gizmo component within scene
|
|
111
|
+
raycast
|
|
112
|
+
}), [tweenCamera]); // Position gizmo component within scene
|
|
122
113
|
|
|
123
114
|
const [marginX, marginY] = margin;
|
|
124
115
|
const x = alignment.endsWith('-left') ? -size.width / 2 + marginX : size.width / 2 - marginX;
|
|
@@ -127,7 +118,6 @@ const GizmoHelper = ({
|
|
|
127
118
|
value: gizmoHelperContext
|
|
128
119
|
}, /*#__PURE__*/React.createElement(OrthographicCamera, {
|
|
129
120
|
ref: virtualCam,
|
|
130
|
-
makeDefault: false,
|
|
131
121
|
position: [0, 0, 200]
|
|
132
122
|
}), /*#__PURE__*/React.createElement("group", {
|
|
133
123
|
ref: gizmoRef,
|
package/core/Image.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),n=require("three"),t=require("@react-three/fiber"),a=require("./shaderMaterial.cjs.js"),o=require("./useTexture.cjs.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}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 t=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,t.get?t:{enumerable:!0,get:function(){return e[n]}})}})),r.default=e,Object.freeze(r)}var s=c(e),l=i(r),u=i(n);const v=a.shaderMaterial({color:new u.Color("white"),scale:[1,1],imageBounds:[1,1],map:null,zoom:1,grayscale:0},"\n varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vUv = uv;\n }\n","\n // mostly from https://gist.github.com/statico/df64c5d167362ecf7b34fca0b1459a44\n varying vec2 vUv;\n uniform vec2 scale;\n uniform vec2 imageBounds;\n uniform vec3 color;\n uniform sampler2D map;\n uniform float zoom;\n uniform float grayscale;\n const vec3 luma = vec3(.299, 0.587, 0.114);\n vec4 toGrayscale(vec4 color, float intensity) {\n return vec4(mix(color.rgb, vec3(dot(color.rgb, luma)), intensity), color.a);\n }\n vec2 aspect(vec2 size) {\n return size / min(size.x, size.y);\n }\n void main() {\n vec2 s = aspect(scale);\n vec2 i = aspect(imageBounds);\n float rs = s.x / s.y;\n float ri = i.x / i.y;\n vec2 new = rs < ri ? vec2(i.x * s.y / i.y, s.y) : vec2(s.x, i.y * s.x / i.x);\n vec2 offset = (rs < ri ? vec2((new.x - s.x) / 2.0, 0.0) : vec2(0.0, (new.y - s.y) / 2.0)) / new;\n vec2 uv = vUv * s / new + offset;\n vec2 zUv = (uv - vec2(0.5, 0.5)) / zoom + vec2(0.5, 0.5);\n gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, 1.0), grayscale);\n }\n"),m=l.forwardRef((({children:e,color:r,segments:n=1,scale:a=1,zoom:c=1,grayscale:i=0,url:u,...
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),n=require("three"),t=require("@react-three/fiber"),a=require("./shaderMaterial.cjs.js"),o=require("./useTexture.cjs.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}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 t=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,t.get?t:{enumerable:!0,get:function(){return e[n]}})}})),r.default=e,Object.freeze(r)}var s=c(e),l=i(r),u=i(n);const v=a.shaderMaterial({color:new u.Color("white"),scale:[1,1],imageBounds:[1,1],map:null,zoom:1,grayscale:0},"\n varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vUv = uv;\n }\n","\n // mostly from https://gist.github.com/statico/df64c5d167362ecf7b34fca0b1459a44\n varying vec2 vUv;\n uniform vec2 scale;\n uniform vec2 imageBounds;\n uniform vec3 color;\n uniform sampler2D map;\n uniform float zoom;\n uniform float grayscale;\n const vec3 luma = vec3(.299, 0.587, 0.114);\n vec4 toGrayscale(vec4 color, float intensity) {\n return vec4(mix(color.rgb, vec3(dot(color.rgb, luma)), intensity), color.a);\n }\n vec2 aspect(vec2 size) {\n return size / min(size.x, size.y);\n }\n void main() {\n vec2 s = aspect(scale);\n vec2 i = aspect(imageBounds);\n float rs = s.x / s.y;\n float ri = i.x / i.y;\n vec2 new = rs < ri ? vec2(i.x * s.y / i.y, s.y) : vec2(s.x, i.y * s.x / i.x);\n vec2 offset = (rs < ri ? vec2((new.x - s.x) / 2.0, 0.0) : vec2(0.0, (new.y - s.y) / 2.0)) / new;\n vec2 uv = vUv * s / new + offset;\n vec2 zUv = (uv - vec2(0.5, 0.5)) / zoom + vec2(0.5, 0.5);\n gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, 1.0), grayscale);\n \n #include <tonemapping_fragment>\n #include <encodings_fragment>\n }\n"),m=l.forwardRef((({children:e,color:r,segments:n=1,scale:a=1,zoom:c=1,grayscale:i=0,url:u,toneMapped:m,...f},g)=>{t.extend({ImageMaterial:v});const d=o.useTexture(u),y=Array.isArray(a)?[a[0],a[1]]:[a,a],p=[d.image.width,d.image.height];return l.createElement("mesh",s.default({ref:g,scale:a},f),l.createElement("planeGeometry",{args:[1,1,n,n]}),l.createElement("imageMaterial",{color:r,map:d,zoom:c,grayscale:i,scale:y,imageBounds:p,toneMapped:m}),e)}));exports.Image=m;
|
package/core/Image.d.ts
CHANGED
|
@@ -3,10 +3,11 @@ import * as THREE from 'three';
|
|
|
3
3
|
import { Color } from '@react-three/fiber';
|
|
4
4
|
export declare type ImageProps = JSX.IntrinsicElements['mesh'] & {
|
|
5
5
|
segments?: number;
|
|
6
|
-
scale?: number;
|
|
6
|
+
scale?: number | [number, number];
|
|
7
7
|
color?: Color;
|
|
8
8
|
zoom?: number;
|
|
9
9
|
grayscale?: number;
|
|
10
|
+
toneMapped?: boolean;
|
|
10
11
|
url: string;
|
|
11
12
|
};
|
|
12
13
|
declare type ImageMaterialType = JSX.IntrinsicElements['shaderMaterial'] & {
|
|
@@ -44,10 +45,11 @@ export declare const Image: React.ForwardRefExoticComponent<Pick<Omit<import("@r
|
|
|
44
45
|
dispose?: (() => void) | null | undefined;
|
|
45
46
|
} & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
|
|
46
47
|
segments?: number | undefined;
|
|
47
|
-
scale?: number | undefined;
|
|
48
|
+
scale?: number | [number, number] | undefined;
|
|
48
49
|
color?: Color | undefined;
|
|
49
50
|
zoom?: number | undefined;
|
|
50
51
|
grayscale?: number | undefined;
|
|
52
|
+
toneMapped?: boolean | undefined;
|
|
51
53
|
url: string;
|
|
52
|
-
}, "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 | "zoom" | "material" | "url" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "segments" | "grayscale"> & React.RefAttributes<THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>>;
|
|
54
|
+
}, "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 | "zoom" | "material" | "url" | "toneMapped" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "segments" | "grayscale"> & React.RefAttributes<THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>>;
|
|
53
55
|
export {};
|
package/core/Image.js
CHANGED
|
@@ -48,6 +48,9 @@ const ImageMaterialImpl = shaderMaterial({
|
|
|
48
48
|
vec2 uv = vUv * s / new + offset;
|
|
49
49
|
vec2 zUv = (uv - vec2(0.5, 0.5)) / zoom + vec2(0.5, 0.5);
|
|
50
50
|
gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, 1.0), grayscale);
|
|
51
|
+
|
|
52
|
+
#include <tonemapping_fragment>
|
|
53
|
+
#include <encodings_fragment>
|
|
51
54
|
}
|
|
52
55
|
`);
|
|
53
56
|
const Image = /*#__PURE__*/React.forwardRef(({
|
|
@@ -58,6 +61,7 @@ const Image = /*#__PURE__*/React.forwardRef(({
|
|
|
58
61
|
zoom = 1,
|
|
59
62
|
grayscale = 0,
|
|
60
63
|
url,
|
|
64
|
+
toneMapped,
|
|
61
65
|
...props
|
|
62
66
|
}, ref) => {
|
|
63
67
|
extend({
|
|
@@ -77,7 +81,8 @@ const Image = /*#__PURE__*/React.forwardRef(({
|
|
|
77
81
|
zoom: zoom,
|
|
78
82
|
grayscale: grayscale,
|
|
79
83
|
scale: planeBounds,
|
|
80
|
-
imageBounds: imageBounds
|
|
84
|
+
imageBounds: imageBounds,
|
|
85
|
+
toneMapped: toneMapped
|
|
81
86
|
}), children);
|
|
82
87
|
});
|
|
83
88
|
|
package/core/Instances.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),a=require("react-merge-refs"),c=require("react-composer"),u=require("../helpers/Position.cjs.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(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),l=i(t),f=i(r),d=o(a),m=o(c);let y
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),a=require("react-merge-refs"),c=require("react-composer"),u=require("../helpers/Position.cjs.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(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),l=i(t),f=i(r),d=o(a),m=o(c);let p,y;const x=f.createContext(null),g=new l.Matrix4,b=new l.Matrix4,h=new l.Matrix4;new l.Color;const M=new l.Vector3,w=new l.Quaternion,E=new l.Vector3,j=f.forwardRef((({context:e,children:t,...r},a)=>{f.useMemo((()=>n.extend({Position:u.Position})),[]);const c=f.useRef(),{subscribe:o,getParent:i}=f.useContext(e||x);return f.useLayoutEffect((()=>o(c)),[]),f.createElement("position",s.default({instance:i(),instanceKey:c,ref:d.default([a,c])},r),t)})),v=f.forwardRef((({children:e,range:t,limit:r=1e3,frames:a=1/0,...c},u)=>{const[{context:o,instance:i}]=f.useState((()=>{const e=f.createContext(null);return{context:e,instance:f.forwardRef(((t,r)=>f.createElement(j,s.default({context:e},t,{ref:r}))))}})),m=f.useRef(null),[v,A]=f.useState([]),[[O,P]]=f.useState((()=>{const e=new Float32Array(16*r);for(p=0;p<r;p++)h.identity().toArray(e,16*p);return[e,new Float32Array([...new Array(3*r)].map((()=>1)))]}));f.useLayoutEffect((()=>{m.current.count=m.current.instanceMatrix.updateRange.count=m.current.instanceColor.updateRange.count=Math.min(r,void 0!==t?t:r,v.length)}),[v,t]),f.useEffect((()=>{m.current.instanceMatrix.needsUpdate=!0}));let q=0;n.useFrame((()=>{if(a===1/0||q<a){for(m.current.updateMatrix(),m.current.updateMatrixWorld(),g.copy(m.current.matrixWorld).invert(),p=0;p<v.length;p++)y=v[p].current,y.matrixWorld.decompose(M,w,E),b.compose(M,w,E).premultiply(g),b.toArray(O,16*p),m.current.instanceMatrix.needsUpdate=!0,y.color.toArray(P,3*p),m.current.instanceColor.needsUpdate=!0;q++}}));const C=f.useMemo((()=>({getParent:()=>m,subscribe:e=>(A((t=>[...t,e])),()=>A((t=>t.filter((t=>t.current!==e.current)))))})),[]);return f.createElement("instancedMesh",s.default({userData:{instances:v},matrixAutoUpdate:!1,ref:d.default([u,m]),args:[null,null,0],raycast:()=>null},c),f.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:O.length/16,array:O,itemSize:16,usage:l.DynamicDrawUsage}),f.createElement("instancedBufferAttribute",{attach:"instanceColor",count:P.length/3,array:P,itemSize:3,usage:l.DynamicDrawUsage}),"function"==typeof e?f.createElement(o.Provider,{value:C},e(i)):f.createElement(x.Provider,{value:C},e))}));exports.Instance=j,exports.Instances=v,exports.Merged=function({meshes:e,children:t,...r}){const n=Array.isArray(e);if(!n)for(const t of Object.keys(e))e[t].isMesh||delete e[t];return f.createElement(m.default,{components:(n?e:Object.values(e)).map((({geometry:e,material:t})=>f.createElement(v,s.default({key:e.uuid,geometry:e,material:t},r))))},(r=>n?t(...r):t(Object.keys(e).filter((t=>e[t].isMesh)).reduce(((e,t,n)=>({...e,[t]:r[n]})),{}))))};
|
package/core/Instances.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ declare const Instance: React.ForwardRefExoticComponent<Pick<Omit<import("@react
|
|
|
35
35
|
} & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
|
|
36
36
|
context?: React.Context<Api> | undefined;
|
|
37
37
|
}, "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" | "color" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "geometry" | "context" | "instance" | "instanceKey"> & React.RefAttributes<unknown>>;
|
|
38
|
-
declare const Instances: React.ForwardRefExoticComponent<Pick<InstancesProps, "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" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "range" | "material" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "instanceMatrix" | "
|
|
38
|
+
declare const Instances: React.ForwardRefExoticComponent<Pick<InstancesProps, "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" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "range" | "material" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "instanceMatrix" | "count" | "frames" | "instanceColor" | "isInstancedMesh" | "getColorAt" | "getMatrixAt" | "setColorAt" | "setMatrixAt" | "limit"> & React.RefAttributes<InstancedMesh>>;
|
|
39
39
|
declare function Merged({ meshes, children, ...props }: {
|
|
40
40
|
[x: string]: any;
|
|
41
41
|
meshes: any;
|
package/core/Instances.js
CHANGED
|
@@ -11,7 +11,7 @@ const globalContext = /*#__PURE__*/React.createContext(null);
|
|
|
11
11
|
const parentMatrix = new THREE.Matrix4();
|
|
12
12
|
const instanceMatrix = new THREE.Matrix4();
|
|
13
13
|
const tempMatrix = new THREE.Matrix4();
|
|
14
|
-
|
|
14
|
+
new THREE.Color();
|
|
15
15
|
const translation = new THREE.Vector3();
|
|
16
16
|
const rotation = new THREE.Quaternion();
|
|
17
17
|
const scale = new THREE.Vector3();
|
|
@@ -85,16 +85,10 @@ const Instances = /*#__PURE__*/React.forwardRef(({
|
|
|
85
85
|
|
|
86
86
|
instanceRef.matrixWorld.decompose(translation, rotation, scale);
|
|
87
87
|
instanceMatrix.compose(translation, rotation, scale).premultiply(parentMatrix);
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if (!instanceRef.color.equals(color.fromArray(colors, i * 3))) {
|
|
95
|
-
instanceRef.color.toArray(colors, i * 3);
|
|
96
|
-
parentRef.current.instanceColor.needsUpdate = true;
|
|
97
|
-
}
|
|
88
|
+
instanceMatrix.toArray(matrices, i * 16);
|
|
89
|
+
parentRef.current.instanceMatrix.needsUpdate = true;
|
|
90
|
+
instanceRef.color.toArray(colors, i * 3);
|
|
91
|
+
parentRef.current.instanceColor.needsUpdate = true;
|
|
98
92
|
}
|
|
99
93
|
|
|
100
94
|
count++;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("@react-three/fiber"),t=require("react"),a=require("three"),l=require("react-merge-refs");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,a.get?a:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var u=n(e),i=c(t),o=c(a),s=n(l);const f=i.forwardRef((({args:e,map:t,toneMapped:a=!1,color:l="white",form:n="rect",intensity:c=1,scale:f=1,target:m,children:p,...d},y)=>{const g=i.useRef(null);return i.useLayoutEffect((()=>{p||d.material||(r.applyProps(g.current.material,{color:l}),g.current.material.color.multiplyScalar(c))}),[l,c,p,d.material]),i.useLayoutEffect((()=>{m&&g.current.lookAt(Array.isArray(m)?new o.Vector3(...m):m)}),[m]),f=Array.isArray(f)&&2===f.length?[f[0],f[1],1]:f,i.createElement("mesh",u.default({ref:s.default([g,y]),scale:f},d),"circle"===n?i.createElement("ringGeometry",{args:[0,1,64]}):"ring"===n?i.createElement("ringGeometry",{args:[.5,1,64]}):"rect"===n?i.createElement("planeGeometry",null):i.createElement(n,{args:e}),p||(d.material?null:i.createElement("meshBasicMaterial",{toneMapped:a,map:t,side:o.DoubleSide})))}));exports.Lightformer=f;
|