@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
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("three-stdlib");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("three"),t=require("@react-three/fiber"),u=require("three-stdlib");function n(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var u=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,u.get?u:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var c=n(e),a=n(r);const l=c.forwardRef((({children:e,curve:r},n)=>{const[l]=c.useState((()=>new a.Scene)),[o,i]=c.useState(),f=c.useRef();return c.useEffect((()=>{f.current=new u.Flow(l.children[0]),i(f.current.object3D)}),[e]),c.useEffect((()=>{var e;r&&(null==(e=f.current)||e.updateCurve(0,r))}),[r]),c.useImperativeHandle(n,(()=>({moveAlongCurve:e=>{var r;null==(r=f.current)||r.moveAlongCurve(e)}}))),c.createElement(c.Fragment,null,t.createPortal(e,l),o&&c.createElement("primitive",{object:o}))}));exports.CurveModifier=l;
|
package/core/CurveModifier.js
CHANGED
|
@@ -1,38 +1,34 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
import { createPortal } from '@react-three/fiber';
|
|
2
4
|
import { Flow } from 'three-stdlib';
|
|
3
5
|
|
|
4
6
|
const CurveModifier = /*#__PURE__*/React.forwardRef(({
|
|
5
7
|
children,
|
|
6
8
|
curve
|
|
7
9
|
}, ref) => {
|
|
8
|
-
const [
|
|
9
|
-
const
|
|
10
|
+
const [scene] = React.useState(() => new THREE.Scene());
|
|
11
|
+
const [obj, set] = React.useState();
|
|
10
12
|
const modifier = React.useRef();
|
|
11
|
-
React.useImperativeHandle(ref, () => ({
|
|
12
|
-
moveAlongCurve: val => {
|
|
13
|
-
var _modifier$current;
|
|
14
|
-
|
|
15
|
-
(_modifier$current = modifier.current) == null ? void 0 : _modifier$current.moveAlongCurve(val);
|
|
16
|
-
}
|
|
17
|
-
}));
|
|
18
13
|
React.useEffect(() => {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
}, [children, ref]);
|
|
14
|
+
modifier.current = new Flow(scene.children[0]);
|
|
15
|
+
set(modifier.current.object3D);
|
|
16
|
+
}, [children]);
|
|
24
17
|
React.useEffect(() => {
|
|
25
|
-
|
|
18
|
+
var _modifier$current;
|
|
19
|
+
|
|
20
|
+
if (curve) (_modifier$current = modifier.current) == null ? void 0 : _modifier$current.updateCurve(0, curve);
|
|
21
|
+
}, [curve]);
|
|
22
|
+
React.useImperativeHandle(ref, () => ({
|
|
23
|
+
moveAlongCurve: val => {
|
|
26
24
|
var _modifier$current2;
|
|
27
25
|
|
|
28
|
-
(_modifier$current2 = modifier.current) == null ? void 0 : _modifier$current2.
|
|
26
|
+
(_modifier$current2 = modifier.current) == null ? void 0 : _modifier$current2.moveAlongCurve(val);
|
|
29
27
|
}
|
|
30
|
-
}
|
|
31
|
-
return
|
|
32
|
-
object:
|
|
33
|
-
})
|
|
34
|
-
ref: original
|
|
35
|
-
});
|
|
28
|
+
}));
|
|
29
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(children, scene), obj && /*#__PURE__*/React.createElement("primitive", {
|
|
30
|
+
object: obj
|
|
31
|
+
}));
|
|
36
32
|
});
|
|
37
33
|
|
|
38
34
|
export { CurveModifier };
|
package/core/Detailed.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { LOD, Object3D } from 'three';
|
|
3
|
-
export declare const Detailed: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").
|
|
3
|
+
export declare const Detailed: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").ExtendedColors<import("@react-three/fiber").Overwrite<Partial<LOD>, import("@react-three/fiber").NodeProps<LOD, typeof LOD>>>, 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;
|
|
@@ -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 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 o=u(e),a=i(r);const l=a.forwardRef(((e,r)=>{const{camera:u,onChange:i,...l}=e,c=t.useThree((
|
|
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 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 o=u(e),a=i(r);const l=a.forwardRef(((e,r)=>{const{camera:u,onChange:i,...l}=e,c=t.useThree((e=>e.camera)),s=t.useThree((e=>e.invalidate)),d=u||c,[f]=a.useState((()=>new n.DeviceOrientationControls(d)));return a.useEffect((()=>{const e=e=>{s(),i&&i(e)};return null==f||null==f.addEventListener||f.addEventListener("change",e),()=>null==f||null==f.removeEventListener?void 0:f.removeEventListener("change",e)}),[i,f,s]),t.useFrame((()=>null==f?void 0:f.update())),a.useEffect((()=>{const e=f;return null==e||e.connect(),()=>null==e?void 0:e.dispose()}),[f]),f?a.createElement("primitive",o.default({ref:r,dispose:void 0,object:f},l)):null}));exports.DeviceOrientationControls=l;
|
|
@@ -9,12 +9,8 @@ const DeviceOrientationControls = /*#__PURE__*/React.forwardRef((props, ref) =>
|
|
|
9
9
|
onChange,
|
|
10
10
|
...rest
|
|
11
11
|
} = props;
|
|
12
|
-
const defaultCamera = useThree(
|
|
13
|
-
|
|
14
|
-
}) => camera);
|
|
15
|
-
const invalidate = useThree(({
|
|
16
|
-
invalidate
|
|
17
|
-
}) => invalidate);
|
|
12
|
+
const defaultCamera = useThree(state => state.camera);
|
|
13
|
+
const invalidate = useThree(state => state.invalidate);
|
|
18
14
|
const explCamera = camera || defaultCamera;
|
|
19
15
|
const [controls] = React.useState(() => new DeviceOrientationControls$1(explCamera));
|
|
20
16
|
React.useEffect(() => {
|
package/core/Effects.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("three"),a=require("@react-three/fiber"),s=require("three-stdlib"),n=require("react-merge-refs");function u(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 i=u(e),o=c(r),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("three"),a=require("@react-three/fiber"),s=require("three-stdlib"),n=require("react-merge-refs");function u(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 i=u(e),o=c(r),d=u(n);a.extend({EffectComposer:s.EffectComposer,RenderPass:s.RenderPass,ShaderPass:s.ShaderPass});const l=()=>{try{var e=document.createElement("canvas");return!(!window.WebGL2RenderingContext||!e.getContext("webgl2"))}catch(e){return!1}},f=o.forwardRef((({children:e,multisamping:r=8,renderIndex:n=1,disableGamma:u=!1,disableRenderPass:c=!1,...f},h)=>{const m=o.useRef(),b=a.useThree((({scene:e})=>e)),g=a.useThree((({camera:e})=>e)),p=a.useThree((({gl:e})=>e)),P=a.useThree((({size:e})=>e)),[v]=o.useState((()=>{if(l()&&r>0){const e=new t.WebGLRenderTarget(P.width,P.height,{format:t.RGBAFormat,encoding:t.sRGBEncoding});return e.samples=8,e}}));return o.useEffect((()=>{var e,r;null==(e=m.current)||e.setSize(P.width,P.height),null==(r=m.current)||r.setPixelRatio(p.getPixelRatio())}),[p,P]),a.useFrame((()=>{var e;return null==(e=m.current)?void 0:e.render()}),n),o.createElement("effectComposer",i.default({ref:d.default([h,m]),args:[p,v]},f),!c&&o.createElement("renderPass",{attach:"passes",args:[b,g]}),!u&&o.createElement("shaderPass",{attach:"passes",args:[s.GammaCorrectionShader]}),e)}));exports.Effects=f,exports.isWebGL2Available=l;
|
package/core/Effects.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { WebGLRenderTarget } from 'three';
|
|
2
3
|
import { ReactThreeFiber } from '@react-three/fiber';
|
|
3
4
|
import { EffectComposer, RenderPass, ShaderPass } from 'three-stdlib';
|
|
4
5
|
declare global {
|
|
@@ -11,9 +12,9 @@ declare global {
|
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
export declare const isWebGL2Available: () => boolean;
|
|
14
|
-
export declare const Effects: React.ForwardRefExoticComponent<Pick<
|
|
15
|
+
export declare const Effects: React.ForwardRefExoticComponent<Pick<ReactThreeFiber.ExtendedColors<ReactThreeFiber.Overwrite<Partial<EffectComposer<WebGLRenderTarget>>, ReactThreeFiber.NodeProps<EffectComposer<WebGLRenderTarget>, typeof EffectComposer>>> & {
|
|
15
16
|
multisamping?: number | undefined;
|
|
16
17
|
renderIndex?: number | undefined;
|
|
17
18
|
disableGamma?: boolean | undefined;
|
|
18
19
|
disableRenderPass?: boolean | undefined;
|
|
19
|
-
}, "attach" | "args" | "children" | "key" | "onUpdate" | keyof EffectComposer<
|
|
20
|
+
}, "attach" | "args" | "children" | "key" | "onUpdate" | keyof EffectComposer<WebGLRenderTarget> | "multisamping" | "renderIndex" | "disableGamma" | "disableRenderPass"> & React.RefAttributes<unknown>>;
|
package/core/Effects.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { WebGLRenderTarget, RGBAFormat, sRGBEncoding } from 'three';
|
|
4
4
|
import { extend, useThree, useFrame } from '@react-three/fiber';
|
|
5
5
|
import { EffectComposer, RenderPass, ShaderPass, GammaCorrectionShader } from 'three-stdlib';
|
|
6
6
|
import mergeRefs from 'react-merge-refs';
|
|
@@ -41,7 +41,7 @@ const Effects = /*#__PURE__*/React.forwardRef(({
|
|
|
41
41
|
}) => size);
|
|
42
42
|
const [target] = React.useState(() => {
|
|
43
43
|
if (isWebGL2Available() && multisamping > 0) {
|
|
44
|
-
const t = new
|
|
44
|
+
const t = new WebGLRenderTarget(size.width, size.height, {
|
|
45
45
|
format: RGBAFormat,
|
|
46
46
|
encoding: sRGBEncoding
|
|
47
47
|
});
|
package/core/Environment.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),n=require("@react-three/fiber"),r=require("three"),t=require("three-stdlib"),u=require("../helpers/environment-assets.cjs.js");function a(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var t=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,t.get?t:{enumerable:!0,get:function(){return e[r]}})}})),n.default=e,Object.freeze(n)}var o=a(e);const s=e=>{return(n=e).current&&n.current.isScene?e.current:e;var n};function c({scene:e,background:r=!1,map:t}){const u=n.useThree((e=>e.scene));return o.useLayoutEffect((()=>{if(t){const n=s(e||u),a=n.background,o=n.environment;return"only"!==r&&(n.environment=t),r&&(n.background=t),()=>{"only"!==r&&(n.environment=o),r&&(n.background=a)}}}),[e,t]),null}function i({children:e,near:t=1,far:u=1e3,resolution:a=256,frames:i=1,background:l=!1,scene:p,files:f,path:m,preset:b,extensions:g}){const d=n.useThree((e=>e.gl)),y=n.useThree((e=>e.scene)),v=o.useRef(null),[h]=o.useState((()=>new r.Scene)),E=o.useMemo((()=>{const e=new r.WebGLCubeRenderTarget(a);return e.texture.type=r.HalfFloatType,e}),[a]);o.useLayoutEffect((()=>{1===i&&v.current.update(d,h);const e=s(p||y),n=e.background,r=e.environment;return"only"!==l&&(e.environment=E.texture),l&&(e.background=E.texture),()=>{"only"!==l&&(e.environment=r),l&&(e.background=n)}}),[e,p]);let k=1;return n.useFrame((()=>{(i===1/0||k<i)&&(v.current.update(d,h),k++)})),o.createElement(o.Fragment,null,n.createPortal(o.createElement(o.Fragment,null,e,o.createElement("cubeCamera",{ref:v,args:[t,u,E]}),(f||b)&&o.createElement(c,{background:!0,files:f,preset:b,path:m,extensions:g,scene:h})),h))}function l({background:e=!1,files:a=["/px.png","/nx.png","/py.png","/ny.png","/pz.png","/nz.png"],path:c="",preset:i,scene:l,extensions:p}){if(i){if(!(i in u.presetsObj))throw new Error("Preset must be one of: "+Object.keys(u.presetsObj).join(", "));a=u.presetsObj[i],c="https://market-assets.fra1.cdn.digitaloceanspaces.com/market-assets/hdris/"}const f=n.useThree((e=>e.scene)),m=Array.isArray(a),b=m?r.CubeTextureLoader:t.RGBELoader,g=n.useLoader(b,m?[a]:a,(e=>{e.setPath(c),null==e.setDataType||e.setDataType(r.FloatType),p&&p(e)})),d=m?g[0]:g;return d.mapping=m?r.CubeReflectionMapping:r.EquirectangularReflectionMapping,o.useLayoutEffect((()=>{const n=s(l||f),r=n.background,t=n.environment;return"only"!==e&&(n.environment=d),e&&(n.background=d),()=>{"only"!==e&&(n.environment=t),e&&(n.background=r)}}),[d,e,l]),null}exports.Environment=function(e){return e.map?o.createElement(c,e):e.children?o.createElement(i,e):o.createElement(l,e)},exports.EnvironmentCube=l,exports.EnvironmentMap=c,exports.EnvironmentPortal=i;
|
package/core/Environment.d.ts
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
1
2
|
import { Scene, Loader } from 'three';
|
|
2
3
|
import { PresetsType } from '../helpers/environment-assets';
|
|
3
4
|
declare type Props = {
|
|
4
|
-
|
|
5
|
+
children?: React.ReactNode;
|
|
6
|
+
frames?: number;
|
|
7
|
+
near?: number;
|
|
8
|
+
far?: number;
|
|
9
|
+
resolution?: number;
|
|
10
|
+
background?: boolean | 'only';
|
|
11
|
+
map?: THREE.Texture;
|
|
5
12
|
files?: string | string[];
|
|
6
13
|
path?: string;
|
|
7
14
|
preset?: PresetsType;
|
|
8
|
-
scene?: Scene
|
|
15
|
+
scene?: Scene | React.MutableRefObject<THREE.Scene>;
|
|
9
16
|
extensions?: (loader: Loader) => void;
|
|
10
17
|
};
|
|
11
|
-
export declare function Environment(
|
|
18
|
+
export declare function Environment(props: Props): JSX.Element;
|
|
19
|
+
export declare function EnvironmentMap({ scene, background, map }: Props): null;
|
|
20
|
+
export declare function EnvironmentPortal({ children, near, far, resolution, frames, background, scene, files, path, preset, extensions, }: Props): JSX.Element;
|
|
21
|
+
export declare function EnvironmentCube({ background, files, path, preset, scene, extensions, }: Props): null;
|
|
12
22
|
export {};
|
package/core/Environment.js
CHANGED
|
@@ -1,21 +1,93 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { useThree, useLoader } from '@react-three/fiber';
|
|
3
|
-
import {
|
|
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
|
-
import { useAsset } from 'use-asset';
|
|
6
5
|
import { presetsObj } from '../helpers/environment-assets.js';
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
if (isCubeMap) {
|
|
10
|
-
gen.compileEquirectangularShader();
|
|
11
|
-
return gen.fromCubemap(texture).texture;
|
|
12
|
-
}
|
|
7
|
+
const CUBEMAP_ROOT = 'https://market-assets.fra1.cdn.digitaloceanspaces.com/market-assets/hdris/';
|
|
13
8
|
|
|
14
|
-
|
|
15
|
-
}
|
|
9
|
+
const isRef = obj => obj.current && obj.current.isScene;
|
|
16
10
|
|
|
17
|
-
const
|
|
18
|
-
|
|
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({
|
|
19
91
|
background = false,
|
|
20
92
|
files = ['/px.png', '/nx.png', '/py.png', '/ny.png', '/pz.png', '/nz.png'],
|
|
21
93
|
path = '',
|
|
@@ -24,63 +96,35 @@ function Environment({
|
|
|
24
96
|
extensions
|
|
25
97
|
}) {
|
|
26
98
|
if (preset) {
|
|
27
|
-
if (!(preset in presetsObj))
|
|
28
|
-
throw new Error('Preset must be one of: ' + Object.keys(presetsObj).join(', '));
|
|
29
|
-
}
|
|
30
|
-
|
|
99
|
+
if (!(preset in presetsObj)) throw new Error('Preset must be one of: ' + Object.keys(presetsObj).join(', '));
|
|
31
100
|
files = presetsObj[preset];
|
|
32
|
-
path = CUBEMAP_ROOT
|
|
101
|
+
path = CUBEMAP_ROOT;
|
|
33
102
|
}
|
|
34
103
|
|
|
35
|
-
const defaultScene = useThree(
|
|
36
|
-
scene
|
|
37
|
-
}) => scene);
|
|
38
|
-
const gl = useThree(({
|
|
39
|
-
gl
|
|
40
|
-
}) => gl);
|
|
104
|
+
const defaultScene = useThree(state => state.scene);
|
|
41
105
|
const isCubeMap = Array.isArray(files);
|
|
42
106
|
const loader = isCubeMap ? CubeTextureLoader : RGBELoader; // @ts-expect-error
|
|
43
107
|
|
|
44
108
|
const loaderResult = useLoader(loader, isCubeMap ? [files] : files, loader => {
|
|
45
|
-
loader.setPath(path);
|
|
109
|
+
loader.setPath(path); // @ts-expect-error
|
|
110
|
+
|
|
111
|
+
loader.setDataType == null ? void 0 : loader.setDataType(FloatType);
|
|
46
112
|
if (extensions) extensions(loader);
|
|
47
113
|
});
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const texture = useAsset(() => new Promise(res => {
|
|
52
|
-
const gen = new PMREMGenerator(gl);
|
|
53
|
-
const texture = getTexture(map, gen, isCubeMap);
|
|
54
|
-
gen.dispose();
|
|
55
|
-
res(texture);
|
|
56
|
-
}), map);
|
|
114
|
+
const texture = isCubeMap ? loaderResult[0] : loaderResult;
|
|
115
|
+
texture.mapping = isCubeMap ? CubeReflectionMapping : EquirectangularReflectionMapping;
|
|
57
116
|
React.useLayoutEffect(() => {
|
|
58
|
-
const
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
if (
|
|
62
|
-
|
|
63
|
-
if (background) scene.background = texture;
|
|
64
|
-
} else {
|
|
65
|
-
defaultScene.environment = texture;
|
|
66
|
-
if (background) defaultScene.background = texture;
|
|
67
|
-
}
|
|
68
|
-
|
|
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;
|
|
69
122
|
return () => {
|
|
70
|
-
if (
|
|
71
|
-
|
|
72
|
-
scene.background = oldbg;
|
|
73
|
-
} else {
|
|
74
|
-
defaultScene.environment = oldenv;
|
|
75
|
-
defaultScene.background = oldbg;
|
|
76
|
-
} // Environment textures are volatile, better dispose and uncache them
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
useAsset.clear(map);
|
|
80
|
-
texture.dispose();
|
|
123
|
+
if (background !== 'only') target.environment = oldenv;
|
|
124
|
+
if (background) target.background = oldbg;
|
|
81
125
|
};
|
|
82
126
|
}, [texture, background, scene]);
|
|
83
127
|
return null;
|
|
84
128
|
}
|
|
85
129
|
|
|
86
|
-
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 a=u(e),i=o(r);const s=i.forwardRef(((e,r)=>{const u=t.useThree((
|
|
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 a=u(e),i=o(r);const s=i.forwardRef(((e,r)=>{const u=t.useThree((e=>e.camera)),o=t.useThree((e=>e.gl)),[s]=i.useState((()=>new n.FirstPersonControls(u,o.domElement)));return t.useFrame(((e,r)=>{s.update(r)})),s?i.createElement("primitive",a.default({ref:r,object:s},e)):null}));exports.FirstPersonControls=s;
|
|
@@ -2,4 +2,4 @@ import * as React from 'react';
|
|
|
2
2
|
import { Object3DNode } from '@react-three/fiber';
|
|
3
3
|
import { FirstPersonControls as FirstPersonControlImpl } from 'three-stdlib';
|
|
4
4
|
export declare type FirstPersonControlsProps = Object3DNode<FirstPersonControlImpl, typeof FirstPersonControlImpl>;
|
|
5
|
-
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" | "update" | "domElement" | "movementSpeed" | "autoForward" | "handleResize" | "lookSpeed" | "lookVertical" | "activeLook" | "heightSpeed" | "heightCoef" | "heightMin" | "heightMax" | "constrainVertical" | "verticalMin" | "verticalMax" | "mouseDragOn"> & React.RefAttributes<FirstPersonControlImpl>>;
|
|
5
|
+
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" | "update" | "connect" | "domElement" | "movementSpeed" | "autoForward" | "handleResize" | "lookSpeed" | "lookVertical" | "activeLook" | "heightSpeed" | "heightCoef" | "heightMin" | "heightMax" | "constrainVertical" | "verticalMin" | "verticalMax" | "mouseDragOn"> & React.RefAttributes<FirstPersonControlImpl>>;
|
|
@@ -4,12 +4,8 @@ import { useThree, useFrame } from '@react-three/fiber';
|
|
|
4
4
|
import { FirstPersonControls as FirstPersonControls$1 } from 'three-stdlib';
|
|
5
5
|
|
|
6
6
|
const FirstPersonControls = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
7
|
-
const camera = useThree(
|
|
8
|
-
|
|
9
|
-
}) => camera);
|
|
10
|
-
const gl = useThree(({
|
|
11
|
-
gl
|
|
12
|
-
}) => gl);
|
|
7
|
+
const camera = useThree(state => state.camera);
|
|
8
|
+
const gl = useThree(state => state.gl);
|
|
13
9
|
const [controls] = React.useState(() => new FirstPersonControls$1(camera, gl.domElement));
|
|
14
10
|
useFrame((_, delta) => {
|
|
15
11
|
controls.update(delta);
|
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/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,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("@react-three/fiber"),o=require("./GizmoHelper.cjs.js"),a=require("three");function n(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 o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("./OrthographicCamera.cjs.js"),require("react-merge-refs"),require("./useCamera.cjs.js");var s=n(e),c=i(t);const l="#f0f0f0",m="#999",p="black",u="black",f=["Right","Left","Top","Bottom","Front","Back"],h=e=>new a.Vector3(...e).multiplyScalar(.38),y=[[1,1,1],[1,1,-1],[1,-1,1],[1,-1,-1],[-1,1,1],[-1,1,-1],[-1,-1,1],[-1,-1,-1]].map(h),d=[.25,.25,.25],g=[[1,1,0],[1,0,1],[1,0,-1],[1,-1,0],[0,1,1],[0,1,-1],[0,-1,1],[0,-1,-1],[-1,1,0],[-1,0,1],[-1,0,-1],[-1,-1,0]].map(h),b=g.map((e=>e.toArray().map((e=>0==e?.5:.25)))),x=({hover:e,index:t,font:o="20px Inter var, Arial, sans-serif",faces:n=f,color:i=l,hoverColor:s=m,textColor:h=p,strokeColor:y=u,opacity:d=1})=>{const g=r.useThree((e=>e.gl)),b=c.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const r=e.getContext("2d");return r.fillStyle=i,r.fillRect(0,0,e.width,e.height),r.strokeStyle=y,r.strokeRect(0,0,e.width,e.height),r.font=o,r.textAlign="center",r.fillStyle=h,r.fillText(n[t].toUpperCase(),64,76),new a.CanvasTexture(e)}),[t,n,o,i,h,y]);return c.createElement("meshLambertMaterial",{map:b,"map-anisotropy":g.capabilities.getMaxAnisotropy()||1,attach
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("@react-three/fiber"),o=require("./GizmoHelper.cjs.js"),a=require("three");function n(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 o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("./OrthographicCamera.cjs.js"),require("react-merge-refs"),require("./useCamera.cjs.js");var s=n(e),c=i(t);const l="#f0f0f0",m="#999",p="black",u="black",f=["Right","Left","Top","Bottom","Front","Back"],h=e=>new a.Vector3(...e).multiplyScalar(.38),y=[[1,1,1],[1,1,-1],[1,-1,1],[1,-1,-1],[-1,1,1],[-1,1,-1],[-1,-1,1],[-1,-1,-1]].map(h),d=[.25,.25,.25],g=[[1,1,0],[1,0,1],[1,0,-1],[1,-1,0],[0,1,1],[0,1,-1],[0,-1,1],[0,-1,-1],[-1,1,0],[-1,0,1],[-1,0,-1],[-1,-1,0]].map(h),b=g.map((e=>e.toArray().map((e=>0==e?.5:.25)))),x=({hover:e,index:t,font:o="20px Inter var, Arial, sans-serif",faces:n=f,color:i=l,hoverColor:s=m,textColor:h=p,strokeColor:y=u,opacity:d=1})=>{const g=r.useThree((e=>e.gl)),b=c.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const r=e.getContext("2d");return r.fillStyle=i,r.fillRect(0,0,e.width,e.height),r.strokeStyle=y,r.strokeRect(0,0,e.width,e.height),r.font=o,r.textAlign="center",r.fillStyle=h,r.fillText(n[t].toUpperCase(),64,76),new a.CanvasTexture(e)}),[t,n,o,i,h,y]);return c.createElement("meshLambertMaterial",{map:b,"map-anisotropy":g.capabilities.getMaxAnisotropy()||1,attach:`material-${t}`,color:e?s:"white",transparent:!0,opacity:d})},C=e=>{const{tweenCamera:t,raycast:r}=o.useGizmoContext(),[a,n]=c.useState(null);return c.createElement("mesh",{raycast:r,onPointerOut:e=>{e.stopPropagation(),n(null)},onPointerMove:e=>{e.stopPropagation(),n(Math.floor(e.faceIndex/2))},onClick:e.onClick||(e=>{e.stopPropagation(),t(e.face.normal)})},[...Array(6)].map(((t,r)=>c.createElement(x,s.default({key:r,index:r,hover:a===r},e)))),c.createElement("boxGeometry",null))},v=({onClick:e,dimensions:t,position:r,hoverColor:a=m})=>{const{tweenCamera:n,raycast:i}=o.useGizmoContext(),[s,l]=c.useState(!1);return c.createElement("mesh",{scale:1.01,position:r,raycast:i,onPointerOver:e=>{e.stopPropagation(),l(!0)},onPointerOut:e=>{e.stopPropagation(),l(!1)},onClick:e||(e=>{e.stopPropagation(),n(r)})},c.createElement("meshBasicMaterial",{color:s?a:"white",transparent:!0,opacity:.6,visible:s}),c.createElement("boxGeometry",{args:t}))};exports.GizmoViewcube=e=>c.createElement("group",{scale:[60,60,60]},c.createElement(C,e),g.map(((t,r)=>c.createElement(v,s.default({key:r,position:t,dimensions:b[r]},e)))),y.map(((t,r)=>c.createElement(v,s.default({key:r,position:t,dimensions:d},e)))),c.createElement("ambientLight",{intensity:.5}),c.createElement("pointLight",{position:[10,10,10],intensity:.5}));
|