@react-three/drei 9.56.10 → 9.56.12
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 +5 -2
- package/core/RenderTexture.cjs.js +1 -1
- package/core/RenderTexture.d.ts +2 -1
- package/core/RenderTexture.js +3 -2
- package/core/Text3D.cjs.js +1 -1
- package/core/Text3D.d.ts +2 -1
- package/core/Text3D.js +11 -2
- package/index.cjs.js +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -999,10 +999,10 @@ You can align the text using the `<Center>` component.
|
|
|
999
999
|
</Center>
|
|
1000
1000
|
```
|
|
1001
1001
|
|
|
1002
|
-
It adds
|
|
1002
|
+
It adds three properties that do not exist in the original `TextGeometry`, `lineHeight`, `letterSpacing` and smooth. LetterSpacing is a factor that is `1` by default. LineHeight is in threejs units and `0` by default. Smooth merges vertices with a tolerance and calls computeVertexNormals.
|
|
1003
1003
|
|
|
1004
1004
|
```jsx
|
|
1005
|
-
<Text3D lineHeight={0.5} letterSpacing={-0.025}>{`hello\nworld`}</Text3D>
|
|
1005
|
+
<Text3D smooth={1} lineHeight={0.5} letterSpacing={-0.025}>{`hello\nworld`}</Text3D>
|
|
1006
1006
|
```
|
|
1007
1007
|
|
|
1008
1008
|
#### Effects
|
|
@@ -2804,6 +2804,8 @@ This component allows you to render a live scene into a texture which you can th
|
|
|
2804
2804
|
eventPriority?: number
|
|
2805
2805
|
/** Optional frame count, defaults to Infinity. If you set it to 1, it would only render a single frame, etc */
|
|
2806
2806
|
frames?: number
|
|
2807
|
+
/** Optional event compute, defaults to undefined */
|
|
2808
|
+
compute?: (event: any, state: any, previous: any) => false | undefined
|
|
2807
2809
|
/** Children will be rendered into a portal */
|
|
2808
2810
|
children: React.ReactNode
|
|
2809
2811
|
/>
|
|
@@ -3384,6 +3386,7 @@ function Foo() {
|
|
|
3384
3386
|
```
|
|
3385
3387
|
|
|
3386
3388
|
#### SpotLightShadows
|
|
3389
|
+
|
|
3387
3390
|
[](https://drei.pmnd.rs/?path=/story/staging-spotlight--spotlight-shadows-st)
|
|
3388
3391
|
|
|
3389
3392
|
<p>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("three"),t=require("react"),n=require("@react-three/fiber"),a=require("./useFBO.cjs.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(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 c=u(e),s=i(r),o=i(t);const l=o.forwardRef((({children:e,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("three"),t=require("react"),n=require("@react-three/fiber"),a=require("./useFBO.cjs.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(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 c=u(e),s=i(r),o=i(t);const l=o.forwardRef((({children:e,compute:r,width:t,height:u,samples:i=8,renderPriority:l=0,eventPriority:d=0,frames:m=1/0,...p},b)=>{const{size:v,viewport:y}=n.useThree(),g=a.useFBO((t||v.width)*y.dpr,(u||v.height)*y.dpr,{samples:i}),[h]=o.useState((()=>new s.Scene)),j=o.useCallback(((e,r,t)=>{var n,a;let u=null==(n=g.texture)?void 0:n.__r3f.parent;for(;u&&!(u instanceof s.Object3D);)u=u.__r3f.parent;if(!u)return!1;t.raycaster.camera||t.events.compute(e,t,null==(a=t.previousRoot)?void 0:a.getState());const[i]=t.raycaster.intersectObject(u);if(!i)return!1;const c=i.uv;if(!c)return!1;r.raycaster.setFromCamera(r.pointer.set(2*c.x-1,2*c.y-1),r.camera)}),[]);return o.useImperativeHandle(b,(()=>g.texture),[g]),o.createElement(o.Fragment,null,n.createPortal(o.createElement(f,{renderPriority:l,frames:m,fbo:g},e),h,{events:{compute:r||j,priority:d}}),o.createElement("primitive",c.default({object:g.texture},p)))}));function f({frames:e,renderPriority:r,children:t,fbo:a}){let u=0;return n.useFrame((r=>{(e===1/0||u<e)&&(r.gl.setRenderTarget(a),r.gl.render(r.scene,r.camera),r.gl.setRenderTarget(null),u++)}),r),o.createElement(o.Fragment,null,t)}exports.RenderTexture=l;
|
package/core/RenderTexture.d.ts
CHANGED
|
@@ -7,5 +7,6 @@ export declare const RenderTexture: React.ForwardRefExoticComponent<Pick<import(
|
|
|
7
7
|
renderPriority?: number | undefined;
|
|
8
8
|
eventPriority?: number | undefined;
|
|
9
9
|
frames?: number | undefined;
|
|
10
|
+
compute?: ((event: any, state: any, previous: any) => false | undefined) | undefined;
|
|
10
11
|
children: React.ReactNode;
|
|
11
|
-
}, "attach" | "args" | "children" | "key" | "onUpdate" | "rotation" | "matrix" | "dispose" | "type" | "id" | "uuid" | "name" | "matrixAutoUpdate" | "userData" | "updateMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "center" | "source" | "repeat" | "image" | "needsUpdate" | "version" | "offset" | "width" | "height" | "sourceFile" | "mipmaps" | "mapping" | "wrapS" | "wrapT" | "magFilter" | "minFilter" | "anisotropy" | "format" | "internalFormat" | "generateMipmaps" | "premultiplyAlpha" | "flipY" | "unpackAlignment" | "encoding" | "isRenderTargetTexture" | "needsPMREMUpdate" | "isTexture" | "transformUv" | "samples" | "frames" | "renderPriority" | "eventPriority"> & React.RefAttributes<unknown>>;
|
|
12
|
+
}, "attach" | "args" | "children" | "key" | "onUpdate" | "rotation" | "matrix" | "dispose" | "type" | "id" | "uuid" | "name" | "matrixAutoUpdate" | "userData" | "updateMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "center" | "source" | "repeat" | "image" | "needsUpdate" | "version" | "offset" | "width" | "height" | "sourceFile" | "mipmaps" | "mapping" | "wrapS" | "wrapT" | "magFilter" | "minFilter" | "anisotropy" | "format" | "internalFormat" | "generateMipmaps" | "premultiplyAlpha" | "flipY" | "unpackAlignment" | "encoding" | "isRenderTargetTexture" | "needsPMREMUpdate" | "isTexture" | "transformUv" | "compute" | "samples" | "frames" | "renderPriority" | "eventPriority"> & React.RefAttributes<unknown>>;
|
package/core/RenderTexture.js
CHANGED
|
@@ -6,6 +6,7 @@ import { useFBO } from './useFBO.js';
|
|
|
6
6
|
|
|
7
7
|
const RenderTexture = /*#__PURE__*/React.forwardRef(({
|
|
8
8
|
children,
|
|
9
|
+
compute,
|
|
9
10
|
width,
|
|
10
11
|
height,
|
|
11
12
|
samples = 8,
|
|
@@ -22,7 +23,7 @@ const RenderTexture = /*#__PURE__*/React.forwardRef(({
|
|
|
22
23
|
samples
|
|
23
24
|
});
|
|
24
25
|
const [vScene] = React.useState(() => new THREE.Scene());
|
|
25
|
-
const
|
|
26
|
+
const uvCompute = React.useCallback((event, state, previous) => {
|
|
26
27
|
var _fbo$texture, _previous$previousRoo;
|
|
27
28
|
|
|
28
29
|
// Since this is only a texture it does not have an easy way to obtain the parent, which we
|
|
@@ -52,7 +53,7 @@ const RenderTexture = /*#__PURE__*/React.forwardRef(({
|
|
|
52
53
|
fbo: fbo
|
|
53
54
|
}, children), vScene, {
|
|
54
55
|
events: {
|
|
55
|
-
compute,
|
|
56
|
+
compute: compute || uvCompute,
|
|
56
57
|
priority: eventPriority
|
|
57
58
|
}
|
|
58
59
|
}), /*#__PURE__*/React.createElement("primitive", _extends({
|
package/core/Text3D.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("@react-three/fiber"),n=require("suspend-react"),s=require("three-stdlib");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("@react-three/fiber"),n=require("suspend-react"),s=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),c=i(t);const l=["string","number"],a=c.forwardRef((({font:e,letterSpacing:u=0,lineHeight:i=1,size:a=1,height:f=.2,bevelThickness:m=.1,bevelSize:b=.01,bevelEnabled:d=!1,bevelOffset:g=0,bevelSegments:h=4,curveSegments:p=8,smooth:v,children:y,...x},O)=>{c.useMemo((()=>r.extend({RenamedTextGeometry:s.TextGeometry})),[]);const j=c.useRef(null),S=n.suspend((async()=>{let t="string"==typeof e?await(await fetch(e)).json():e;return(new s.FontLoader).parse(t)}),[e]),E=t.useMemo((()=>({font:S,size:a,height:f,bevelThickness:m,bevelSize:b,bevelEnabled:d,bevelSegments:h,bevelOffset:g,curveSegments:p,letterSpacing:u,lineHeight:i})),[S,a,f,m,b,d,h,g,p,u,i]),[M,...T]=t.useMemo((()=>(e=>{let t="";const r=[];return c.Children.forEach(e,(e=>{l.includes(typeof e)?t+=e+"":r.push(e)})),[t,...r]})(y)),[y]),q=c.useMemo((()=>[M,E]),[M,E]);return c.useLayoutEffect((()=>{v&&(j.current.geometry=s.mergeVertices(j.current.geometry,v),j.current.geometry.computeVertexNormals())}),[q,v]),c.useImperativeHandle(O,(()=>j.current),[]),c.createElement("mesh",o.default({},x,{ref:j}),c.createElement("renamedTextGeometry",{args:q}),T)}));exports.Text3D=a;
|
package/core/Text3D.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ declare type FontData = {
|
|
|
29
29
|
export declare const Text3D: React.ForwardRefExoticComponent<Pick<React.PropsWithChildren<{
|
|
30
30
|
font: FontData | string;
|
|
31
31
|
bevelSegments?: number | undefined;
|
|
32
|
+
smooth?: number | undefined;
|
|
32
33
|
} & Omit<TextGeometryParameters, "font"> & Omit<import("@react-three/fiber").ExtendedColors<import("@react-three/fiber").Overwrite<Partial<THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>, import("@react-three/fiber").NodeProps<THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>, typeof THREE.Mesh>>>, import("@react-three/fiber").NonFunctionKeys<{
|
|
33
34
|
position?: import("@react-three/fiber").Vector3 | undefined;
|
|
34
35
|
up?: import("@react-three/fiber").Vector3 | undefined;
|
|
@@ -50,5 +51,5 @@ export declare const Text3D: React.ForwardRefExoticComponent<Pick<React.PropsWit
|
|
|
50
51
|
} & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
|
|
51
52
|
letterSpacing?: number | undefined;
|
|
52
53
|
lineHeight?: number | undefined;
|
|
53
|
-
}>, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "material" | "geometry" | "size" | "font" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "height" | "letterSpacing" | "lineHeight" | "bevelEnabled" | "bevelOffset" | "bevelSize" | "bevelThickness" | "curveSegments" | "bevelSegments"> & React.RefAttributes<THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>>;
|
|
54
|
+
}>, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "material" | "geometry" | "size" | "font" | "smooth" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "height" | "letterSpacing" | "lineHeight" | "bevelEnabled" | "bevelOffset" | "bevelSize" | "bevelThickness" | "curveSegments" | "bevelSegments"> & React.RefAttributes<THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>>;
|
|
54
55
|
export {};
|
package/core/Text3D.js
CHANGED
|
@@ -3,7 +3,7 @@ import * as React from 'react';
|
|
|
3
3
|
import { useMemo } from 'react';
|
|
4
4
|
import { extend } from '@react-three/fiber';
|
|
5
5
|
import { suspend } from 'suspend-react';
|
|
6
|
-
import { TextGeometry, FontLoader } from 'three-stdlib';
|
|
6
|
+
import { TextGeometry, FontLoader, mergeVertices } from 'three-stdlib';
|
|
7
7
|
|
|
8
8
|
const types = ['string', 'number'];
|
|
9
9
|
|
|
@@ -28,12 +28,14 @@ const Text3D = /*#__PURE__*/React.forwardRef(({
|
|
|
28
28
|
bevelOffset = 0,
|
|
29
29
|
bevelSegments = 4,
|
|
30
30
|
curveSegments = 8,
|
|
31
|
+
smooth,
|
|
31
32
|
children,
|
|
32
33
|
...props
|
|
33
|
-
},
|
|
34
|
+
}, fref) => {
|
|
34
35
|
React.useMemo(() => extend({
|
|
35
36
|
RenamedTextGeometry: TextGeometry
|
|
36
37
|
}), []);
|
|
38
|
+
const ref = React.useRef(null);
|
|
37
39
|
const font = suspend(async () => {
|
|
38
40
|
let data = typeof _font === 'string' ? await (await fetch(_font)).json() : _font;
|
|
39
41
|
let loader = new FontLoader();
|
|
@@ -61,6 +63,13 @@ const Text3D = /*#__PURE__*/React.forwardRef(({
|
|
|
61
63
|
|
|
62
64
|
const [label, ...rest] = useMemo(() => getTextFromChildren(children), [children]);
|
|
63
65
|
const args = React.useMemo(() => [label, opts], [label, opts]);
|
|
66
|
+
React.useLayoutEffect(() => {
|
|
67
|
+
if (smooth) {
|
|
68
|
+
ref.current.geometry = mergeVertices(ref.current.geometry, smooth);
|
|
69
|
+
ref.current.geometry.computeVertexNormals();
|
|
70
|
+
}
|
|
71
|
+
}, [args, smooth]);
|
|
72
|
+
React.useImperativeHandle(fref, () => ref.current, []);
|
|
64
73
|
return /*#__PURE__*/React.createElement("mesh", _extends({}, props, {
|
|
65
74
|
ref: ref
|
|
66
75
|
}), /*#__PURE__*/React.createElement("renamedTextGeometry", {
|