@react-three/drei 8.19.5 → 9.0.0-beta.3
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 +62 -329
- package/core/ArcballControls.cjs.js +1 -1
- package/core/ArcballControls.js +27 -18
- package/core/Billboard.d.ts +2 -2
- package/core/Bounds.cjs.js +1 -1
- package/core/Bounds.d.ts +1 -2
- package/core/Bounds.js +15 -26
- package/core/Center.d.ts +1 -1
- package/core/Cloud.cjs.js +1 -1
- package/core/Cloud.d.ts +1 -3
- package/core/Cloud.js +1 -4
- package/core/ContactShadows.cjs.js +1 -1
- package/core/ContactShadows.d.ts +1 -3
- package/core/ContactShadows.js +2 -15
- package/core/CubeCamera.cjs.js +1 -1
- package/core/CubeCamera.js +7 -7
- package/core/Detailed.d.ts +2 -2
- package/core/DeviceOrientationControls.cjs.js +1 -1
- package/core/DeviceOrientationControls.d.ts +1 -1
- package/core/DeviceOrientationControls.js +6 -2
- package/core/Effects.cjs.js +1 -1
- package/core/Effects.d.ts +2 -2
- package/core/Effects.js +2 -2
- package/core/Environment.cjs.js +1 -1
- package/core/Environment.d.ts +3 -13
- package/core/Environment.js +30 -95
- package/core/FirstPersonControls.cjs.js +1 -1
- package/core/FirstPersonControls.d.ts +1 -1
- package/core/FirstPersonControls.js +6 -2
- package/core/Float.cjs.js +1 -1
- package/core/Float.d.ts +1 -1
- package/core/Float.js +4 -5
- package/core/FlyControls.d.ts +1 -1
- package/core/GizmoHelper.cjs.js +1 -1
- package/core/GizmoHelper.d.ts +1 -2
- package/core/GizmoHelper.js +41 -31
- package/core/GizmoViewcube.cjs.js +1 -1
- package/core/GizmoViewcube.d.ts +2 -2
- package/core/GizmoViewcube.js +1 -1
- package/core/GizmoViewport.d.ts +2 -2
- package/core/Image.cjs.js +1 -1
- package/core/Image.d.ts +2 -4
- package/core/Image.js +1 -6
- package/core/Instances.cjs.js +1 -1
- package/core/Instances.d.ts +3 -3
- package/core/Instances.js +11 -5
- 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 -1
- package/core/MeshReflectorMaterial.js +5 -4
- package/core/MeshWobbleMaterial.d.ts +2 -4
- package/core/OrbitControls.cjs.js +1 -1
- package/core/OrbitControls.js +33 -23
- package/core/OrthographicCamera.d.ts +2 -2
- package/core/PerspectiveCamera.d.ts +2 -2
- package/core/PointMaterial.cjs.js +1 -1
- package/core/PointMaterial.d.ts +7 -3
- package/core/PointMaterial.js +32 -14
- package/core/PointerLockControls.cjs.js +1 -1
- package/core/PointerLockControls.d.ts +1 -3
- package/core/PointerLockControls.js +22 -36
- package/core/Points.cjs.js +1 -1
- package/core/Points.d.ts +3 -3
- package/core/Points.js +36 -17
- package/core/PositionalAudio.d.ts +2 -2
- package/core/Reflector.d.ts +1 -1
- package/core/RoundedBox.d.ts +1 -1
- package/core/ScreenQuad.d.ts +1 -1
- package/core/Segments.d.ts +1 -1
- package/core/Shadow.d.ts +2 -2
- package/core/SpotLight.d.ts +20 -4
- package/core/Stage.cjs.js +1 -1
- package/core/Stage.js +2 -1
- package/core/Stars.cjs.js +1 -1
- package/core/Stars.js +3 -6
- package/core/Text.cjs.js +1 -1
- package/core/Text.d.ts +2 -3
- package/core/Text.js +2 -3
- package/core/TrackballControls.cjs.js +1 -1
- package/core/TrackballControls.d.ts +1 -1
- package/core/TrackballControls.js +7 -12
- package/core/TransformControls.cjs.js +1 -1
- package/core/TransformControls.d.ts +1 -1
- package/core/TransformControls.js +13 -7
- package/core/index.cjs.js +1 -1
- package/core/index.d.ts +0 -6
- package/core/index.js +2 -9
- package/core/shapes.d.ts +17 -17
- package/core/useFBO.cjs.js +1 -1
- package/core/useFBO.d.ts +1 -1
- package/core/useFBO.js +24 -21
- package/core/useFBX.d.ts +1 -1
- package/core/useFBX.js +1 -2
- package/core/useGLTF.d.ts +1 -1
- package/core/useGLTF.js +1 -2
- package/core/useHelper.d.ts +1 -3
- package/core/useKTX2.d.ts +1 -1
- package/core/useKTX2.js +1 -2
- package/core/useTexture.d.ts +1 -1
- package/core/useTexture.js +1 -2
- package/index.cjs.js +1 -1
- package/index.js +1 -7
- package/materials/ConvolutionMaterial.cjs.js +1 -1
- package/materials/ConvolutionMaterial.js +0 -2
- package/materials/MeshReflectorMaterial.cjs.js +1 -1
- package/materials/MeshReflectorMaterial.d.ts +3 -0
- package/materials/MeshReflectorMaterial.js +27 -1
- package/materials/SpotLightMaterial.cjs.js +1 -1
- package/materials/SpotLightMaterial.js +0 -3
- package/native/index.cjs.js +1 -1
- package/native/index.js +2 -9
- package/package.json +8 -9
- package/web/Html.cjs.js +1 -1
- package/web/Html.js +7 -6
- package/web/ScrollControls.cjs.js +1 -1
- package/web/ScrollControls.js +5 -4
- package/web/Select.js +0 -1
- package/web/index.cjs.js +1 -1
- package/web/index.js +3 -10
- package/core/Clone.cjs.js +0 -1
- package/core/Clone.d.ts +0 -11
- package/core/Clone.js +0 -92
- package/core/ComputedAttribute.cjs.js +0 -1
- package/core/ComputedAttribute.d.ts +0 -9
- package/core/ComputedAttribute.js +0 -34
- package/core/Lightformer.cjs.js +0 -1
- package/core/Lightformer.d.ts +0 -41
- package/core/Lightformer.js +0 -51
- package/core/Sampler.cjs.js +0 -1
- package/core/Sampler.d.ts +0 -21
- package/core/Sampler.js +0 -65
- package/core/Trail.cjs.js +0 -1
- package/core/Trail.d.ts +0 -20
- package/core/Trail.js +0 -160
- package/core/useBoxProjectedEnv.cjs.js +0 -1
- package/core/useBoxProjectedEnv.d.ts +0 -8
- package/core/useBoxProjectedEnv.js +0 -98
package/core/Clone.js
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import pick from 'lodash.pick';
|
|
4
|
-
|
|
5
|
-
function createSpread(child, {
|
|
6
|
-
keys = ['near', 'far', 'color', 'distance', 'decay', 'penumbra', 'angle', 'intensity', 'skeleton', 'visible', 'castShadow', 'receiveShadow', 'morphTargetDictionary', 'morphTargetInfluences', 'name', 'geometry', 'material', 'position', 'rotation', 'scale', 'up', 'userData'],
|
|
7
|
-
deep,
|
|
8
|
-
inject,
|
|
9
|
-
castShadow,
|
|
10
|
-
receiveShadow
|
|
11
|
-
}) {
|
|
12
|
-
let spread = pick(child, keys);
|
|
13
|
-
|
|
14
|
-
if (deep) {
|
|
15
|
-
if (spread.geometry && deep !== 'materialsOnly') spread.geometry = spread.geometry.clone();
|
|
16
|
-
if (spread.material && deep !== 'geometriesOnly') spread.material = spread.material.clone();
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
if (inject) {
|
|
20
|
-
if (typeof inject === 'function') spread = { ...spread,
|
|
21
|
-
children: inject(child)
|
|
22
|
-
};else if ( /*#__PURE__*/React.isValidElement(inject)) spread = { ...spread,
|
|
23
|
-
children: inject
|
|
24
|
-
};else spread = { ...spread,
|
|
25
|
-
...inject
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
if (child.type === 'Mesh') {
|
|
30
|
-
if (castShadow) spread.castShadow = true;
|
|
31
|
-
if (receiveShadow) spread.receiveShadow = true;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return spread;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const Clone = /*#__PURE__*/React.forwardRef(({
|
|
38
|
-
object,
|
|
39
|
-
children,
|
|
40
|
-
deep,
|
|
41
|
-
castShadow,
|
|
42
|
-
receiveShadow,
|
|
43
|
-
inject,
|
|
44
|
-
keys,
|
|
45
|
-
...props
|
|
46
|
-
}, forwardRef) => {
|
|
47
|
-
const config = {
|
|
48
|
-
keys,
|
|
49
|
-
deep,
|
|
50
|
-
inject,
|
|
51
|
-
castShadow,
|
|
52
|
-
receiveShadow
|
|
53
|
-
}; // Deal with arrayed clones
|
|
54
|
-
|
|
55
|
-
if (Array.isArray(object)) {
|
|
56
|
-
return /*#__PURE__*/React.createElement("group", _extends({}, props, {
|
|
57
|
-
ref: forwardRef
|
|
58
|
-
}), object.map(o => /*#__PURE__*/React.createElement(Clone, _extends({
|
|
59
|
-
key: o.uuid,
|
|
60
|
-
object: o
|
|
61
|
-
}, config))), children);
|
|
62
|
-
} // Singleton clones
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const {
|
|
66
|
-
children: injectChildren,
|
|
67
|
-
...spread
|
|
68
|
-
} = createSpread(object, config);
|
|
69
|
-
const Element = object.type[0].toLowerCase() + object.type.slice(1);
|
|
70
|
-
return /*#__PURE__*/React.createElement(Element, _extends({}, spread, props, {
|
|
71
|
-
ref: forwardRef
|
|
72
|
-
}), (object == null ? void 0 : object.children).map(child => {
|
|
73
|
-
let spread = {};
|
|
74
|
-
let Element = child.type[0].toLowerCase() + child.type.slice(1);
|
|
75
|
-
|
|
76
|
-
if (Element === 'group' || Element === 'object3D') {
|
|
77
|
-
Element = Clone;
|
|
78
|
-
spread = {
|
|
79
|
-
object: child,
|
|
80
|
-
...config
|
|
81
|
-
};
|
|
82
|
-
} else {
|
|
83
|
-
spread = createSpread(child, config);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
return /*#__PURE__*/React.createElement(Element, _extends({
|
|
87
|
-
key: child.uuid
|
|
88
|
-
}, spread));
|
|
89
|
-
}), children, injectChildren);
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
export { Clone };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three");function u(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 u=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,u.get?u:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var c=u(e),a=n(t);exports.ComputedAttribute=({compute:e,name:t,...u})=>{const[n]=a.useState((()=>new r.BufferAttribute(new Float32Array(0),1))),f=a.useRef(null);return a.useLayoutEffect((()=>{if(f.current){var t;const r=null!==(t=f.current.parent)&&void 0!==t?t:f.current.__r3f.parent,u=e(r);f.current.copy(u)}}),[e]),a.createElement("primitive",c.default({ref:f,object:n,attachObject:["attributes",t]},u))};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { BufferAttributeProps } from '@react-three/fiber';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { BufferAttribute, BufferGeometry } from 'three';
|
|
4
|
-
declare type Props = {
|
|
5
|
-
compute: (geometry: BufferGeometry) => BufferAttribute;
|
|
6
|
-
name: string;
|
|
7
|
-
};
|
|
8
|
-
export declare const ComputedAttribute: ({ compute, name, ...props }: React.PropsWithChildren<Props & BufferAttributeProps>) => JSX.Element;
|
|
9
|
-
export {};
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { BufferAttribute } from 'three';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Used exclusively as a child of a BufferGeometry.
|
|
7
|
-
* Computes the BufferAttribute by calling the `compute` function
|
|
8
|
-
* and attaches the attribute to the geometry.
|
|
9
|
-
*/
|
|
10
|
-
const ComputedAttribute = ({
|
|
11
|
-
compute,
|
|
12
|
-
name,
|
|
13
|
-
...props
|
|
14
|
-
}) => {
|
|
15
|
-
const [bufferAttribute] = React.useState(() => new BufferAttribute(new Float32Array(0), 1));
|
|
16
|
-
const primitive = React.useRef(null);
|
|
17
|
-
React.useLayoutEffect(() => {
|
|
18
|
-
if (primitive.current) {
|
|
19
|
-
var _ref;
|
|
20
|
-
|
|
21
|
-
// @ts-expect-error brittle
|
|
22
|
-
const parent = (_ref = primitive.current.parent) !== null && _ref !== void 0 ? _ref : primitive.current.__r3f.parent;
|
|
23
|
-
const attr = compute(parent);
|
|
24
|
-
primitive.current.copy(attr);
|
|
25
|
-
}
|
|
26
|
-
}, [compute]);
|
|
27
|
-
return /*#__PURE__*/React.createElement("primitive", _extends({
|
|
28
|
-
ref: primitive,
|
|
29
|
-
object: bufferAttribute,
|
|
30
|
-
attachObject: ['attributes', name]
|
|
31
|
-
}, props));
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export { ComputedAttribute };
|
package/core/Lightformer.cjs.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("@react-three/fiber"),t=require("react"),a=require("three"),l=require("react-merge-refs");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,a.get?a:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var u=n(e),i=c(t),o=c(a),s=n(l);const f=i.forwardRef((({args:e,map:t,toneMapped:a=!1,color:l="white",form:n="rect",intensity:c=1,scale:f=1,target:m,children:p,...d},y)=>{const g=i.useRef(null);return i.useLayoutEffect((()=>{p||d.material||(r.applyProps(g.current.material,{color:l}),g.current.material.color.multiplyScalar(c))}),[l,c,p,d.material]),i.useLayoutEffect((()=>{m&&g.current.lookAt(Array.isArray(m)?new o.Vector3(...m):m)}),[m]),f=Array.isArray(f)&&2===f.length?[f[0],f[1],1]:f,i.createElement("mesh",u.default({ref:s.default([g,y]),scale:f},d),"circle"===n?i.createElement("ringGeometry",{args:[0,1,64]}):"ring"===n?i.createElement("ringGeometry",{args:[.5,1,64]}):"rect"===n?i.createElement("planeGeometry",null):i.createElement(n,{args:e}),p||(d.material?null:i.createElement("meshBasicMaterial",{toneMapped:a,map:t,side:o.DoubleSide})))}));exports.Lightformer=f;
|
package/core/Lightformer.d.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
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.Node<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" | "attachArray" | "attachObject" | "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>>;
|
package/core/Lightformer.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
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/Sampler.cjs.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("three-stdlib"),n=require("three");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 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 i=u(e),l=c(r);exports.Sampler=({children:e,weight:r,transform:u,instances:c,mesh:o,...a})=>{const s=l.useRef(null),d=l.useRef(null),f=l.useRef(null);return l.useEffect((()=>{var e,r;d.current=null!==(e=null==c?void 0:c.current)&&void 0!==e?e:s.current.children.find((e=>e.hasOwnProperty("instanceMatrix"))),f.current=null!==(r=null==o?void 0:o.current)&&void 0!==r?r:s.current.children.find((e=>"Mesh"===e.type))}),[e,null==o?void 0:o.current,null==c?void 0:c.current]),l.useEffect((()=>{if(void 0===f.current)return;if(void 0===d.current)return;const e=new t.MeshSurfaceSampler(f.current);r&&e.setWeightAttribute(r),e.build();const c=new n.Vector3,i=new n.Vector3,l=new n.Color,o=new n.Object3D;f.current.updateMatrixWorld(!0);for(let r=0;r<d.current.count;r++)e.sample(c,i,l),"function"==typeof u?u({dummy:o,sampledMesh:f.current,position:c,normal:i,color:l},r):o.position.copy(c),o.updateMatrix(),d.current.setMatrixAt(r,o.matrix);d.current.instanceMatrix.needsUpdate=!0}),[e,null==o?void 0:o.current,null==c?void 0:c.current]),l.createElement("group",i.default({ref:s},a),e)};
|
package/core/Sampler.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { Color, InstancedMesh, Mesh, Object3D, Vector3 } from 'three';
|
|
3
|
-
import { GroupProps } from '@react-three/fiber';
|
|
4
|
-
declare type SamplePayload = {
|
|
5
|
-
position: Vector3;
|
|
6
|
-
normal: Vector3;
|
|
7
|
-
color: Color;
|
|
8
|
-
};
|
|
9
|
-
export declare type TransformFn = (payload: TransformPayload, i: number) => void;
|
|
10
|
-
declare type TransformPayload = SamplePayload & {
|
|
11
|
-
dummy: Object3D;
|
|
12
|
-
sampledMesh: Mesh;
|
|
13
|
-
};
|
|
14
|
-
declare type Props = {
|
|
15
|
-
mesh?: React.RefObject<Mesh>;
|
|
16
|
-
instances?: React.RefObject<InstancedMesh>;
|
|
17
|
-
weight?: string;
|
|
18
|
-
transform?: TransformFn;
|
|
19
|
-
};
|
|
20
|
-
export declare const Sampler: ({ children, weight, transform, instances, mesh, ...props }: React.PropsWithChildren<Props & GroupProps>) => JSX.Element;
|
|
21
|
-
export {};
|
package/core/Sampler.js
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { MeshSurfaceSampler } from 'three-stdlib';
|
|
4
|
-
import { Vector3, Color, Object3D } from 'three';
|
|
5
|
-
|
|
6
|
-
const Sampler = ({
|
|
7
|
-
children,
|
|
8
|
-
weight,
|
|
9
|
-
transform,
|
|
10
|
-
instances,
|
|
11
|
-
mesh,
|
|
12
|
-
...props
|
|
13
|
-
}) => {
|
|
14
|
-
const group = React.useRef(null);
|
|
15
|
-
const instancedRef = React.useRef(null);
|
|
16
|
-
const meshToSampleRef = React.useRef(null);
|
|
17
|
-
React.useEffect(() => {
|
|
18
|
-
var _instances$current, _mesh$current;
|
|
19
|
-
|
|
20
|
-
instancedRef.current = (_instances$current = instances == null ? void 0 : instances.current) !== null && _instances$current !== void 0 ? _instances$current : group.current.children.find(c => c.hasOwnProperty('instanceMatrix'));
|
|
21
|
-
meshToSampleRef.current = (_mesh$current = mesh == null ? void 0 : mesh.current) !== null && _mesh$current !== void 0 ? _mesh$current : group.current.children.find(c => c.type === 'Mesh');
|
|
22
|
-
}, [children, mesh == null ? void 0 : mesh.current, instances == null ? void 0 : instances.current]);
|
|
23
|
-
React.useEffect(() => {
|
|
24
|
-
if (typeof meshToSampleRef.current === 'undefined') return;
|
|
25
|
-
if (typeof instancedRef.current === 'undefined') return;
|
|
26
|
-
const sampler = new MeshSurfaceSampler(meshToSampleRef.current);
|
|
27
|
-
|
|
28
|
-
if (weight) {
|
|
29
|
-
sampler.setWeightAttribute(weight);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
sampler.build();
|
|
33
|
-
const position = new Vector3();
|
|
34
|
-
const normal = new Vector3();
|
|
35
|
-
const color = new Color();
|
|
36
|
-
const dummy = new Object3D();
|
|
37
|
-
meshToSampleRef.current.updateMatrixWorld(true);
|
|
38
|
-
|
|
39
|
-
for (let i = 0; i < instancedRef.current.count; i++) {
|
|
40
|
-
sampler.sample(position, normal, color);
|
|
41
|
-
|
|
42
|
-
if (typeof transform === 'function') {
|
|
43
|
-
transform({
|
|
44
|
-
dummy,
|
|
45
|
-
sampledMesh: meshToSampleRef.current,
|
|
46
|
-
position,
|
|
47
|
-
normal,
|
|
48
|
-
color
|
|
49
|
-
}, i);
|
|
50
|
-
} else {
|
|
51
|
-
dummy.position.copy(position);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
dummy.updateMatrix();
|
|
55
|
-
instancedRef.current.setMatrixAt(i, dummy.matrix);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
instancedRef.current.instanceMatrix.needsUpdate = true;
|
|
59
|
-
}, [children, mesh == null ? void 0 : mesh.current, instances == null ? void 0 : instances.current]);
|
|
60
|
-
return /*#__PURE__*/React.createElement("group", _extends({
|
|
61
|
-
ref: group
|
|
62
|
-
}, props), children);
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
export { Sampler };
|
package/core/Trail.cjs.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@react-three/fiber"),t=require("react"),r=require("three"),n=require("meshline");function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var i=o(t);const s={width:.2,length:1,decay:1,local:!1,stride:0,interval:1},u=(e,t=1)=>(e.set(e.subarray(t)),e.fill(-1/0,-t),e);function c(t,n){const{length:o,local:c,decay:l,interval:a,stride:f}={...s,...n},d=i.useRef(),[h]=i.useState((()=>new r.Vector3));i.useLayoutEffect((()=>{t&&(d.current=Float32Array.from({length:10*o*3},((e,r)=>t.position.getComponent(r%3))))}),[o,t]);const p=i.useRef(new r.Vector3),y=i.useRef(0);return e.useFrame((()=>{if(t&&d.current){if(0===y.current){let e;c?e=t.position:(t.getWorldPosition(h),e=h);const r=1*l;for(let t=0;t<r;t++)e.distanceTo(p.current)<f||(u(d.current,3),d.current.set(e.toArray(),d.current.length-3));p.current.copy(e)}y.current++,y.current=y.current%a}})),d}const l=i.forwardRef(((t,o)=>{const{children:u}=t,{width:l,length:a,decay:f,local:d,stride:h,interval:p}={...s,...t},{color:y="hotpink",attenuation:g,target:m}=t,v=e.useThree((e=>e.size)),b=i.useRef(null),[w,M]=i.useState(null),j=c(w,{length:a,decay:f,local:d,stride:h,interval:p});i.useEffect((()=>{const e=(null==m?void 0:m.current)||b.current.children.find((e=>e instanceof r.Object3D));e&&M(e)}),[j,m]);const O=i.useMemo((()=>new n.MeshLine),[]),E=i.useMemo((()=>{var e;const t=new n.MeshLineMaterial({lineWidth:.1*l,color:y,sizeAttenuation:1,resolution:new r.Vector2(v.width,v.height)});let o;if(u)if(Array.isArray(u))o=u.find((e=>{const t=e;return"string"==typeof t.type&&"meshLineMaterial"===t.type}));else{const e=u;"string"==typeof e.type&&"meshLineMaterial"===e.type&&(o=e)}return"object"==typeof(null==(e=o)?void 0:e.props)&&t.setValues(o.props),t}),[l,y,v,u]);return i.useEffect((()=>{E.uniforms.resolution.value.set(v.width,v.height)}),[v]),e.useFrame((()=>{j.current&&O.setPoints(j.current,g)})),i.createElement("group",null,i.createElement("mesh",{ref:o,geometry:O,material:E}),i.createElement("group",{ref:b},u))}));exports.Trail=l,exports.useTrail=c;
|
package/core/Trail.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { ColorRepresentation, Object3D } from 'three';
|
|
3
|
-
import { MeshLine } from 'meshline';
|
|
4
|
-
declare type Settings = {
|
|
5
|
-
width: number;
|
|
6
|
-
length: number;
|
|
7
|
-
decay: number;
|
|
8
|
-
local: boolean;
|
|
9
|
-
stride: number;
|
|
10
|
-
interval: number;
|
|
11
|
-
};
|
|
12
|
-
export declare function useTrail(target: Object3D, settings: Partial<Settings>): React.MutableRefObject<Float32Array | undefined>;
|
|
13
|
-
export declare const Trail: React.ForwardRefExoticComponent<{
|
|
14
|
-
color?: ColorRepresentation | undefined;
|
|
15
|
-
attenuation?: ((width: number) => number) | undefined;
|
|
16
|
-
target?: React.MutableRefObject<Object3D<import("three").Event>> | undefined;
|
|
17
|
-
} & Partial<Settings> & {
|
|
18
|
-
children?: React.ReactNode;
|
|
19
|
-
} & React.RefAttributes<MeshLine>>;
|
|
20
|
-
export {};
|
package/core/Trail.js
DELETED
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
import { useFrame, useThree } from '@react-three/fiber';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { Vector3, Object3D, Vector2 } from 'three';
|
|
4
|
-
import { MeshLine, MeshLineMaterial } from 'meshline';
|
|
5
|
-
|
|
6
|
-
const defaults = {
|
|
7
|
-
width: 0.2,
|
|
8
|
-
length: 1,
|
|
9
|
-
decay: 1,
|
|
10
|
-
local: false,
|
|
11
|
-
stride: 0,
|
|
12
|
-
interval: 1
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
const shiftLeft = (collection, steps = 1) => {
|
|
16
|
-
collection.set(collection.subarray(steps));
|
|
17
|
-
collection.fill(-Infinity, -steps);
|
|
18
|
-
return collection;
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
function useTrail(target, settings) {
|
|
22
|
-
const {
|
|
23
|
-
length,
|
|
24
|
-
local,
|
|
25
|
-
decay,
|
|
26
|
-
interval,
|
|
27
|
-
stride
|
|
28
|
-
} = { ...defaults,
|
|
29
|
-
...settings
|
|
30
|
-
};
|
|
31
|
-
const points = React.useRef();
|
|
32
|
-
const [worldPosition] = React.useState(() => new Vector3());
|
|
33
|
-
React.useLayoutEffect(() => {
|
|
34
|
-
if (target) {
|
|
35
|
-
points.current = Float32Array.from({
|
|
36
|
-
length: length * 10 * 3
|
|
37
|
-
}, (_, i) => target.position.getComponent(i % 3));
|
|
38
|
-
}
|
|
39
|
-
}, [length, target]);
|
|
40
|
-
const prevPosition = React.useRef(new Vector3());
|
|
41
|
-
const frameCount = React.useRef(0);
|
|
42
|
-
useFrame(() => {
|
|
43
|
-
if (!target) return;
|
|
44
|
-
if (!points.current) return;
|
|
45
|
-
|
|
46
|
-
if (frameCount.current === 0) {
|
|
47
|
-
let newPosition;
|
|
48
|
-
|
|
49
|
-
if (local) {
|
|
50
|
-
newPosition = target.position;
|
|
51
|
-
} else {
|
|
52
|
-
target.getWorldPosition(worldPosition);
|
|
53
|
-
newPosition = worldPosition;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const steps = 1 * decay;
|
|
57
|
-
|
|
58
|
-
for (let i = 0; i < steps; i++) {
|
|
59
|
-
if (newPosition.distanceTo(prevPosition.current) < stride) continue;
|
|
60
|
-
shiftLeft(points.current, 3);
|
|
61
|
-
points.current.set(newPosition.toArray(), points.current.length - 3);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
prevPosition.current.copy(newPosition);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
frameCount.current++;
|
|
68
|
-
frameCount.current = frameCount.current % interval;
|
|
69
|
-
});
|
|
70
|
-
return points;
|
|
71
|
-
}
|
|
72
|
-
const Trail = /*#__PURE__*/React.forwardRef((props, forwardRef) => {
|
|
73
|
-
const {
|
|
74
|
-
children
|
|
75
|
-
} = props;
|
|
76
|
-
const {
|
|
77
|
-
width,
|
|
78
|
-
length,
|
|
79
|
-
decay,
|
|
80
|
-
local,
|
|
81
|
-
stride,
|
|
82
|
-
interval
|
|
83
|
-
} = { ...defaults,
|
|
84
|
-
...props
|
|
85
|
-
};
|
|
86
|
-
const {
|
|
87
|
-
color = 'hotpink',
|
|
88
|
-
attenuation,
|
|
89
|
-
target
|
|
90
|
-
} = props;
|
|
91
|
-
const size = useThree(s => s.size);
|
|
92
|
-
const ref = React.useRef(null);
|
|
93
|
-
const [anchor, setAnchor] = React.useState(null);
|
|
94
|
-
const points = useTrail(anchor, {
|
|
95
|
-
length,
|
|
96
|
-
decay,
|
|
97
|
-
local,
|
|
98
|
-
stride,
|
|
99
|
-
interval
|
|
100
|
-
});
|
|
101
|
-
React.useEffect(() => {
|
|
102
|
-
const t = (target == null ? void 0 : target.current) || ref.current.children.find(o => {
|
|
103
|
-
return o instanceof Object3D;
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
if (t) {
|
|
107
|
-
setAnchor(t);
|
|
108
|
-
}
|
|
109
|
-
}, [points, target]);
|
|
110
|
-
const geo = React.useMemo(() => new MeshLine(), []);
|
|
111
|
-
const mat = React.useMemo(() => {
|
|
112
|
-
var _matOverride;
|
|
113
|
-
|
|
114
|
-
const m = new MeshLineMaterial({
|
|
115
|
-
lineWidth: 0.1 * width,
|
|
116
|
-
color: color,
|
|
117
|
-
sizeAttenuation: 1,
|
|
118
|
-
resolution: new Vector2(size.width, size.height)
|
|
119
|
-
}); // Get and apply first <meshLineMaterial /> from children
|
|
120
|
-
|
|
121
|
-
let matOverride;
|
|
122
|
-
|
|
123
|
-
if (children) {
|
|
124
|
-
if (Array.isArray(children)) {
|
|
125
|
-
matOverride = children.find(child => {
|
|
126
|
-
const c = child;
|
|
127
|
-
return typeof c.type === 'string' && c.type === 'meshLineMaterial';
|
|
128
|
-
});
|
|
129
|
-
} else {
|
|
130
|
-
const c = children;
|
|
131
|
-
|
|
132
|
-
if (typeof c.type === 'string' && c.type === 'meshLineMaterial') {
|
|
133
|
-
matOverride = c;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
if (typeof ((_matOverride = matOverride) == null ? void 0 : _matOverride.props) === 'object') {
|
|
139
|
-
m.setValues(matOverride.props);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
return m;
|
|
143
|
-
}, [width, color, size, children]);
|
|
144
|
-
React.useEffect(() => {
|
|
145
|
-
mat.uniforms.resolution.value.set(size.width, size.height);
|
|
146
|
-
}, [size]);
|
|
147
|
-
useFrame(() => {
|
|
148
|
-
if (!points.current) return;
|
|
149
|
-
geo.setPoints(points.current, attenuation);
|
|
150
|
-
});
|
|
151
|
-
return /*#__PURE__*/React.createElement("group", null, /*#__PURE__*/React.createElement("mesh", {
|
|
152
|
-
ref: forwardRef,
|
|
153
|
-
geometry: geo,
|
|
154
|
-
material: mat
|
|
155
|
-
}), /*#__PURE__*/React.createElement("group", {
|
|
156
|
-
ref: ref
|
|
157
|
-
}, children));
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
export { Trail, useTrail };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),r=require("react"),n=require("@react-three/fiber");function i(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var i=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,i.get?i:{enumerable:!0,get:function(){return e[n]}})}})),r.default=e,Object.freeze(r)}var o=i(e),t=i(r);exports.useBoxProjectedEnv=function(e=new o.Vector3,r=new o.Vector3){const[i]=t.useState((()=>({position:new o.Vector3,size:new o.Vector3})));n.applyProps(i,{position:e,size:r});const a=t.useRef(null),c=t.useMemo((()=>({ref:a,onBeforeCompile:e=>function(e,r,n){e.defines.BOX_PROJECTED_ENV_MAP=!0,e.uniforms.envMapPosition={value:r},e.uniforms.envMapSize={value:n},e.vertexShader=`\n varying vec3 vWorldPosition;\n ${e.vertexShader.replace("#include <worldpos_vertex>","\n#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n #ifdef BOX_PROJECTED_ENV_MAP\n vWorldPosition = worldPosition.xyz;\n #endif\n#endif\n")}`,e.fragmentShader=`\n \n#ifdef BOX_PROJECTED_ENV_MAP\n uniform vec3 envMapSize;\n uniform vec3 envMapPosition;\n varying vec3 vWorldPosition;\n \n vec3 parallaxCorrectNormal( vec3 v, vec3 cubeSize, vec3 cubePos ) {\n vec3 nDir = normalize( v );\n vec3 rbmax = ( .5 * cubeSize + cubePos - vWorldPosition ) / nDir;\n vec3 rbmin = ( -.5 * cubeSize + cubePos - vWorldPosition ) / nDir;\n vec3 rbminmax;\n rbminmax.x = ( nDir.x > 0. ) ? rbmax.x : rbmin.x;\n rbminmax.y = ( nDir.y > 0. ) ? rbmax.y : rbmin.y;\n rbminmax.z = ( nDir.z > 0. ) ? rbmax.z : rbmin.z;\n float correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z );\n vec3 boxIntersection = vWorldPosition + nDir * correction; \n return boxIntersection - cubePos;\n }\n#endif\n\n ${e.fragmentShader.replace("#include <envmap_physical_pars_fragment>",o.ShaderChunk.envmap_physical_pars_fragment).replace("vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );","vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n \n#ifdef BOX_PROJECTED_ENV_MAP\n worldNormal = parallaxCorrectNormal( worldNormal, envMapSize, envMapPosition );\n#endif\n\n ").replace("reflectVec = inverseTransformDirection( reflectVec, viewMatrix );","reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n \n#ifdef BOX_PROJECTED_ENV_MAP\n reflectVec = parallaxCorrectNormal( reflectVec, envMapSize, envMapPosition );\n#endif\n\n ")}`}(e,i.position,i.size),customProgramCacheKey:()=>JSON.stringify(i.position.toArray())+JSON.stringify(i.size.toArray())})),[...i.position.toArray(),...i.size.toArray()]);return t.useLayoutEffect((()=>{a.current.needsUpdate=!0}),[i]),c};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { ReactThreeFiber } from '@react-three/fiber';
|
|
4
|
-
export declare function useBoxProjectedEnv(position?: ReactThreeFiber.Vector3, size?: ReactThreeFiber.Vector3): {
|
|
5
|
-
ref: React.MutableRefObject<THREE.Material>;
|
|
6
|
-
onBeforeCompile: (shader: THREE.Shader) => void;
|
|
7
|
-
customProgramCacheKey: () => string;
|
|
8
|
-
};
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { applyProps } from '@react-three/fiber';
|
|
4
|
-
|
|
5
|
-
// and @0beqz https://gist.github.com/0beqz/8d51b4ae16d68021a09fb504af708fca
|
|
6
|
-
|
|
7
|
-
const worldposReplace =
|
|
8
|
-
/* glsl */
|
|
9
|
-
`
|
|
10
|
-
#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )
|
|
11
|
-
vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );
|
|
12
|
-
#ifdef BOX_PROJECTED_ENV_MAP
|
|
13
|
-
vWorldPosition = worldPosition.xyz;
|
|
14
|
-
#endif
|
|
15
|
-
#endif
|
|
16
|
-
`;
|
|
17
|
-
const boxProjectDefinitions =
|
|
18
|
-
/*glsl */
|
|
19
|
-
`
|
|
20
|
-
#ifdef BOX_PROJECTED_ENV_MAP
|
|
21
|
-
uniform vec3 envMapSize;
|
|
22
|
-
uniform vec3 envMapPosition;
|
|
23
|
-
varying vec3 vWorldPosition;
|
|
24
|
-
|
|
25
|
-
vec3 parallaxCorrectNormal( vec3 v, vec3 cubeSize, vec3 cubePos ) {
|
|
26
|
-
vec3 nDir = normalize( v );
|
|
27
|
-
vec3 rbmax = ( .5 * cubeSize + cubePos - vWorldPosition ) / nDir;
|
|
28
|
-
vec3 rbmin = ( -.5 * cubeSize + cubePos - vWorldPosition ) / nDir;
|
|
29
|
-
vec3 rbminmax;
|
|
30
|
-
rbminmax.x = ( nDir.x > 0. ) ? rbmax.x : rbmin.x;
|
|
31
|
-
rbminmax.y = ( nDir.y > 0. ) ? rbmax.y : rbmin.y;
|
|
32
|
-
rbminmax.z = ( nDir.z > 0. ) ? rbmax.z : rbmin.z;
|
|
33
|
-
float correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z );
|
|
34
|
-
vec3 boxIntersection = vWorldPosition + nDir * correction;
|
|
35
|
-
return boxIntersection - cubePos;
|
|
36
|
-
}
|
|
37
|
-
#endif
|
|
38
|
-
`; // will be inserted after "vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );"
|
|
39
|
-
|
|
40
|
-
const getIBLIrradiance_patch =
|
|
41
|
-
/* glsl */
|
|
42
|
-
`
|
|
43
|
-
#ifdef BOX_PROJECTED_ENV_MAP
|
|
44
|
-
worldNormal = parallaxCorrectNormal( worldNormal, envMapSize, envMapPosition );
|
|
45
|
-
#endif
|
|
46
|
-
`; // will be inserted after "reflectVec = inverseTransformDirection( reflectVec, viewMatrix );"
|
|
47
|
-
|
|
48
|
-
const getIBLRadiance_patch =
|
|
49
|
-
/* glsl */
|
|
50
|
-
`
|
|
51
|
-
#ifdef BOX_PROJECTED_ENV_MAP
|
|
52
|
-
reflectVec = parallaxCorrectNormal( reflectVec, envMapSize, envMapPosition );
|
|
53
|
-
#endif
|
|
54
|
-
`;
|
|
55
|
-
|
|
56
|
-
function boxProjectedEnvMap(shader, envMapPosition, envMapSize) {
|
|
57
|
-
shader.defines.BOX_PROJECTED_ENV_MAP = true; // uniforms
|
|
58
|
-
|
|
59
|
-
shader.uniforms.envMapPosition = {
|
|
60
|
-
value: envMapPosition
|
|
61
|
-
};
|
|
62
|
-
shader.uniforms.envMapSize = {
|
|
63
|
-
value: envMapSize
|
|
64
|
-
}; // vertex shader
|
|
65
|
-
|
|
66
|
-
shader.vertexShader = `
|
|
67
|
-
varying vec3 vWorldPosition;
|
|
68
|
-
${shader.vertexShader.replace('#include <worldpos_vertex>', worldposReplace)}`; // fragment shader
|
|
69
|
-
|
|
70
|
-
shader.fragmentShader = `
|
|
71
|
-
${boxProjectDefinitions}
|
|
72
|
-
${shader.fragmentShader.replace('#include <envmap_physical_pars_fragment>', THREE.ShaderChunk.envmap_physical_pars_fragment).replace('vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );', `vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
|
|
73
|
-
${getIBLIrradiance_patch}
|
|
74
|
-
`).replace('reflectVec = inverseTransformDirection( reflectVec, viewMatrix );', `reflectVec = inverseTransformDirection( reflectVec, viewMatrix );
|
|
75
|
-
${getIBLRadiance_patch}
|
|
76
|
-
`)}`;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function useBoxProjectedEnv(position = new THREE.Vector3(), size = new THREE.Vector3()) {
|
|
80
|
-
const [config] = React.useState(() => ({
|
|
81
|
-
position: new THREE.Vector3(),
|
|
82
|
-
size: new THREE.Vector3()
|
|
83
|
-
}));
|
|
84
|
-
applyProps(config, {
|
|
85
|
-
position,
|
|
86
|
-
size
|
|
87
|
-
});
|
|
88
|
-
const ref = React.useRef(null);
|
|
89
|
-
const spread = React.useMemo(() => ({
|
|
90
|
-
ref,
|
|
91
|
-
onBeforeCompile: shader => boxProjectedEnvMap(shader, config.position, config.size),
|
|
92
|
-
customProgramCacheKey: () => JSON.stringify(config.position.toArray()) + JSON.stringify(config.size.toArray())
|
|
93
|
-
}), [...config.position.toArray(), ...config.size.toArray()]);
|
|
94
|
-
React.useLayoutEffect(() => void (ref.current.needsUpdate = true), [config]);
|
|
95
|
-
return spread;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
export { useBoxProjectedEnv };
|