@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
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ReactThreeFiber } from '@react-three/fiber';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import * as THREE from 'three';
|
|
4
|
+
export declare type LightProps = JSX.IntrinsicElements['mesh'] & {
|
|
5
|
+
args?: any[];
|
|
6
|
+
map?: THREE.Texture;
|
|
7
|
+
toneMapped?: boolean;
|
|
8
|
+
color?: ReactThreeFiber.Color;
|
|
9
|
+
form?: 'circle' | 'ring' | 'rect' | any;
|
|
10
|
+
scale?: number | [number, number, number] | [number, number];
|
|
11
|
+
intensity?: number;
|
|
12
|
+
target?: [number, number, number] | THREE.Vector3;
|
|
13
|
+
};
|
|
14
|
+
export declare const Lightformer: React.ForwardRefExoticComponent<Pick<Omit<ReactThreeFiber.ExtendedColors<ReactThreeFiber.Overwrite<Partial<THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>, ReactThreeFiber.NodeProps<THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>, typeof THREE.Mesh>>>, ReactThreeFiber.NonFunctionKeys<{
|
|
15
|
+
position?: ReactThreeFiber.Vector3 | undefined;
|
|
16
|
+
up?: ReactThreeFiber.Vector3 | undefined;
|
|
17
|
+
scale?: ReactThreeFiber.Vector3 | undefined;
|
|
18
|
+
rotation?: ReactThreeFiber.Euler | undefined;
|
|
19
|
+
matrix?: ReactThreeFiber.Matrix4 | undefined;
|
|
20
|
+
quaternion?: ReactThreeFiber.Quaternion | undefined;
|
|
21
|
+
layers?: ReactThreeFiber.Layers | undefined;
|
|
22
|
+
dispose?: (() => void) | null | undefined;
|
|
23
|
+
}>> & {
|
|
24
|
+
position?: ReactThreeFiber.Vector3 | undefined;
|
|
25
|
+
up?: ReactThreeFiber.Vector3 | undefined;
|
|
26
|
+
scale?: ReactThreeFiber.Vector3 | undefined;
|
|
27
|
+
rotation?: ReactThreeFiber.Euler | undefined;
|
|
28
|
+
matrix?: ReactThreeFiber.Matrix4 | undefined;
|
|
29
|
+
quaternion?: ReactThreeFiber.Quaternion | undefined;
|
|
30
|
+
layers?: ReactThreeFiber.Layers | undefined;
|
|
31
|
+
dispose?: (() => void) | null | undefined;
|
|
32
|
+
} & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
|
|
33
|
+
args?: any[] | undefined;
|
|
34
|
+
map?: THREE.Texture | undefined;
|
|
35
|
+
toneMapped?: boolean | undefined;
|
|
36
|
+
color?: ReactThreeFiber.Color | undefined;
|
|
37
|
+
form?: 'circle' | 'ring' | 'rect' | any;
|
|
38
|
+
scale?: number | [number, number] | [number, number, number] | undefined;
|
|
39
|
+
intensity?: number | undefined;
|
|
40
|
+
target?: THREE.Vector3 | [number, number, number] | undefined;
|
|
41
|
+
}, "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 | "form" | "map" | "material" | "target" | "toneMapped" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "intensity"> & React.RefAttributes<unknown>>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
|
+
import { applyProps } from '@react-three/fiber';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
import mergeRefs from 'react-merge-refs';
|
|
6
|
+
|
|
7
|
+
const Lightformer = /*#__PURE__*/React.forwardRef(({
|
|
8
|
+
args,
|
|
9
|
+
map,
|
|
10
|
+
toneMapped = false,
|
|
11
|
+
color = 'white',
|
|
12
|
+
form: Form = 'rect',
|
|
13
|
+
intensity = 1,
|
|
14
|
+
scale = 1,
|
|
15
|
+
target,
|
|
16
|
+
children,
|
|
17
|
+
...props
|
|
18
|
+
}, forwardRef) => {
|
|
19
|
+
// Apply emissive power
|
|
20
|
+
const ref = React.useRef(null);
|
|
21
|
+
React.useLayoutEffect(() => {
|
|
22
|
+
if (!children && !props.material) {
|
|
23
|
+
applyProps(ref.current.material, {
|
|
24
|
+
color
|
|
25
|
+
});
|
|
26
|
+
ref.current.material.color.multiplyScalar(intensity);
|
|
27
|
+
}
|
|
28
|
+
}, [color, intensity, children, props.material]); // Target light
|
|
29
|
+
|
|
30
|
+
React.useLayoutEffect(() => {
|
|
31
|
+
if (target) ref.current.lookAt(Array.isArray(target) ? new THREE.Vector3(...target) : target);
|
|
32
|
+
}, [target]); // Fix 2-dimensional scale
|
|
33
|
+
|
|
34
|
+
scale = Array.isArray(scale) && scale.length === 2 ? [scale[0], scale[1], 1] : scale;
|
|
35
|
+
return /*#__PURE__*/React.createElement("mesh", _extends({
|
|
36
|
+
ref: mergeRefs([ref, forwardRef]),
|
|
37
|
+
scale: scale
|
|
38
|
+
}, props), Form === 'circle' ? /*#__PURE__*/React.createElement("ringGeometry", {
|
|
39
|
+
args: [0, 1, 64]
|
|
40
|
+
}) : Form === 'ring' ? /*#__PURE__*/React.createElement("ringGeometry", {
|
|
41
|
+
args: [0.5, 1, 64]
|
|
42
|
+
}) : Form === 'rect' ? /*#__PURE__*/React.createElement("planeGeometry", null) : /*#__PURE__*/React.createElement(Form, {
|
|
43
|
+
args: args
|
|
44
|
+
}), children ? children : !props.material ? /*#__PURE__*/React.createElement("meshBasicMaterial", {
|
|
45
|
+
toneMapped: toneMapped,
|
|
46
|
+
map: map,
|
|
47
|
+
side: THREE.DoubleSide
|
|
48
|
+
}) : null);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
export { Lightformer };
|
package/core/MapControls.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 a(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
|
|
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 a(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 s=a(e),i=o(r);const u=i.forwardRef(((e={enableDamping:!0},r)=>{const{domElement:a,camera:o,onChange:u,onStart:c,onEnd:d,...l}=e,f=t.useThree((e=>e.invalidate)),v=t.useThree((e=>e.camera)),m=t.useThree((e=>e.gl)),p=t.useThree((e=>e.events)),b=a||p.connected||m.domElement,E=o||v,h=i.useMemo((()=>new n.MapControls(E)),[E]);return i.useEffect((()=>{h.connect(b);const e=e=>{f(),u&&u(e)};return h.addEventListener("change",e),c&&h.addEventListener("start",c),d&&h.addEventListener("end",d),()=>{h.dispose(),h.removeEventListener("change",e),c&&h.removeEventListener("start",c),d&&h.removeEventListener("end",d)}}),[u,c,d,h,f,b]),t.useFrame((()=>h.update())),i.createElement("primitive",s.default({ref:r,dispose:void 0,object:h,enableDamping:!0},l))}));exports.MapControls=u;
|
package/core/MapControls.d.ts
CHANGED
|
@@ -8,5 +8,6 @@ export declare type MapControlsProps = ReactThreeFiber.Overwrite<ReactThreeFiber
|
|
|
8
8
|
onChange?: (e?: THREE.Event) => void;
|
|
9
9
|
onStart?: (e?: THREE.Event) => void;
|
|
10
10
|
onEnd?: (e?: THREE.Event) => void;
|
|
11
|
+
domElement?: HTMLElement;
|
|
11
12
|
}>;
|
|
12
|
-
export declare const MapControls: React.ForwardRefExoticComponent<Pick<MapControlsProps, "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 | "camera" | "reset" | "enabled" | "update" | "onStart" | "keys" | "target" | "touches" | "
|
|
13
|
+
export declare const MapControls: React.ForwardRefExoticComponent<Pick<MapControlsProps, "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 | "camera" | "reset" | "enabled" | "connect" | "update" | "onStart" | "keys" | "target" | "touches" | "domElement" | "minDistance" | "maxDistance" | "minZoom" | "maxZoom" | "minPolarAngle" | "maxPolarAngle" | "minAzimuthAngle" | "maxAzimuthAngle" | "enableDamping" | "dampingFactor" | "enableZoom" | "zoomSpeed" | "enableRotate" | "rotateSpeed" | "enablePan" | "panSpeed" | "screenSpacePanning" | "keyPanSpeed" | "autoRotate" | "autoRotateSpeed" | "reverseOrbit" | "mouseButtons" | "target0" | "position0" | "zoom0" | "_domElementKeyEvents" | "getPolarAngle" | "getAzimuthalAngle" | "setPolarAngle" | "setAzimuthalAngle" | "getDistance" | "listenToKeyEvents" | "saveState" | "onEnd"> & React.RefAttributes<MapControlsImpl>>;
|
package/core/MapControls.js
CHANGED
|
@@ -7,25 +7,22 @@ const MapControls = /*#__PURE__*/React.forwardRef((props = {
|
|
|
7
7
|
enableDamping: true
|
|
8
8
|
}, ref) => {
|
|
9
9
|
const {
|
|
10
|
+
domElement,
|
|
10
11
|
camera,
|
|
11
12
|
onChange,
|
|
12
13
|
onStart,
|
|
13
14
|
onEnd,
|
|
14
15
|
...rest
|
|
15
16
|
} = props;
|
|
16
|
-
const invalidate = useThree(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
}) => camera);
|
|
22
|
-
const domElement = useThree(({
|
|
23
|
-
gl
|
|
24
|
-
}) => gl.domElement);
|
|
17
|
+
const invalidate = useThree(state => state.invalidate);
|
|
18
|
+
const defaultCamera = useThree(state => state.camera);
|
|
19
|
+
const gl = useThree(state => state.gl);
|
|
20
|
+
const events = useThree(state => state.events);
|
|
21
|
+
const explDomElement = domElement || events.connected || gl.domElement;
|
|
25
22
|
const explCamera = camera || defaultCamera;
|
|
26
23
|
const controls = React.useMemo(() => new MapControls$1(explCamera), [explCamera]);
|
|
27
24
|
React.useEffect(() => {
|
|
28
|
-
controls.connect(
|
|
25
|
+
controls.connect(explDomElement);
|
|
29
26
|
|
|
30
27
|
const callback = e => {
|
|
31
28
|
invalidate();
|
|
@@ -41,7 +38,7 @@ const MapControls = /*#__PURE__*/React.forwardRef((props = {
|
|
|
41
38
|
if (onStart) controls.removeEventListener('start', onStart);
|
|
42
39
|
if (onEnd) controls.removeEventListener('end', onEnd);
|
|
43
40
|
};
|
|
44
|
-
}, [onChange, onStart, onEnd, controls, invalidate,
|
|
41
|
+
}, [onChange, onStart, onEnd, controls, invalidate, explDomElement]);
|
|
45
42
|
useFrame(() => controls.update());
|
|
46
43
|
return /*#__PURE__*/React.createElement("primitive", _extends({
|
|
47
44
|
ref: ref,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),a=require("@react-three/fiber"),n=require("react-merge-refs"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),a=require("@react-three/fiber"),n=require("react-merge-refs"),o=require("../materials/BlurPass.cjs.js"),i=require("../materials/MeshReflectorMaterial.cjs.js");function s(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 a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("../materials/ConvolutionMaterial.cjs.js");var u=s(e),d=l(t),c=s(n);a.extend({MeshReflectorMaterialImpl:i.MeshReflectorMaterial});const p=d.forwardRef((({mixBlur:e=0,mixStrength:t=1,resolution:n=256,blur:i=[0,0],minDepthThreshold:s=.9,maxDepthThreshold:l=1,depthScale:p=0,depthToBlurRatioBias:m=.25,mirror:h=0,distortion:f=1,mixContrast:x=1,distortionMap:M,reflectorOffset:T=0,...S},y)=>{const w=a.useThree((({gl:e})=>e)),b=a.useThree((({camera:e})=>e)),g=a.useThree((({scene:e})=>e)),R=(i=Array.isArray(i)?i:[i,i])[0]+i[1]>0,v=d.useRef(null),[j]=d.useState((()=>new r.Plane)),[D]=d.useState((()=>new r.Vector3)),[B]=d.useState((()=>new r.Vector3)),[_]=d.useState((()=>new r.Vector3)),[O]=d.useState((()=>new r.Matrix4)),[P]=d.useState((()=>new r.Vector3(0,0,-1))),[U]=d.useState((()=>new r.Vector4)),[E]=d.useState((()=>new r.Vector3)),[V]=d.useState((()=>new r.Vector3)),[F]=d.useState((()=>new r.Vector4)),[W]=d.useState((()=>new r.Matrix4)),[q]=d.useState((()=>new r.PerspectiveCamera)),I=d.useCallback((()=>{var e;const t=v.current.parent||(null==(e=v.current)?void 0:e.__r3f.parent);if(!t)return;if(B.setFromMatrixPosition(t.matrixWorld),_.setFromMatrixPosition(b.matrixWorld),O.extractRotation(t.matrixWorld),D.set(0,0,1),D.applyMatrix4(O),B.addScaledVector(D,T),E.subVectors(B,_),E.dot(D)>0)return;E.reflect(D).negate(),E.add(B),O.extractRotation(b.matrixWorld),P.set(0,0,-1),P.applyMatrix4(O),P.add(_),V.subVectors(B,P),V.reflect(D).negate(),V.add(B),q.position.copy(E),q.up.set(0,1,0),q.up.applyMatrix4(O),q.up.reflect(D),q.lookAt(V),q.far=b.far,q.updateMatrixWorld(),q.projectionMatrix.copy(b.projectionMatrix),W.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),W.multiply(q.projectionMatrix),W.multiply(q.matrixWorldInverse),W.multiply(t.matrixWorld),j.setFromNormalAndCoplanarPoint(D,B),j.applyMatrix4(q.matrixWorldInverse),U.set(j.normal.x,j.normal.y,j.normal.z,j.constant);const r=q.projectionMatrix;F.x=(Math.sign(U.x)+r.elements[8])/r.elements[0],F.y=(Math.sign(U.y)+r.elements[9])/r.elements[5],F.z=-1,F.w=(1+r.elements[10])/r.elements[14],U.multiplyScalar(2/U.dot(F)),r.elements[2]=U.x,r.elements[6]=U.y,r.elements[10]=U.z+1,r.elements[14]=U.w}),[b,T]),[C,k,L,z]=d.useMemo((()=>{const a={minFilter:r.LinearFilter,magFilter:r.LinearFilter,encoding:w.outputEncoding,type:r.HalfFloatType},u=new r.WebGLRenderTarget(n,n,a);u.depthBuffer=!0,u.depthTexture=new r.DepthTexture(n,n),u.depthTexture.format=r.DepthFormat,u.depthTexture.type=r.UnsignedShortType;const d=new r.WebGLRenderTarget(n,n,a);return[u,d,new o.BlurPass({gl:w,resolution:n,width:i[0],height:i[1],minDepthThreshold:s,maxDepthThreshold:l,depthScale:p,depthToBlurRatioBias:m}),{mirror:h,textureMatrix:W,mixBlur:e,tDiffuse:u.texture,tDepth:u.depthTexture,tDiffuseBlur:d.texture,hasBlur:R,mixStrength:t,minDepthThreshold:s,maxDepthThreshold:l,depthScale:p,depthToBlurRatioBias:m,transparent:!0,distortion:f,distortionMap:M,mixContrast:x,"defines-USE_BLUR":R?"":void 0,"defines-USE_DEPTH":p>0?"":void 0,"defines-USE_DISTORTION":M?"":void 0}]}),[w,i,W,n,h,R,e,t,s,l,p,m,f,M,x]);return a.useFrame((()=>{var e;const t=v.current.parent||(null==(e=v.current)?void 0:e.__r3f.parent);if(!t)return;t.visible=!1;const r=w.xr.enabled,a=w.shadowMap.autoUpdate;I(),w.xr.enabled=!1,w.shadowMap.autoUpdate=!1,w.setRenderTarget(C),w.state.buffers.depth.setMask(!0),w.autoClear||w.clear(),w.render(g,q),R&&L.render(w,C,k),w.xr.enabled=r,w.shadowMap.autoUpdate=a,t.visible=!0,w.setRenderTarget(null)})),d.createElement("meshReflectorMaterialImpl",u.default({attach:"material",key:"key"+z["defines-USE_BLUR"]+z["defines-USE_DEPTH"]+z["defines-USE_DISTORTION"],ref:c.default([v,y])},z,S))}));exports.MeshReflectorMaterial=p;
|
|
@@ -11,7 +11,6 @@ export declare type Props = JSX.IntrinsicElements['meshStandardMaterial'] & {
|
|
|
11
11
|
maxDepthThreshold?: number;
|
|
12
12
|
depthScale?: number;
|
|
13
13
|
depthToBlurRatioBias?: number;
|
|
14
|
-
debug?: number;
|
|
15
14
|
distortionMap?: Texture;
|
|
16
15
|
distortion?: number;
|
|
17
16
|
mixContrast?: number;
|
|
@@ -24,4 +23,4 @@ declare global {
|
|
|
24
23
|
}
|
|
25
24
|
}
|
|
26
25
|
}
|
|
27
|
-
export declare const MeshReflectorMaterial: React.ForwardRefExoticComponent<Pick<Props, "attach" | "args" | "children" | "key" | "onUpdate" | "blur" | "resolution" | keyof import("three").MeshStandardMaterial | "minDepthThreshold" | "maxDepthThreshold" | "depthScale" | "depthToBlurRatioBias" | "mixBlur" | "mixStrength" | "mirror" | "
|
|
26
|
+
export declare const MeshReflectorMaterial: React.ForwardRefExoticComponent<Pick<Props, "attach" | "args" | "children" | "key" | "onUpdate" | "blur" | "resolution" | keyof import("three").MeshStandardMaterial | "minDepthThreshold" | "maxDepthThreshold" | "depthScale" | "depthToBlurRatioBias" | "mixBlur" | "mixStrength" | "mirror" | "distortion" | "mixContrast" | "distortionMap" | "reflectorOffset"> & React.RefAttributes<MeshReflectorMaterialImpl>>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { Plane, Vector3, Matrix4, Vector4, PerspectiveCamera, LinearFilter, WebGLRenderTarget, DepthTexture, DepthFormat, UnsignedShortType } from 'three';
|
|
3
|
+
import { Plane, Vector3, Matrix4, Vector4, PerspectiveCamera, LinearFilter, HalfFloatType, WebGLRenderTarget, DepthTexture, DepthFormat, UnsignedShortType } from 'three';
|
|
4
4
|
import { extend, useThree, useFrame } from '@react-three/fiber';
|
|
5
5
|
import mergeRefs from 'react-merge-refs';
|
|
6
6
|
import { BlurPass } from '../materials/BlurPass.js';
|
|
@@ -19,7 +19,6 @@ const MeshReflectorMaterial = /*#__PURE__*/React.forwardRef(({
|
|
|
19
19
|
depthScale = 0,
|
|
20
20
|
depthToBlurRatioBias = 0.25,
|
|
21
21
|
mirror = 0,
|
|
22
|
-
debug = 0,
|
|
23
22
|
distortion = 1,
|
|
24
23
|
mixContrast = 1,
|
|
25
24
|
distortionMap,
|
|
@@ -110,7 +109,8 @@ const MeshReflectorMaterial = /*#__PURE__*/React.forwardRef(({
|
|
|
110
109
|
const parameters = {
|
|
111
110
|
minFilter: LinearFilter,
|
|
112
111
|
magFilter: LinearFilter,
|
|
113
|
-
encoding: gl.outputEncoding
|
|
112
|
+
encoding: gl.outputEncoding,
|
|
113
|
+
type: HalfFloatType
|
|
114
114
|
};
|
|
115
115
|
const fbo1 = new WebGLRenderTarget(resolution, resolution, parameters);
|
|
116
116
|
fbo1.depthBuffer = true;
|
|
@@ -142,7 +142,6 @@ const MeshReflectorMaterial = /*#__PURE__*/React.forwardRef(({
|
|
|
142
142
|
depthScale,
|
|
143
143
|
depthToBlurRatioBias,
|
|
144
144
|
transparent: true,
|
|
145
|
-
debug,
|
|
146
145
|
distortion,
|
|
147
146
|
distortionMap,
|
|
148
147
|
mixContrast,
|
|
@@ -151,7 +150,7 @@ const MeshReflectorMaterial = /*#__PURE__*/React.forwardRef(({
|
|
|
151
150
|
'defines-USE_DISTORTION': distortionMap ? '' : undefined
|
|
152
151
|
};
|
|
153
152
|
return [fbo1, fbo2, blurpass, reflectorProps];
|
|
154
|
-
}, [gl, blur, textureMatrix, resolution, mirror, hasBlur, mixBlur, mixStrength, minDepthThreshold, maxDepthThreshold, depthScale, depthToBlurRatioBias,
|
|
153
|
+
}, [gl, blur, textureMatrix, resolution, mirror, hasBlur, mixBlur, mixStrength, minDepthThreshold, maxDepthThreshold, depthScale, depthToBlurRatioBias, distortion, distortionMap, mixContrast]);
|
|
155
154
|
useFrame(() => {
|
|
156
155
|
var _materialRef$current2;
|
|
157
156
|
|
|
@@ -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
|
|
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 s(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 a=s(e),u=o(r);const c=u.forwardRef((({makeDefault:e,camera:r,regress:s,domElement:o,enableDamping:c=!0,onChange:i,onStart:f,onEnd:d,...l},m)=>{const b=t.useThree((e=>e.invalidate)),v=t.useThree((e=>e.camera)),h=t.useThree((e=>e.gl)),p=t.useThree((e=>e.events)),E=t.useThree((e=>e.set)),g=t.useThree((e=>e.get)),O=t.useThree((e=>e.performance)),j=r||v,T=o||p.connected||h.domElement,L=u.useMemo((()=>new n.OrbitControls(j)),[j]);return t.useFrame((()=>{L.enabled&&L.update()})),u.useEffect((()=>(L.connect(T),()=>{L.dispose()})),[T,s,L,b]),u.useEffect((()=>{const e=e=>{b(),s&&O.regress(),i&&i(e)};return L.addEventListener("change",e),f&&L.addEventListener("start",f),d&&L.addEventListener("end",d),()=>{f&&L.removeEventListener("start",f),d&&L.removeEventListener("end",d),L.removeEventListener("change",e)}}),[i,f,d]),u.useEffect((()=>{if(e){const e=g().controls;return E({controls:L}),()=>E({controls:e})}}),[e,L]),u.createElement("primitive",a.default({ref:m,object:L,enableDamping:c},l))}));exports.OrbitControls=c;
|
package/core/OrbitControls.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
2
|
import { useThree, useFrame } from '@react-three/fiber';
|
|
3
3
|
import * as React from 'react';
|
|
4
|
-
import { forwardRef, useMemo, useEffect } from 'react';
|
|
5
4
|
import { OrbitControls as OrbitControls$1 } from 'three-stdlib';
|
|
6
5
|
|
|
7
|
-
const OrbitControls = /*#__PURE__*/forwardRef(({
|
|
6
|
+
const OrbitControls = /*#__PURE__*/React.forwardRef(({
|
|
8
7
|
makeDefault,
|
|
9
8
|
camera,
|
|
10
9
|
regress,
|
|
@@ -15,52 +14,40 @@ const OrbitControls = /*#__PURE__*/forwardRef(({
|
|
|
15
14
|
onEnd,
|
|
16
15
|
...restProps
|
|
17
16
|
}, ref) => {
|
|
18
|
-
const invalidate = useThree(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
gl
|
|
26
|
-
}) => gl);
|
|
27
|
-
const events = useThree(({
|
|
28
|
-
events
|
|
29
|
-
}) => events);
|
|
30
|
-
const set = useThree(({
|
|
31
|
-
set
|
|
32
|
-
}) => set);
|
|
33
|
-
const get = useThree(({
|
|
34
|
-
get
|
|
35
|
-
}) => get);
|
|
36
|
-
const performance = useThree(({
|
|
37
|
-
performance
|
|
38
|
-
}) => performance);
|
|
17
|
+
const invalidate = useThree(state => state.invalidate);
|
|
18
|
+
const defaultCamera = useThree(state => state.camera);
|
|
19
|
+
const gl = useThree(state => state.gl);
|
|
20
|
+
const events = useThree(state => state.events);
|
|
21
|
+
const set = useThree(state => state.set);
|
|
22
|
+
const get = useThree(state => state.get);
|
|
23
|
+
const performance = useThree(state => state.performance);
|
|
39
24
|
const explCamera = camera || defaultCamera;
|
|
40
|
-
const explDomElement = domElement ||
|
|
41
|
-
const controls = useMemo(() => new OrbitControls$1(explCamera), [explCamera]);
|
|
25
|
+
const explDomElement = domElement || events.connected || gl.domElement;
|
|
26
|
+
const controls = React.useMemo(() => new OrbitControls$1(explCamera), [explCamera]);
|
|
42
27
|
useFrame(() => {
|
|
43
28
|
if (controls.enabled) controls.update();
|
|
44
29
|
});
|
|
45
|
-
useEffect(() => {
|
|
30
|
+
React.useEffect(() => {
|
|
31
|
+
controls.connect(explDomElement);
|
|
32
|
+
return () => void controls.dispose();
|
|
33
|
+
}, [explDomElement, regress, controls, invalidate]);
|
|
34
|
+
React.useEffect(() => {
|
|
46
35
|
const callback = e => {
|
|
47
36
|
invalidate();
|
|
48
37
|
if (regress) performance.regress();
|
|
49
38
|
if (onChange) onChange(e);
|
|
50
39
|
};
|
|
51
40
|
|
|
52
|
-
controls.connect(explDomElement);
|
|
53
41
|
controls.addEventListener('change', callback);
|
|
54
42
|
if (onStart) controls.addEventListener('start', onStart);
|
|
55
43
|
if (onEnd) controls.addEventListener('end', onEnd);
|
|
56
44
|
return () => {
|
|
57
|
-
controls.removeEventListener('change', callback);
|
|
58
45
|
if (onStart) controls.removeEventListener('start', onStart);
|
|
59
46
|
if (onEnd) controls.removeEventListener('end', onEnd);
|
|
60
|
-
controls.
|
|
47
|
+
controls.removeEventListener('change', callback);
|
|
61
48
|
};
|
|
62
|
-
}, [
|
|
63
|
-
useEffect(() => {
|
|
49
|
+
}, [onChange, onStart, onEnd]);
|
|
50
|
+
React.useEffect(() => {
|
|
64
51
|
if (makeDefault) {
|
|
65
52
|
const old = get().controls;
|
|
66
53
|
set({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function n(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var o=a(e),l=n(t),u=n(r);class c extends l.PointsMaterial{constructor(e){super(e),this.onBeforeCompile=e=>{e.fragmentShader=e.fragmentShader.replace("#include <output_fragment>","\n #include <output_fragment>\n vec2 cxy = 2.0 * gl_PointCoord - 1.0;\n float r = dot(cxy, cxy);\n float delta = fwidth(r); \n float mask = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);\n gl_FragColor = vec4(gl_FragColor.rgb, mask * gl_FragColor.a );\n ")}}}const i=u.forwardRef(((e,t)=>{const[r]=u.useState((()=>new c(null)));return u.createElement("primitive",o.default({},e,{object:r,ref:t,attach:"material"}))}));exports.PointMaterial=i,exports.PointMaterialImpl=c;
|
package/core/PointMaterial.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
};
|
|
3
|
+
import { PrimitiveProps } from '@react-three/fiber';
|
|
4
|
+
declare type PointMaterialType = JSX.IntrinsicElements['pointsMaterial'];
|
|
6
5
|
declare global {
|
|
7
6
|
namespace JSX {
|
|
8
7
|
interface IntrinsicElements {
|
|
@@ -10,10 +9,8 @@ declare global {
|
|
|
10
9
|
}
|
|
11
10
|
}
|
|
12
11
|
}
|
|
13
|
-
export declare class PointMaterialImpl extends THREE.
|
|
14
|
-
constructor();
|
|
15
|
-
get scale(): any;
|
|
16
|
-
set scale(v: any);
|
|
12
|
+
export declare class PointMaterialImpl extends THREE.PointsMaterial {
|
|
13
|
+
constructor(props: any);
|
|
17
14
|
}
|
|
18
|
-
export declare const PointMaterial: React.ForwardRefExoticComponent<React.RefAttributes<
|
|
15
|
+
export declare const PointMaterial: React.ForwardRefExoticComponent<Pick<Omit<PrimitiveProps, "object" | "attach">, string | number> & React.RefAttributes<PointMaterialImpl>>;
|
|
19
16
|
export {};
|
package/core/PointMaterial.js
CHANGED
|
@@ -2,48 +2,30 @@ import _extends from '@babel/runtime/helpers/esm/extends';
|
|
|
2
2
|
import * as THREE from 'three';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
|
|
5
|
-
class PointMaterialImpl extends THREE.
|
|
6
|
-
constructor() {
|
|
7
|
-
super(
|
|
8
|
-
transparent: true,
|
|
9
|
-
uniforms: {
|
|
10
|
-
size: {
|
|
11
|
-
value: 1
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
|
-
vertexShader: THREE.ShaderLib.points.vertexShader,
|
|
15
|
-
fragmentShader: `
|
|
16
|
-
varying vec3 vColor;
|
|
17
|
-
void main() {
|
|
18
|
-
vec2 cxy = 2.0 * gl_PointCoord - 1.0;
|
|
19
|
-
float r = dot(cxy, cxy);
|
|
20
|
-
float delta = fwidth(r);
|
|
21
|
-
vec3 color = vColor;
|
|
22
|
-
#ifdef TONE_MAPPING
|
|
23
|
-
color = toneMapping(color);
|
|
24
|
-
#endif
|
|
25
|
-
gl_FragColor = linearToOutputTexel(vec4(color, 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r)));
|
|
26
|
-
}`,
|
|
27
|
-
vertexColors: true
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
get scale() {
|
|
32
|
-
return this.uniforms.size.value;
|
|
33
|
-
}
|
|
5
|
+
class PointMaterialImpl extends THREE.PointsMaterial {
|
|
6
|
+
constructor(props) {
|
|
7
|
+
super(props);
|
|
34
8
|
|
|
35
|
-
|
|
36
|
-
|
|
9
|
+
this.onBeforeCompile = shader => {
|
|
10
|
+
shader.fragmentShader = shader.fragmentShader.replace('#include <output_fragment>', `
|
|
11
|
+
#include <output_fragment>
|
|
12
|
+
vec2 cxy = 2.0 * gl_PointCoord - 1.0;
|
|
13
|
+
float r = dot(cxy, cxy);
|
|
14
|
+
float delta = fwidth(r);
|
|
15
|
+
float mask = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);
|
|
16
|
+
gl_FragColor = vec4(gl_FragColor.rgb, mask * gl_FragColor.a );
|
|
17
|
+
`);
|
|
18
|
+
};
|
|
37
19
|
}
|
|
38
20
|
|
|
39
21
|
}
|
|
40
22
|
const PointMaterial = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
41
|
-
const [material] = React.useState(() => new PointMaterialImpl());
|
|
42
|
-
return /*#__PURE__*/React.createElement("primitive", _extends({
|
|
23
|
+
const [material] = React.useState(() => new PointMaterialImpl(null));
|
|
24
|
+
return /*#__PURE__*/React.createElement("primitive", _extends({}, props, {
|
|
43
25
|
object: material,
|
|
44
26
|
ref: ref,
|
|
45
27
|
attach: "material"
|
|
46
|
-
}
|
|
28
|
+
}));
|
|
47
29
|
});
|
|
48
30
|
|
|
49
31
|
export { PointMaterial, PointMaterialImpl };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(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),i=c(r);const a=i.forwardRef((({domElement:e,selector:r,onChange:o,onLock:c,onUnlock:a,enabled:u=!0,...d},l)=>{const{camera:f,...h}=d,m=t.useThree((e=>e.get)),v=t.useThree((e=>e.setEvents)),E=t.useThree((e=>e.gl)),b=t.useThree((e=>e.camera)),p=t.useThree((e=>e.invalidate)),k=t.useThree((e=>e.events)),L=f||b,g=e||k.connected||E.domElement,[j]=i.useState((()=>new n.PointerLockControls(L)));return i.useEffect((()=>{if(u){j.connect(g);const e=m().events.compute;return v({compute(e,t){const r=t.size.width/2,n=t.size.height/2;t.pointer.set(r/t.size.width*2-1,-n/t.size.height*2+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),()=>{j.disconnect(),v({compute:e})}}}),[u,j]),i.useEffect((()=>{const e=e=>{p(),o&&o(e)};j.addEventListener("change",e),c&&j.addEventListener("lock",c),a&&j.addEventListener("unlock",a);const t=()=>j.lock(),n=r?Array.from(document.querySelectorAll(r)):[document];return n.forEach((e=>e&&e.addEventListener("click",t))),()=>{j.removeEventListener("change",e),c&&j.addEventListener("lock",c),a&&j.addEventListener("unlock",a),n.forEach((e=>e?e.removeEventListener("click",t):void 0))}}),[o,c,a,r]),i.createElement("primitive",s.default({ref:l,object:j},h))}));exports.PointerLockControls=a;
|
|
@@ -3,10 +3,12 @@ import * as React from 'react';
|
|
|
3
3
|
import * as THREE from 'three';
|
|
4
4
|
import { PointerLockControls as PointerLockControlsImpl } from 'three-stdlib';
|
|
5
5
|
export declare type PointerLockControlsProps = ReactThreeFiber.Object3DNode<PointerLockControlsImpl, typeof PointerLockControlsImpl> & {
|
|
6
|
+
domElement?: HTMLElement;
|
|
6
7
|
selector?: string;
|
|
8
|
+
enabled?: boolean;
|
|
7
9
|
camera?: THREE.Camera;
|
|
8
10
|
onChange?: (e?: THREE.Event) => void;
|
|
9
11
|
onLock?: (e?: THREE.Event) => void;
|
|
10
12
|
onUnlock?: (e?: THREE.Event) => void;
|
|
11
13
|
};
|
|
12
|
-
export declare const PointerLockControls: React.ForwardRefExoticComponent<Pick<PointerLockControlsProps, "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 | "camera" | "connect" | "disconnect" | "domElement" | "minPolarAngle" | "maxPolarAngle" | "isLocked" | "getDirection" | "moveForward" | "moveRight" | "lock" | "unlock" | "selector" | "onLock" | "onUnlock"> & React.RefAttributes<PointerLockControlsImpl>>;
|
|
14
|
+
export declare const PointerLockControls: React.ForwardRefExoticComponent<Pick<PointerLockControlsProps, "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 | "camera" | "enabled" | "connect" | "disconnect" | "domElement" | "minPolarAngle" | "maxPolarAngle" | "isLocked" | "getDirection" | "moveForward" | "moveRight" | "lock" | "unlock" | "selector" | "onLock" | "onUnlock"> & React.RefAttributes<PointerLockControlsImpl>>;
|
|
@@ -4,56 +4,74 @@ import * as React from 'react';
|
|
|
4
4
|
import { PointerLockControls as PointerLockControls$1 } from 'three-stdlib';
|
|
5
5
|
|
|
6
6
|
const PointerLockControls = /*#__PURE__*/React.forwardRef(({
|
|
7
|
+
domElement,
|
|
7
8
|
selector,
|
|
8
9
|
onChange,
|
|
9
10
|
onLock,
|
|
10
11
|
onUnlock,
|
|
12
|
+
enabled = true,
|
|
11
13
|
...props
|
|
12
14
|
}, ref) => {
|
|
13
15
|
const {
|
|
14
16
|
camera,
|
|
15
17
|
...rest
|
|
16
18
|
} = props;
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const defaultCamera = useThree(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const invalidate = useThree(({
|
|
24
|
-
invalidate
|
|
25
|
-
}) => invalidate);
|
|
19
|
+
const get = useThree(state => state.get);
|
|
20
|
+
const setEvents = useThree(state => state.setEvents);
|
|
21
|
+
const gl = useThree(state => state.gl);
|
|
22
|
+
const defaultCamera = useThree(state => state.camera);
|
|
23
|
+
const invalidate = useThree(state => state.invalidate);
|
|
24
|
+
const events = useThree(state => state.events);
|
|
26
25
|
const explCamera = camera || defaultCamera;
|
|
27
|
-
const
|
|
26
|
+
const explDomElement = domElement || events.connected || gl.domElement;
|
|
27
|
+
const [controls] = React.useState(() => new PointerLockControls$1(explCamera));
|
|
28
|
+
React.useEffect(() => {
|
|
29
|
+
if (enabled) {
|
|
30
|
+
controls.connect(explDomElement); // Force events to be centered while PLC is active
|
|
31
|
+
|
|
32
|
+
const oldComputeOffsets = get().events.compute;
|
|
33
|
+
setEvents({
|
|
34
|
+
compute(event, state) {
|
|
35
|
+
const offsetX = state.size.width / 2;
|
|
36
|
+
const offsetY = state.size.height / 2;
|
|
37
|
+
state.pointer.set(offsetX / state.size.width * 2 - 1, -(offsetY / state.size.height) * 2 + 1);
|
|
38
|
+
state.raycaster.setFromCamera(state.pointer, state.camera);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
});
|
|
42
|
+
return () => {
|
|
43
|
+
controls.disconnect();
|
|
44
|
+
setEvents({
|
|
45
|
+
compute: oldComputeOffsets
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}, [enabled, controls]);
|
|
28
50
|
React.useEffect(() => {
|
|
29
51
|
const callback = e => {
|
|
30
52
|
invalidate();
|
|
31
53
|
if (onChange) onChange(e);
|
|
32
54
|
};
|
|
33
55
|
|
|
34
|
-
controls
|
|
35
|
-
if (onLock) controls
|
|
36
|
-
if (onUnlock) controls
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if (onLock) controls == null ? void 0 : controls.addEventListener == null ? void 0 : controls.addEventListener('lock', onLock);
|
|
40
|
-
if (onUnlock) controls == null ? void 0 : controls.addEventListener == null ? void 0 : controls.addEventListener('unlock', onUnlock);
|
|
41
|
-
};
|
|
42
|
-
}, [onChange, onLock, onUnlock, controls, invalidate]);
|
|
43
|
-
React.useEffect(() => {
|
|
44
|
-
const handler = () => controls == null ? void 0 : controls.lock();
|
|
56
|
+
controls.addEventListener('change', callback);
|
|
57
|
+
if (onLock) controls.addEventListener('lock', onLock);
|
|
58
|
+
if (onUnlock) controls.addEventListener('unlock', onUnlock); // Enforce previous interaction
|
|
59
|
+
|
|
60
|
+
const handler = () => controls.lock();
|
|
45
61
|
|
|
46
62
|
const elements = selector ? Array.from(document.querySelectorAll(selector)) : [document];
|
|
47
63
|
elements.forEach(element => element && element.addEventListener('click', handler));
|
|
48
64
|
return () => {
|
|
65
|
+
controls.removeEventListener('change', callback);
|
|
66
|
+
if (onLock) controls.addEventListener('lock', onLock);
|
|
67
|
+
if (onUnlock) controls.addEventListener('unlock', onUnlock);
|
|
49
68
|
elements.forEach(element => element ? element.removeEventListener('click', handler) : undefined);
|
|
50
69
|
};
|
|
51
|
-
}, [
|
|
52
|
-
return
|
|
70
|
+
}, [onChange, onLock, onUnlock, selector]);
|
|
71
|
+
return /*#__PURE__*/React.createElement("primitive", _extends({
|
|
53
72
|
ref: ref,
|
|
54
|
-
dispose: undefined,
|
|
55
73
|
object: controls
|
|
56
|
-
}, rest))
|
|
74
|
+
}, rest));
|
|
57
75
|
});
|
|
58
76
|
|
|
59
77
|
export { PointerLockControls };
|
package/core/Points.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"),a=require("@react-three/fiber"),n=require("react-merge-refs"),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 a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=o(e),c=i(t),l=i(r),f=o(n);let d,m;const b=l.createContext(null),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),a=require("@react-three/fiber"),n=require("react-merge-refs"),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 a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=o(e),c=i(t),l=i(r),f=o(n);let d,m;const b=l.createContext(null),g=new c.Matrix4,y=new c.Vector3;new c.Color;const p=l.forwardRef((({children:e,range:t,limit:r=1e3,...n},u)=>{const o=l.useRef(null),[i,p]=l.useState([]),[[h,E,w]]=l.useState((()=>[new Float32Array(3*r),Float32Array.from({length:3*r},(()=>1)),Float32Array.from({length:r},(()=>1))]));l.useLayoutEffect((()=>{o.current.geometry.drawRange.count=Math.min(r,void 0!==t?t:r,i.length)}),[i,t]),l.useEffect((()=>{o.current.geometry.attributes.position.needsUpdate=!0})),a.useFrame((()=>{for(o.current.updateMatrix(),o.current.updateMatrixWorld(),g.copy(o.current.matrixWorld).invert(),d=0;d<i.length;d++)m=i[d].current,y.toArray(h,3*d),o.current.geometry.attributes.position.needsUpdate=!0,m.matrixWorldNeedsUpdate=!0,m.color.toArray(E,3*d),o.current.geometry.attributes.color.needsUpdate=!0,w.set([m.size],d),o.current.geometry.attributes.size.needsUpdate=!0}));const x=l.useMemo((()=>{const e={};for(d=0;d<i.length;d++){var t;Object.assign(e,null==(t=i[d].current)?void 0:t.__r3f.handlers)}return Object.keys(e).reduce(((e,t)=>({...e,[t]:e=>{var r,a,n;const u=null==(r=i[e.index])?void 0:r.current;return null==u||null==(a=u.__r3f)||null==(n=a.handlers)?void 0:n[t]({...e,object:u})}})),{})}),[e,i]),U=l.useMemo((()=>({subscribe:e=>(p((t=>[...t,e])),()=>p((t=>t.filter((t=>t.current!==e.current)))))})),[]);return l.createElement("points",s.default({matrixAutoUpdate:!1,ref:f.default([u,o])},x,n),l.createElement("bufferGeometry",null,l.createElement("bufferAttribute",{attach:"attributes-position",count:h.length/3,array:h,itemSize:3,usage:c.DynamicDrawUsage}),l.createElement("bufferAttribute",{attach:"attributes-color",count:E.length/3,array:E,itemSize:3,usage:c.DynamicDrawUsage}),l.createElement("bufferAttribute",{attach:"attributes-size",count:w.length,array:w,itemSize:1,usage:c.DynamicDrawUsage})),l.createElement(b.Provider,{value:U},e))})),h=l.forwardRef((({children:e,...t},r)=>{l.useMemo((()=>a.extend({Position:u.Position})),[]);const n=l.useRef(),{subscribe:o}=l.useContext(b);return l.useLayoutEffect((()=>o(n)),[]),l.createElement("position",s.default({ref:f.default([r,n])},t),e)})),E=l.forwardRef((({children:e,positions:t,colors:r,sizes:n,stride:u=3,...o},i)=>{const d=l.useRef(null);return a.useFrame((()=>{const e=d.current.geometry.attributes;e.position.needsUpdate=!0,r&&(e.color.needsUpdate=!0),n&&(e.size.needsUpdate=!0)})),l.createElement("points",s.default({ref:f.default([i,d])},o),l.createElement("bufferGeometry",null,l.createElement("bufferAttribute",{attach:"attributes-position",count:t.length/u,array:t,itemSize:u,usage:c.DynamicDrawUsage}),r&&l.createElement("bufferAttribute",{attach:"attributes-color",count:r.length/u,array:r,itemSize:3,usage:c.DynamicDrawUsage}),n&&l.createElement("bufferAttribute",{attach:"attributes-size",count:n.length/u,array:n,itemSize:1,usage:c.DynamicDrawUsage})),e)})),w=l.forwardRef(((e,t)=>e.positions instanceof Float32Array?l.createElement(E,s.default({},e,{ref:t})):l.createElement(p,s.default({},e,{ref:t}))));exports.Point=h,exports.Points=w,exports.PointsBuffer=E;
|