@react-three/drei 9.7.2 → 9.8.2
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 +31 -0
- package/core/Effects.cjs.js +1 -1
- package/core/Effects.d.ts +4 -1
- package/core/Effects.js +7 -1
- package/core/SpotLight.d.ts +1 -1
- package/core/Text3D.cjs.js +1 -0
- package/core/Text3D.d.ts +33 -0
- package/core/Text3D.js +98 -0
- package/core/index.cjs.js +1 -1
- package/core/index.d.ts +1 -0
- package/core/index.js +1 -0
- package/core/useMatcapTexture.cjs.js +1 -1
- package/core/useMatcapTexture.d.ts +2 -1
- package/core/useMatcapTexture.js +2 -2
- package/core/useNormalTexture.cjs.js +1 -1
- package/core/useNormalTexture.d.ts +1 -1
- package/core/useNormalTexture.js +2 -2
- package/core/useTexture.cjs.js +1 -1
- package/core/useTexture.d.ts +1 -1
- package/core/useTexture.js +6 -3
- package/index.cjs.js +1 -1
- package/index.js +1 -0
- package/native/index.cjs.js +1 -1
- package/native/index.js +1 -0
- package/package.json +1 -1
- package/web/index.cjs.js +1 -1
- package/web/index.js +1 -0
package/README.md
CHANGED
|
@@ -56,6 +56,7 @@ The `native` route of the library **does not** export `Html` or `Loader`. The de
|
|
|
56
56
|
<ul>
|
|
57
57
|
<li><a href="#image">Image</a></li>
|
|
58
58
|
<li><a href="#text">Text</a></li>
|
|
59
|
+
<li><a href="#text3d">Text3D</a></li>
|
|
59
60
|
<li><a href="#line">Line</a></li>
|
|
60
61
|
<li><a href="#quadraticbezierline">QuadraticBezierLine</a></li>
|
|
61
62
|
<li><a href="#cubicbezierline">CubicBezierLine</a></li>
|
|
@@ -471,6 +472,23 @@ Text will suspend while loading the font data, but in order to completely avoid
|
|
|
471
472
|
</Text>
|
|
472
473
|
```
|
|
473
474
|
|
|
475
|
+
#### Text3D
|
|
476
|
+
|
|
477
|
+
[](https://drei.vercel.app/?path=/story/abstractions-text3d--text-3-d-st) 
|
|
478
|
+
|
|
479
|
+
Render 3D text using ThreeJS's `TextGeometry`.
|
|
480
|
+
|
|
481
|
+
Text3D will suspend while loading the font data, you can also load the font yourself before passing it in. Text3D requires fonts in JSON format generated through (typeface.json)[http://gero3.github.io/facetype.js/] either as a path to a JSON files or a JSON object.
|
|
482
|
+
|
|
483
|
+
```jsx
|
|
484
|
+
<Text3D font={fontUrl} {...textOptions}>
|
|
485
|
+
Hello world!
|
|
486
|
+
<meshNormalMaterial />
|
|
487
|
+
</Text3D>
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
You can use any material. `textOptions` are options you'd pass to the `TextGeometry` constructor. Find more information about available options [here](https://threejs.org/docs/index.html?q=textg#examples/en/geometries/TextGeometry).
|
|
491
|
+
|
|
474
492
|
#### Line
|
|
475
493
|
|
|
476
494
|
[](https://drei.vercel.app/?path=/story/abstractions-line--basic-line)
|
|
@@ -1469,6 +1487,19 @@ const props = useTexture({
|
|
|
1469
1487
|
return <meshStandardMaterial {...props} />
|
|
1470
1488
|
```
|
|
1471
1489
|
|
|
1490
|
+
Use the `onLoad` callback to set propeties on loaded textures.
|
|
1491
|
+
|
|
1492
|
+
```jsx
|
|
1493
|
+
const texture = useTexture(url, (texture) => {
|
|
1494
|
+
texture.wrapS = texture.wrapT = THREE.RepeatWrapping
|
|
1495
|
+
})
|
|
1496
|
+
|
|
1497
|
+
const [texture1, texture2] = useTexture([texture1, texture2], ([texture1, texture2]) => {
|
|
1498
|
+
texture1.wrapS = texture1.wrapT = THREE.RepeatWrapping
|
|
1499
|
+
texture2.wrapS = texture2.wrapT = THREE.RepeatWrapping
|
|
1500
|
+
})
|
|
1501
|
+
```
|
|
1502
|
+
|
|
1472
1503
|
#### useKTX2
|
|
1473
1504
|
|
|
1474
1505
|
[](https://drei.pmnd.rs/?path=/story/loaders-ktx2--use-ktx-2-scene-st)
|
package/core/Effects.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("three"),a=require("@react-three/fiber"),n=require("three-stdlib"),s=require("react-merge-refs");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("three"),a=require("@react-three/fiber"),n=require("three-stdlib"),s=require("react-merge-refs");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var a=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,a.get?a:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var o=u(e),i=c(r),l=u(s);const d=i.forwardRef((({children:e,multisamping:r=8,renderIndex:s=1,disableRender:u,disableGamma:c,disableRenderPass:d,depthBuffer:f=!0,stencilBuffer:p=!1,anisotropy:h=1,encoding:m,type:g,...b},y)=>{i.useMemo((()=>a.extend({EffectComposer:n.EffectComposer,RenderPass:n.RenderPass,ShaderPass:n.ShaderPass})),[]);const E=i.useRef(),{scene:v,camera:P,gl:R,size:w,viewport:x}=a.useThree(),[j]=i.useState((()=>{const e=new t.WebGLRenderTarget(w.width,w.height,{type:g||t.HalfFloatType,format:t.RGBAFormat,encoding:m||R.outputEncoding,depthBuffer:f,stencilBuffer:p,anisotropy:h});return e.samples=r,e}));i.useEffect((()=>{var e,r;null==(e=E.current)||e.setSize(w.width,w.height),null==(r=E.current)||r.setPixelRatio(x.dpr)}),[R,w,x.dpr]),a.useFrame((()=>{var e;u||null==(e=E.current)||e.render()}),s);const C=[];return d||C.push(i.createElement("renderPass",{key:"renderpass",attach:`passes-${C.length}`,args:[v,P]})),c||C.push(i.createElement("shaderPass",{attach:`passes-${C.length}`,key:"gammapass",args:[n.GammaCorrectionShader]})),i.Children.forEach(e,(e=>C.push(i.cloneElement(e,{key:C.length,attach:`passes-${C.length}`})))),i.createElement("effectComposer",o.default({ref:l.default([y,E]),args:[R,j]},b),C)}));exports.Effects=d,exports.isWebGL2Available=()=>{try{var e=document.createElement("canvas");return!(!window.WebGL2RenderingContext||!e.getContext("webgl2"))}catch(e){return!1}};
|
package/core/Effects.d.ts
CHANGED
|
@@ -20,4 +20,7 @@ export declare const Effects: React.ForwardRefExoticComponent<Pick<ReactThreeFib
|
|
|
20
20
|
disableGamma?: boolean | undefined;
|
|
21
21
|
disableRenderPass?: boolean | undefined;
|
|
22
22
|
disableRender?: boolean | undefined;
|
|
23
|
-
|
|
23
|
+
depthBuffer?: boolean | undefined;
|
|
24
|
+
stencilBuffer?: boolean | undefined;
|
|
25
|
+
anisotropy?: number | undefined;
|
|
26
|
+
}, "attach" | "args" | "children" | "key" | "onUpdate" | "type" | keyof EffectComposer<WebGLRenderTarget> | "multisamping" | "renderIndex" | "disableRender" | "disableGamma" | "disableRenderPass" | "depthBuffer" | "stencilBuffer" | "anisotropy" | "encoding"> & React.RefAttributes<unknown>>;
|
package/core/Effects.js
CHANGED
|
@@ -20,6 +20,9 @@ const Effects = /*#__PURE__*/React.forwardRef(({
|
|
|
20
20
|
disableRender,
|
|
21
21
|
disableGamma,
|
|
22
22
|
disableRenderPass,
|
|
23
|
+
depthBuffer = true,
|
|
24
|
+
stencilBuffer = false,
|
|
25
|
+
anisotropy = 1,
|
|
23
26
|
encoding,
|
|
24
27
|
type,
|
|
25
28
|
...props
|
|
@@ -41,7 +44,10 @@ const Effects = /*#__PURE__*/React.forwardRef(({
|
|
|
41
44
|
const t = new WebGLRenderTarget(size.width, size.height, {
|
|
42
45
|
type: type || HalfFloatType,
|
|
43
46
|
format: RGBAFormat,
|
|
44
|
-
encoding: encoding || gl.outputEncoding
|
|
47
|
+
encoding: encoding || gl.outputEncoding,
|
|
48
|
+
depthBuffer,
|
|
49
|
+
stencilBuffer,
|
|
50
|
+
anisotropy
|
|
45
51
|
});
|
|
46
52
|
t.samples = multisamping;
|
|
47
53
|
return t;
|
package/core/SpotLight.d.ts
CHANGED
|
@@ -26,5 +26,5 @@ declare const SpotLight: React.ForwardRefExoticComponent<Pick<Omit<import("@reac
|
|
|
26
26
|
radiusBottom?: number | undefined;
|
|
27
27
|
opacity?: number | undefined;
|
|
28
28
|
color?: string | number | undefined;
|
|
29
|
-
}, "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 | "distance" | "opacity" | "decay" | "target" | "angle" | "attenuation" | "penumbra" | "intensity" | "isLight" | "shadow" | "shadowCameraFov" | "shadowCameraLeft" | "shadowCameraRight" | "shadowCameraTop" | "shadowCameraBottom" | "shadowCameraNear" | "shadowCameraFar" | "shadowBias" | "shadowMapWidth" | "shadowMapHeight" | "power" | "
|
|
29
|
+
}, "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 | "distance" | "opacity" | "decay" | "target" | "angle" | "depthBuffer" | "attenuation" | "penumbra" | "intensity" | "isLight" | "shadow" | "shadowCameraFov" | "shadowCameraLeft" | "shadowCameraRight" | "shadowCameraTop" | "shadowCameraBottom" | "shadowCameraNear" | "shadowCameraFar" | "shadowBias" | "shadowMapWidth" | "shadowMapHeight" | "power" | "isSpotLight" | "anglePower" | "radiusTop" | "radiusBottom"> & React.RefAttributes<SpotLightImpl>>;
|
|
30
30
|
export { SpotLight };
|
|
@@ -0,0 +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"),a=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function u(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),f=u(t);const l=["string","number"],c=f.forwardRef((({font:e,loader:n,size:o=1,height:u=.2,bevelThickness:c=.1,bevelSize:i=.01,bevelEnabled:d=!1,bevelOffset:b=0,curveSegments:m=8,children:v,...h},p)=>{f.useMemo((()=>{r.extend({RenamedTextGeometry:a.TextGeometry})}),[]);const y=f.useMemo((()=>n.parse(e)),[e]),g=t.useMemo((()=>({font:y,size:o,height:u,bevelThickness:c,bevelSize:i,bevelEnabled:d,bevelOffset:b,curveSegments:m})),[y,o,u,c,i,d,b,m]),O=t.useMemo((()=>(e=>{let t="";return f.Children.map(e,(e=>{l.includes(typeof e)&&(t+=e+"")})),t})(v)),[v]),j=f.useMemo((()=>[O,g]),[O,g]);return f.createElement("mesh",s.default({},h,{ref:p}),f.createElement("renamedTextGeometry",{args:j}),v)})),i=f.forwardRef((({font:e,loader:t,...r},a)=>{const o=n.suspend((async()=>await(await fetch(e)).json()),[e]);return f.createElement(c,s.default({},r,{ref:a,font:o,loader:t}))})),d=f.forwardRef(((e,t)=>{const r=f.useMemo((()=>new a.FontLoader),[]);return"string"==typeof e.font?f.createElement(i,s.default({},e,{ref:t,loader:r})):f.createElement(c,s.default({},e,{ref:t,loader:r}))}));exports.Text3D=d;
|
package/core/Text3D.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
import { MeshProps, Node } from '@react-three/fiber';
|
|
4
|
+
import { TextGeometryParameters } from 'three-stdlib';
|
|
5
|
+
declare global {
|
|
6
|
+
namespace JSX {
|
|
7
|
+
interface IntrinsicElements {
|
|
8
|
+
renamedTextGeometry: Node<any, any>;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
declare type Glyph = {
|
|
13
|
+
_cachedOutline: string[];
|
|
14
|
+
ha: number;
|
|
15
|
+
o: string;
|
|
16
|
+
};
|
|
17
|
+
declare type FontData = {
|
|
18
|
+
boundingBox: {
|
|
19
|
+
yMax: number;
|
|
20
|
+
yMin: number;
|
|
21
|
+
};
|
|
22
|
+
familyName: string;
|
|
23
|
+
glyphs: {
|
|
24
|
+
[k: string]: Glyph;
|
|
25
|
+
};
|
|
26
|
+
resolution: number;
|
|
27
|
+
underlineThickness: number;
|
|
28
|
+
};
|
|
29
|
+
declare type Text3DProps = {
|
|
30
|
+
font: FontData | string;
|
|
31
|
+
} & Omit<TextGeometryParameters, 'font'> & MeshProps;
|
|
32
|
+
export declare const Text3D: React.ForwardRefExoticComponent<Pick<React.PropsWithChildren<Text3DProps>, "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 | "size" | "font" | "material" | "height" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "bevelEnabled" | "bevelOffset" | "bevelSize" | "bevelThickness" | "curveSegments"> & React.RefAttributes<THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>>>;
|
|
33
|
+
export {};
|
package/core/Text3D.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { useMemo } from 'react';
|
|
4
|
+
import { extend } from '@react-three/fiber';
|
|
5
|
+
import { suspend } from 'suspend-react';
|
|
6
|
+
import { FontLoader, TextGeometry } from 'three-stdlib';
|
|
7
|
+
|
|
8
|
+
const types = ['string', 'number'];
|
|
9
|
+
|
|
10
|
+
const getTextFromChildren = children => {
|
|
11
|
+
let label = '';
|
|
12
|
+
React.Children.map(children, child => {
|
|
13
|
+
if (types.includes(typeof child)) {
|
|
14
|
+
label += child + '';
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
return label;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const Text3DBase = /*#__PURE__*/React.forwardRef(({
|
|
21
|
+
font,
|
|
22
|
+
loader,
|
|
23
|
+
size = 1,
|
|
24
|
+
height = 0.2,
|
|
25
|
+
bevelThickness = 0.1,
|
|
26
|
+
bevelSize = 0.01,
|
|
27
|
+
bevelEnabled = false,
|
|
28
|
+
bevelOffset = 0,
|
|
29
|
+
curveSegments = 8,
|
|
30
|
+
children,
|
|
31
|
+
...props
|
|
32
|
+
}, ref) => {
|
|
33
|
+
React.useMemo(() => {
|
|
34
|
+
extend({
|
|
35
|
+
RenamedTextGeometry: TextGeometry
|
|
36
|
+
});
|
|
37
|
+
}, []);
|
|
38
|
+
|
|
39
|
+
const _font = React.useMemo(() => loader.parse(font), [font]);
|
|
40
|
+
|
|
41
|
+
const opts = useMemo(() => {
|
|
42
|
+
return {
|
|
43
|
+
font: _font,
|
|
44
|
+
size,
|
|
45
|
+
height,
|
|
46
|
+
bevelThickness,
|
|
47
|
+
bevelSize,
|
|
48
|
+
bevelEnabled,
|
|
49
|
+
bevelOffset,
|
|
50
|
+
curveSegments
|
|
51
|
+
};
|
|
52
|
+
}, [_font, size, height, bevelThickness, bevelSize, bevelEnabled, bevelOffset, curveSegments]);
|
|
53
|
+
/**
|
|
54
|
+
* We need the `children` in the deps because we
|
|
55
|
+
* need to be able to do `<Text3d>{state}</Text3d>`.
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
const txt = useMemo(() => getTextFromChildren(children), [children]);
|
|
59
|
+
const args = React.useMemo(() => [txt, opts], [txt, opts]);
|
|
60
|
+
return /*#__PURE__*/React.createElement("mesh", _extends({}, props, {
|
|
61
|
+
ref: ref
|
|
62
|
+
}), /*#__PURE__*/React.createElement("renamedTextGeometry", {
|
|
63
|
+
args: args
|
|
64
|
+
}), children);
|
|
65
|
+
});
|
|
66
|
+
const Text3DSuspend = /*#__PURE__*/React.forwardRef(({
|
|
67
|
+
font,
|
|
68
|
+
loader,
|
|
69
|
+
...props
|
|
70
|
+
}, ref) => {
|
|
71
|
+
const _font = suspend(async () => {
|
|
72
|
+
const json = await (await fetch(font)).json();
|
|
73
|
+
return json;
|
|
74
|
+
}, [font]);
|
|
75
|
+
|
|
76
|
+
return /*#__PURE__*/React.createElement(Text3DBase, _extends({}, props, {
|
|
77
|
+
ref: ref,
|
|
78
|
+
font: _font,
|
|
79
|
+
loader: loader
|
|
80
|
+
}));
|
|
81
|
+
});
|
|
82
|
+
const Text3D = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
83
|
+
const loader = React.useMemo(() => new FontLoader(), []);
|
|
84
|
+
|
|
85
|
+
if (typeof props.font === 'string') {
|
|
86
|
+
return /*#__PURE__*/React.createElement(Text3DSuspend, _extends({}, props, {
|
|
87
|
+
ref: ref,
|
|
88
|
+
loader: loader
|
|
89
|
+
}));
|
|
90
|
+
} else {
|
|
91
|
+
return /*#__PURE__*/React.createElement(Text3DBase, _extends({}, props, {
|
|
92
|
+
ref: ref,
|
|
93
|
+
loader: loader
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
export { Text3D };
|
package/core/index.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./QuadraticBezierLine.cjs.js"),s=require("./CubicBezierLine.cjs.js"),t=require("./Line.cjs.js"),o=require("./PositionalAudio.cjs.js"),i=require("./Text.cjs.js"),u=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./Billboard.cjs.js"),r=require("./QuadraticBezierLine.cjs.js"),s=require("./CubicBezierLine.cjs.js"),t=require("./Line.cjs.js"),o=require("./PositionalAudio.cjs.js"),i=require("./Text.cjs.js"),u=require("./Text3D.cjs.js"),a=require("./Effects.cjs.js"),n=require("./GradientTexture.cjs.js"),j=require("./Image.cjs.js"),p=require("./Edges.cjs.js"),c=require("./Trail.cjs.js"),x=require("./Sampler.cjs.js"),l=require("./ComputedAttribute.cjs.js"),q=require("./Clone.cjs.js"),d=require("./OrthographicCamera.cjs.js"),m=require("./PerspectiveCamera.cjs.js"),C=require("./CubeCamera.cjs.js"),h=require("./DeviceOrientationControls.cjs.js"),b=require("./FlyControls.cjs.js"),S=require("./MapControls.cjs.js"),B=require("./OrbitControls.cjs.js"),T=require("./TrackballControls.cjs.js"),P=require("./ArcballControls.cjs.js"),M=require("./TransformControls.cjs.js"),f=require("./PointerLockControls.cjs.js"),g=require("./FirstPersonControls.cjs.js"),v=require("./GizmoHelper.cjs.js"),E=require("./GizmoViewcube.cjs.js"),L=require("./GizmoViewport.cjs.js"),A=require("./useCubeTexture.cjs.js"),k=require("./useFBX.cjs.js"),D=require("./useGLTF.cjs.js"),G=require("./useProgress.cjs.js"),F=require("./useTexture.cjs.js"),O=require("./useKTX2.cjs.js"),w=require("./Stats.cjs.js"),z=require("./useDepthBuffer.cjs.js"),I=require("./useAspect.cjs.js"),R=require("./useCamera.cjs.js"),y=require("./useDetectGPU.cjs.js"),H=require("./useHelper.cjs.js"),V=require("./useBVH.cjs.js"),Q=require("./useContextBridge.cjs.js"),X=require("./useAnimations.cjs.js"),K=require("./useFBO.cjs.js"),W=require("./useIntersect.cjs.js"),N=require("./useBoxProjectedEnv.cjs.js"),U=require("./CurveModifier.cjs.js"),_=require("./MeshDistortMaterial.cjs.js"),J=require("./MeshWobbleMaterial.cjs.js"),Y=require("./MeshReflectorMaterial.cjs.js"),Z=require("./PointMaterial.cjs.js"),$=require("./shaderMaterial.cjs.js"),ee=require("./softShadows.cjs.js"),re=require("./shapes.cjs.js"),se=require("./RoundedBox.cjs.js"),te=require("./ScreenQuad.cjs.js"),oe=require("./Center.cjs.js"),ie=require("./Bounds.cjs.js"),ue=require("./CameraShake.cjs.js"),ae=require("./Float.cjs.js"),ne=require("./Stage.cjs.js"),je=require("./Backdrop.cjs.js"),pe=require("./Shadow.cjs.js"),ce=require("./ContactShadows.cjs.js"),xe=require("./Reflector.cjs.js"),le=require("./SpotLight.cjs.js"),qe=require("./Environment.cjs.js"),de=require("./Lightformer.cjs.js"),me=require("./Sky.cjs.js"),Ce=require("./Stars.cjs.js"),he=require("./Cloud.cjs.js"),be=require("./Sparkles.cjs.js"),Se=require("./useMatcapTexture.cjs.js"),Be=require("./useNormalTexture.cjs.js"),Te=require("./Points.cjs.js"),Pe=require("./Instances.cjs.js"),Me=require("./Segments.cjs.js"),fe=require("./Detailed.cjs.js"),ge=require("./Preload.cjs.js"),ve=require("./BakeShadows.cjs.js"),Ee=require("./meshBounds.cjs.js"),Le=require("./AdaptiveDpr.cjs.js"),Ae=require("./AdaptiveEvents.cjs.js"),ke=require("./RenderTexture.cjs.js");require("@babel/runtime/helpers/extends"),require("react"),require("@react-three/fiber"),require("react-merge-refs"),require("three"),require("three-stdlib"),require("troika-three-text"),require("suspend-react"),require("meshline"),require("lodash.pick"),require("lodash.omit"),require("zustand"),require("stats.js"),require("../helpers/useEffectfulState.cjs.js"),require("detect-gpu"),require("three-mesh-bvh"),require("../materials/BlurPass.cjs.js"),require("../materials/ConvolutionMaterial.cjs.js"),require("../materials/MeshReflectorMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("../helpers/Position.cjs.js"),require("react-composer"),exports.Billboard=e.Billboard,exports.QuadraticBezierLine=r.QuadraticBezierLine,exports.CubicBezierLine=s.CubicBezierLine,exports.Line=t.Line,exports.PositionalAudio=o.PositionalAudio,exports.Text=i.Text,exports.Text3D=u.Text3D,exports.Effects=a.Effects,exports.isWebGL2Available=a.isWebGL2Available,exports.GradientTexture=n.GradientTexture,exports.Image=j.Image,exports.Edges=p.Edges,exports.Trail=c.Trail,exports.useTrail=c.useTrail,exports.Sampler=x.Sampler,exports.ComputedAttribute=l.ComputedAttribute,exports.Clone=q.Clone,exports.OrthographicCamera=d.OrthographicCamera,exports.PerspectiveCamera=m.PerspectiveCamera,exports.CubeCamera=C.CubeCamera,exports.DeviceOrientationControls=h.DeviceOrientationControls,exports.FlyControls=b.FlyControls,exports.MapControls=S.MapControls,exports.OrbitControls=B.OrbitControls,exports.TrackballControls=T.TrackballControls,exports.ArcballControls=P.ArcballControls,exports.TransformControls=M.TransformControls,exports.PointerLockControls=f.PointerLockControls,exports.FirstPersonControls=g.FirstPersonControls,exports.GizmoHelper=v.GizmoHelper,exports.useGizmoContext=v.useGizmoContext,exports.GizmoViewcube=E.GizmoViewcube,exports.GizmoViewport=L.GizmoViewport,exports.useCubeTexture=A.useCubeTexture,exports.useFBX=k.useFBX,exports.useGLTF=D.useGLTF,exports.useProgress=G.useProgress,exports.IsObject=F.IsObject,exports.useTexture=F.useTexture,exports.useKTX2=O.useKTX2,exports.Stats=w.Stats,exports.useDepthBuffer=z.useDepthBuffer,exports.useAspect=I.useAspect,exports.useCamera=R.useCamera,exports.useDetectGPU=y.useDetectGPU,exports.useHelper=H.useHelper,exports.useBVH=V.useBVH,exports.useContextBridge=Q.useContextBridge,exports.useAnimations=X.useAnimations,exports.useFBO=K.useFBO,exports.useIntersect=W.useIntersect,exports.useBoxProjectedEnv=N.useBoxProjectedEnv,exports.CurveModifier=U.CurveModifier,exports.MeshDistortMaterial=_.MeshDistortMaterial,exports.MeshWobbleMaterial=J.MeshWobbleMaterial,exports.MeshReflectorMaterial=Y.MeshReflectorMaterial,exports.PointMaterial=Z.PointMaterial,exports.PointMaterialImpl=Z.PointMaterialImpl,exports.shaderMaterial=$.shaderMaterial,exports.softShadows=ee.softShadows,exports.Box=re.Box,exports.Circle=re.Circle,exports.Cone=re.Cone,exports.Cylinder=re.Cylinder,exports.Dodecahedron=re.Dodecahedron,exports.Extrude=re.Extrude,exports.Icosahedron=re.Icosahedron,exports.Lathe=re.Lathe,exports.Octahedron=re.Octahedron,exports.Plane=re.Plane,exports.Polyhedron=re.Polyhedron,exports.Ring=re.Ring,exports.Sphere=re.Sphere,exports.Tetrahedron=re.Tetrahedron,exports.Torus=re.Torus,exports.TorusKnot=re.TorusKnot,exports.Tube=re.Tube,exports.RoundedBox=se.RoundedBox,exports.ScreenQuad=te.ScreenQuad,exports.Center=oe.Center,exports.Bounds=ie.Bounds,exports.useBounds=ie.useBounds,exports.CameraShake=ue.CameraShake,exports.Float=ae.Float,exports.Stage=ne.Stage,exports.Backdrop=je.Backdrop,exports.Shadow=pe.Shadow,exports.ContactShadows=ce.ContactShadows,exports.Reflector=xe.Reflector,exports.SpotLight=le.SpotLight,exports.Environment=qe.Environment,exports.EnvironmentCube=qe.EnvironmentCube,exports.EnvironmentMap=qe.EnvironmentMap,exports.EnvironmentPortal=qe.EnvironmentPortal,exports.useEnvironment=qe.useEnvironment,exports.Lightformer=de.Lightformer,exports.Sky=me.Sky,exports.calcPosFromAngles=me.calcPosFromAngles,exports.Stars=Ce.Stars,exports.Cloud=he.Cloud,exports.Sparkles=be.Sparkles,exports.useMatcapTexture=Se.useMatcapTexture,exports.useNormalTexture=Be.useNormalTexture,exports.Point=Te.Point,exports.Points=Te.Points,exports.PointsBuffer=Te.PointsBuffer,exports.Instance=Pe.Instance,exports.Instances=Pe.Instances,exports.Merged=Pe.Merged,exports.Segment=Me.Segment,exports.SegmentObject=Me.SegmentObject,exports.Segments=Me.Segments,exports.Detailed=fe.Detailed,exports.Preload=ge.Preload,exports.BakeShadows=ve.BakeShadows,exports.meshBounds=Ee.meshBounds,exports.AdaptiveDpr=Le.AdaptiveDpr,exports.AdaptiveEvents=Ae.AdaptiveEvents,exports.RenderTexture=ke.RenderTexture;
|
package/core/index.d.ts
CHANGED
package/core/index.js
CHANGED
|
@@ -4,6 +4,7 @@ export { CubicBezierLine } from './CubicBezierLine.js';
|
|
|
4
4
|
export { Line } from './Line.js';
|
|
5
5
|
export { PositionalAudio } from './PositionalAudio.js';
|
|
6
6
|
export { Text } from './Text.js';
|
|
7
|
+
export { Text3D } from './Text3D.js';
|
|
7
8
|
export { Effects, isWebGL2Available } from './Effects.js';
|
|
8
9
|
export { GradientTexture } from './GradientTexture.js';
|
|
9
10
|
export { Image } from './Image.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./useTexture.cjs.js"),r=require("suspend-react");function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("three"),require("@react-three/fiber");var u=s(e);exports.useMatcapTexture=function(e=0,s=1024){const
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./useTexture.cjs.js"),r=require("suspend-react");function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("three"),require("@react-three/fiber");var u=s(e);exports.useMatcapTexture=function(e=0,s=1024,n){const c=r.suspend((()=>fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json").then((e=>e.json()))),["matcapList"]),a=c[0],i=u.useMemo((()=>Object.keys(c).length),[]),p=`${u.useMemo((()=>"string"==typeof e?e:"number"==typeof e?c[e]:null),[e])||a}${function(e){switch(e){case 64:return"-64px";case 128:return"-128px";case 256:return"-256px";case 512:return"-512px";default:return""}}(s)}.png`,o=`https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d/${s}/${p}`;return[t.useTexture(o,n),o,i]};
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { Texture } from 'three';
|
|
2
|
+
export declare function useMatcapTexture(id?: number | string, format?: number, onLoad?: (texture: Texture | Texture[]) => void): [THREE.Texture, string, number];
|
package/core/useMatcapTexture.js
CHANGED
|
@@ -23,7 +23,7 @@ function getFormatString(format) {
|
|
|
23
23
|
|
|
24
24
|
const LIST_URL = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json';
|
|
25
25
|
const MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d';
|
|
26
|
-
function useMatcapTexture(id = 0, format = 1024) {
|
|
26
|
+
function useMatcapTexture(id = 0, format = 1024, onLoad) {
|
|
27
27
|
const matcapList = suspend(() => fetch(LIST_URL).then(res => res.json()), ['matcapList']);
|
|
28
28
|
const DEFAULT_MATCAP = matcapList[0];
|
|
29
29
|
const numTot = React.useMemo(() => Object.keys(matcapList).length, []);
|
|
@@ -38,7 +38,7 @@ function useMatcapTexture(id = 0, format = 1024) {
|
|
|
38
38
|
}, [id]);
|
|
39
39
|
const fileName = `${fileHash || DEFAULT_MATCAP}${getFormatString(format)}.png`;
|
|
40
40
|
const url = `${MATCAP_ROOT}/${format}/${fileName}`;
|
|
41
|
-
const matcapTexture = useTexture(url);
|
|
41
|
+
const matcapTexture = useTexture(url, onLoad);
|
|
42
42
|
return [matcapTexture, url, numTot];
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("./useTexture.cjs.js"),t=require("three"),s=require("suspend-react");function n(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var s=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,s.get?s:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}require("@react-three/fiber");var a=n(e);exports.useNormalTexture=function(e=0,n={}){const{repeat:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("./useTexture.cjs.js"),t=require("three"),s=require("suspend-react");function n(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var s=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,s.get?s:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}require("@react-three/fiber");var a=n(e);exports.useNormalTexture=function(e=0,n={},o){const{repeat:u=[1,1],anisotropy:c=1,offset:i=[0,0]}=n,f=s.suspend((()=>fetch("https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/normals/normals.json").then((e=>e.json()))),["normalsList"]),p=a.useMemo((()=>Object.keys(f).length),[]),d=f[0],l=`https://rawcdn.githack.com/pmndrs/drei-assets/7a3104997e1576f83472829815b00880d88b32fb/normals/${f[e]||d}`,b=r.useTexture(l,o);return a.useLayoutEffect((()=>{b&&(b.wrapS=b.wrapT=t.RepeatWrapping,b.repeat=new t.Vector2(u[0],u[1]),b.offset=new t.Vector2(i[0],i[1]),b.anisotropy=c)}),[b,c,u,i]),[b,l,p]};
|
|
@@ -4,5 +4,5 @@ declare type Settings = {
|
|
|
4
4
|
anisotropy?: number;
|
|
5
5
|
offset?: number[];
|
|
6
6
|
};
|
|
7
|
-
export declare function useNormalTexture(id?: number, settings?: Settings): [Texture, string, number];
|
|
7
|
+
export declare function useNormalTexture(id?: number, settings?: Settings, onLoad?: (texture: Texture | Texture[]) => void): [Texture, string, number];
|
|
8
8
|
export {};
|
package/core/useNormalTexture.js
CHANGED
|
@@ -5,7 +5,7 @@ import { suspend } from 'suspend-react';
|
|
|
5
5
|
|
|
6
6
|
const NORMAL_ROOT = 'https://rawcdn.githack.com/pmndrs/drei-assets/7a3104997e1576f83472829815b00880d88b32fb';
|
|
7
7
|
const LIST_URL = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/normals/normals.json';
|
|
8
|
-
function useNormalTexture(id = 0, settings = {}) {
|
|
8
|
+
function useNormalTexture(id = 0, settings = {}, onLoad) {
|
|
9
9
|
const {
|
|
10
10
|
repeat = [1, 1],
|
|
11
11
|
anisotropy = 1,
|
|
@@ -16,7 +16,7 @@ function useNormalTexture(id = 0, settings = {}) {
|
|
|
16
16
|
const DEFAULT_NORMAL = normalsList[0];
|
|
17
17
|
const imageName = normalsList[id] || DEFAULT_NORMAL;
|
|
18
18
|
const url = `${NORMAL_ROOT}/normals/${imageName}`;
|
|
19
|
-
const normalTexture = useTexture(url);
|
|
19
|
+
const normalTexture = useTexture(url, onLoad);
|
|
20
20
|
React.useLayoutEffect(() => {
|
|
21
21
|
if (!normalTexture) return;
|
|
22
22
|
normalTexture.wrapS = normalTexture.wrapT = RepeatWrapping;
|
package/core/useTexture.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),r=require("@react-three/fiber"),t=require("react");const
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three"),r=require("@react-three/fiber"),t=require("react");const u=e=>e===Object(e)&&!Array.isArray(e)&&"function"!=typeof e;function a(a,s){const o=r.useThree((e=>e.gl)),c=r.useLoader(e.TextureLoader,u(a)?Object.values(a):a);if(t.useLayoutEffect((()=>{null==s||s(c)}),[s]),t.useEffect((()=>{(Array.isArray(c)?c:[c]).forEach(o.initTexture)}),[o,c]),u(a)){const e=Object.keys(a),r={};return e.forEach((t=>Object.assign(r,{[t]:c[e.indexOf(t)]}))),r}return c}a.preload=t=>r.useLoader.preload(e.TextureLoader,t),a.clear=t=>r.useLoader.clear(e.TextureLoader,t),exports.IsObject=u,exports.useTexture=a;
|
package/core/useTexture.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Texture } from 'three';
|
|
2
2
|
export declare const IsObject: (url: any) => url is Record<string, string>;
|
|
3
|
-
export declare function useTexture<Url extends string[] | string | Record<string, string>>(input: Url): Url extends any[] ? Texture[] : Url extends object ? {
|
|
3
|
+
export declare function useTexture<Url extends string[] | string | Record<string, string>>(input: Url, onLoad?: (texture: Texture | Texture[]) => void): Url extends any[] ? Texture[] : Url extends object ? {
|
|
4
4
|
[key in keyof Url]: Texture;
|
|
5
5
|
} : Texture;
|
|
6
6
|
export declare namespace useTexture {
|
package/core/useTexture.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { TextureLoader } from 'three';
|
|
2
2
|
import { useThree, useLoader } from '@react-three/fiber';
|
|
3
|
-
import { useEffect } from 'react';
|
|
3
|
+
import { useLayoutEffect, useEffect } from 'react';
|
|
4
4
|
|
|
5
5
|
const IsObject = url => url === Object(url) && !Array.isArray(url) && typeof url !== 'function';
|
|
6
|
-
function useTexture(input) {
|
|
6
|
+
function useTexture(input, onLoad) {
|
|
7
7
|
const gl = useThree(state => state.gl);
|
|
8
|
-
const textures = useLoader(TextureLoader, IsObject(input) ? Object.values(input) : input);
|
|
8
|
+
const textures = useLoader(TextureLoader, IsObject(input) ? Object.values(input) : input);
|
|
9
|
+
useLayoutEffect(() => {
|
|
10
|
+
onLoad == null ? void 0 : onLoad(textures);
|
|
11
|
+
}, [onLoad]); // https://github.com/mrdoob/three.js/issues/22696
|
|
9
12
|
// Upload the texture to the GPU immediately instead of waiting for the first render
|
|
10
13
|
|
|
11
14
|
useEffect(() => {
|