@react-three/drei 9.35.1 → 9.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -1
- package/core/GizmoHelper.cjs.js +1 -1
- package/core/GizmoViewcube.cjs.js +1 -1
- package/core/GizmoViewport.cjs.js +1 -1
- package/core/OrthographicCamera.cjs.js +1 -1
- package/core/OrthographicCamera.d.ts +6 -22
- package/core/OrthographicCamera.js +24 -3
- package/core/PerspectiveCamera.cjs.js +1 -1
- package/core/PerspectiveCamera.d.ts +6 -22
- package/core/PerspectiveCamera.js +24 -3
- package/core/RenderTexture.d.ts +1 -1
- package/core/Svg.cjs.js +1 -0
- package/core/Svg.d.ts +13 -0
- package/core/Svg.js +59 -0
- package/core/index.cjs.js +1 -1
- package/core/index.d.ts +1 -0
- package/core/index.js +1 -0
- 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
|
@@ -75,6 +75,7 @@ The `native` route of the library **does not** export `Html` or `Loader`. The de
|
|
|
75
75
|
<li><a href="#useanimations">useAnimations</a></li>
|
|
76
76
|
<li><a href="#marchingcubes">MarchingCubes</a></li>
|
|
77
77
|
<li><a href="#decal">Decal</a></li>
|
|
78
|
+
<li><a href="#svg">Svg</a></li>
|
|
78
79
|
</ul>
|
|
79
80
|
<li><a href="#shaders">Shaders</a></li>
|
|
80
81
|
<ul>
|
|
@@ -208,6 +209,21 @@ The `native` route of the library **does not** export `Html` or `Loader`. The de
|
|
|
208
209
|
|
|
209
210
|
[](https://drei.vercel.app/?path=/story/camera-perspectivecamera--perspective-camera-scene-st)
|
|
210
211
|
|
|
212
|
+
```tsx
|
|
213
|
+
type Props = Omit<JSX.IntrinsicElements['perspectiveCamera'], 'children'> & {
|
|
214
|
+
/** Registers the camera as the system default, fiber will start rendering with it */
|
|
215
|
+
makeDefault?: boolean
|
|
216
|
+
/** Making it manual will stop responsiveness and you have to calculate aspect ratio yourself. */
|
|
217
|
+
manual?: boolean
|
|
218
|
+
/** The contents will either follow the camera, or be hidden when filming if you pass a function */
|
|
219
|
+
children?: React.ReactNode | ((texture: THREE.Texture) => React.ReactNode)
|
|
220
|
+
/** Number of frames to render, 0 */
|
|
221
|
+
frames?: number
|
|
222
|
+
/** Resolution of the FBO, 256 */
|
|
223
|
+
resolution?: number
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
211
227
|
A responsive [THREE.PerspectiveCamera](https://threejs.org/docs/#api/en/cameras/PerspectiveCamera) that can set itself as the default.
|
|
212
228
|
|
|
213
229
|
```jsx
|
|
@@ -229,6 +245,18 @@ You can also drive it manually, it won't be responsive and you have to calculate
|
|
|
229
245
|
<PerspectiveCamera manual aspect={...} onUpdate={(c) => c.updateProjectionMatrix()}>
|
|
230
246
|
```
|
|
231
247
|
|
|
248
|
+
You can use the PerspectiveCamera to film contents into a RenderTarget, similar to CubeCamera. As a child you must provide a render-function which receives the texture as its first argument. The result of that function will _not follow the camera_, instead it will be set invisible while the the FBO renders so as to avoid issues where the meshes that receive the texture are interrering.
|
|
249
|
+
|
|
250
|
+
```jsx
|
|
251
|
+
<PerspectiveCamera position={[0, 0, 10]}>
|
|
252
|
+
{(texture) => (
|
|
253
|
+
<mesh geometry={plane}>
|
|
254
|
+
<meshBasicMaterial map={texture} />
|
|
255
|
+
</mesh>
|
|
256
|
+
)}
|
|
257
|
+
</PerspectiveCamera>
|
|
258
|
+
```
|
|
259
|
+
|
|
232
260
|
#### OrthographicCamera
|
|
233
261
|
|
|
234
262
|
[](https://drei.vercel.app/?path=/story/camera-orthographiccamera--orthographic-camera-scene-st)
|
|
@@ -241,6 +269,18 @@ A responsive [THREE.OrthographicCamera](https://threejs.org/docs/#api/en/cameras
|
|
|
241
269
|
</OrthographicCamera>
|
|
242
270
|
```
|
|
243
271
|
|
|
272
|
+
You can use the OrthographicCamera to film contents into a RenderTarget, it has the same API as OrthographicCamera.
|
|
273
|
+
|
|
274
|
+
```jsx
|
|
275
|
+
<OrthographicCamera position={[0, 0, 10]}>
|
|
276
|
+
{(texture) => (
|
|
277
|
+
<mesh geometry={plane}>
|
|
278
|
+
<meshBasicMaterial map={texture} />
|
|
279
|
+
</mesh>
|
|
280
|
+
)}
|
|
281
|
+
</OrthographicCamera>
|
|
282
|
+
```
|
|
283
|
+
|
|
244
284
|
#### CubeCamera
|
|
245
285
|
|
|
246
286
|
[](https://drei.pmnd.rs/?path=/story/camera-cubecamera--default-story)
|
|
@@ -1166,6 +1206,18 @@ If declarative composition is not possible, use the `mesh` prop to define the su
|
|
|
1166
1206
|
</Decal>
|
|
1167
1207
|
```
|
|
1168
1208
|
|
|
1209
|
+
#### Svg
|
|
1210
|
+
|
|
1211
|
+
[](https://drei.pmnd.rs/?path=/story/abstractions-svg--svg-st)
|
|
1212
|
+
|
|
1213
|
+
Wrapper around the `three` [svg loader](https://threejs.org/examples/?q=sv#webgl_loader_svg) demo.
|
|
1214
|
+
|
|
1215
|
+
Accepts an SVG url or svg raw data.
|
|
1216
|
+
|
|
1217
|
+
```js
|
|
1218
|
+
<Svg src={urlOrRawSvgString} />
|
|
1219
|
+
```
|
|
1220
|
+
|
|
1169
1221
|
# Shaders
|
|
1170
1222
|
|
|
1171
1223
|
#### MeshReflectorMaterial
|
|
@@ -2326,7 +2378,7 @@ Masks use the stencil buffer to cut out areas of the screen. This is usually che
|
|
|
2326
2378
|
/** If depth of the masks own material will leak through, default: false */
|
|
2327
2379
|
depthWrite?: boolean
|
|
2328
2380
|
/** children must define a geometry, a render-prop function is allowed which may override the default material */
|
|
2329
|
-
children: (spread: MaskSpread) => React.ReactNode | React.ReactNode
|
|
2381
|
+
children: ((spread: MaskSpread) => React.ReactNode) | React.ReactNode
|
|
2330
2382
|
/>
|
|
2331
2383
|
```
|
|
2332
2384
|
|
package/core/GizmoHelper.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("@react-three/fiber"),t=require("three"),n=require("./OrthographicCamera.cjs.js"),u=require("./useCamera.cjs.js");function a(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}require("@babel/runtime/helpers/extends"),require("react-merge-refs");var o=a(e);const c=o.createContext({}),i=2*Math.PI,s=new t.Object3D,l=new t.Matrix4,[p,d]=[new t.Quaternion,new t.Quaternion],f=new t.Vector3,h=new t.Vector3;exports.GizmoHelper=({alignment:e="bottom-right",margin:a=[80,80],renderPriority:m=0,autoClear:g=!0,onUpdate:b,onTarget:y,children:w})=>{const
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("@react-three/fiber"),t=require("three"),n=require("./OrthographicCamera.cjs.js"),u=require("./useCamera.cjs.js");function a(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}require("@babel/runtime/helpers/extends"),require("react-merge-refs"),require("./useFBO.cjs.js");var o=a(e);const c=o.createContext({}),i=2*Math.PI,s=new t.Object3D,l=new t.Matrix4,[p,d]=[new t.Quaternion,new t.Quaternion],f=new t.Vector3,h=new t.Vector3;exports.GizmoHelper=({alignment:e="bottom-right",margin:a=[80,80],renderPriority:m=0,autoClear:g=!0,onUpdate:b,onTarget:y,children:w})=>{const j=r.useThree((({size:e})=>e)),q=r.useThree((({camera:e})=>e)),v=r.useThree((({controls:e})=>e)),C=r.useThree((({gl:e})=>e)),O=r.useThree((({scene:e})=>e)),x=r.useThree((({invalidate:e})=>e)),T=o.useRef(),k=o.useRef(),P=o.useRef(null),[R]=o.useState((()=>new t.Scene)),E=o.useRef(!1),M=o.useRef(0),z=o.useRef(new t.Vector3(0,0,0)),Q=o.useRef(new t.Vector3(0,0,0));o.useEffect((()=>{Q.current.copy(q.up)}),[q]);const S=o.useCallback((e=>{E.current=!0,(v||y)&&(z.current=(null==v?void 0:v.target)||(null==y?void 0:y())),M.current=q.position.distanceTo(f),p.copy(q.quaternion),h.copy(e).multiplyScalar(M.current).add(f),s.lookAt(h),d.copy(s.quaternion),x()}),[v,q,y,x]);o.useEffect((()=>(O.background&&(T.current=O.background,O.background=null,R.background=T.current),()=>{T.current&&(O.background=T.current)})),[]),r.useFrame(((e,r)=>{if(P.current&&k.current){var t;if(E.current)if(p.angleTo(d)<.01)E.current=!1,"minPolarAngle"in v&&q.up.copy(Q.current);else{const e=r*i;p.rotateTowards(d,e),q.position.set(0,0,1).applyQuaternion(p).multiplyScalar(M.current).add(z.current),q.up.set(0,1,0).applyQuaternion(p).normalize(),q.quaternion.copy(p),b?b():v&&v.update(),x()}l.copy(q.matrix).invert(),null==(t=k.current)||t.quaternion.setFromRotationMatrix(l),g&&(C.autoClear=!1),C.clearDepth(),C.render(R,P.current)}}),m);const V=u.useCamera(P),W=o.useMemo((()=>({tweenCamera:S,raycast:V})),[S]),[_,D]=a,F=e.endsWith("-center")?0:e.endsWith("-left")?-j.width/2+_:j.width/2-_,A=e.startsWith("center-")?0:e.startsWith("top-")?j.height/2-D:-j.height/2+D;return r.createPortal(o.createElement(c.Provider,{value:W},o.createElement(n.OrthographicCamera,{ref:P,position:[0,0,200]}),o.createElement("group",{ref:k,position:[F,A,0]},w)),R)},exports.useGizmoContext=()=>o.useContext(c);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("@react-three/fiber"),o=require("./GizmoHelper.cjs.js"),a=require("three");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("./OrthographicCamera.cjs.js"),require("react-merge-refs"),require("./useCamera.cjs.js");var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("@react-three/fiber"),o=require("./GizmoHelper.cjs.js"),a=require("three");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("./OrthographicCamera.cjs.js"),require("react-merge-refs"),require("./useFBO.cjs.js"),require("./useCamera.cjs.js");var s=n(e),c=i(t);const l="#f0f0f0",u="#999",p="black",m="black",f=["Right","Left","Top","Bottom","Front","Back"],h=e=>new a.Vector3(...e).multiplyScalar(.38),y=[[1,1,1],[1,1,-1],[1,-1,1],[1,-1,-1],[-1,1,1],[-1,1,-1],[-1,-1,1],[-1,-1,-1]].map(h),d=[.25,.25,.25],g=[[1,1,0],[1,0,1],[1,0,-1],[1,-1,0],[0,1,1],[0,1,-1],[0,-1,1],[0,-1,-1],[-1,1,0],[-1,0,1],[-1,0,-1],[-1,-1,0]].map(h),b=g.map((e=>e.toArray().map((e=>0==e?.5:.25)))),x=({hover:e,index:t,font:o="20px Inter var, Arial, sans-serif",faces:n=f,color:i=l,hoverColor:s=u,textColor:h=p,strokeColor:y=m,opacity:d=1})=>{const g=r.useThree((e=>e.gl)),b=c.useMemo((()=>{const e=document.createElement("canvas");e.width=128,e.height=128;const r=e.getContext("2d");return r.fillStyle=i,r.fillRect(0,0,e.width,e.height),r.strokeStyle=y,r.strokeRect(0,0,e.width,e.height),r.font=o,r.textAlign="center",r.fillStyle=h,r.fillText(n[t].toUpperCase(),64,76),new a.CanvasTexture(e)}),[t,n,o,i,h,y]);return c.createElement("meshLambertMaterial",{map:b,"map-encoding":g.outputEncoding,"map-anisotropy":g.capabilities.getMaxAnisotropy()||1,attach:`material-${t}`,color:e?s:"white",transparent:!0,opacity:d})},C=e=>{const{tweenCamera:t,raycast:r}=o.useGizmoContext(),[a,n]=c.useState(null);return c.createElement("mesh",{raycast:r,onPointerOut:e=>{e.stopPropagation(),n(null)},onPointerMove:e=>{e.stopPropagation(),n(Math.floor(e.faceIndex/2))},onClick:e.onClick||(e=>{e.stopPropagation(),t(e.face.normal)})},[...Array(6)].map(((t,r)=>c.createElement(x,s.default({key:r,index:r,hover:a===r},e)))),c.createElement("boxGeometry",null))},E=({onClick:e,dimensions:t,position:r,hoverColor:a=u})=>{const{tweenCamera:n,raycast:i}=o.useGizmoContext(),[s,l]=c.useState(!1);return c.createElement("mesh",{scale:1.01,position:r,raycast:i,onPointerOver:e=>{e.stopPropagation(),l(!0)},onPointerOut:e=>{e.stopPropagation(),l(!1)},onClick:e||(e=>{e.stopPropagation(),n(r)})},c.createElement("meshBasicMaterial",{color:s?a:"white",transparent:!0,opacity:.6,visible:s}),c.createElement("boxGeometry",{args:t}))};exports.GizmoViewcube=e=>c.createElement("group",{scale:[60,60,60]},c.createElement(C,e),g.map(((t,r)=>c.createElement(E,s.default({key:r,position:t,dimensions:b[r]},e)))),y.map(((t,r)=>c.createElement(E,s.default({key:r,position:t,dimensions:d},e)))),c.createElement("ambientLight",{intensity:.5}),c.createElement("pointLight",{position:[10,10,10],intensity:.5}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("@react-three/fiber"),a=require("three"),o=require("./GizmoHelper.cjs.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function l(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}require("./OrthographicCamera.cjs.js"),require("react-merge-refs"),require("./useFBO.cjs.js"),require("./useCamera.cjs.js");var i=n(e),c=l(t);function s({scale:e=[.8,.05,.05],color:t,rotation:r}){return c.createElement("group",{rotation:r},c.createElement("mesh",{position:[.4,0,0]},c.createElement("boxGeometry",{args:e}),c.createElement("meshBasicMaterial",{color:t,toneMapped:!1})))}function u({onClick:e,font:t,disabled:o,arcStyle:n,label:l,labelColor:s,axisHeadScale:u=1,...p}){const f=r.useThree((e=>e.gl)),m=c.useMemo((()=>{const e=document.createElement("canvas");e.width=64,e.height=64;const r=e.getContext("2d");return r.beginPath(),r.arc(32,32,16,0,2*Math.PI),r.closePath(),r.fillStyle=n,r.fill(),l&&(r.font=t,r.textAlign="center",r.fillStyle=s,r.fillText(l,32,41)),new a.CanvasTexture(e)}),[n,l,s,t]),[d,b]=c.useState(!1),g=(l?1:.75)*(d?1.2:1)*u;return c.createElement("sprite",i.default({scale:g,onPointerOver:o?void 0:e=>{e.stopPropagation(),b(!0)},onPointerOut:o?void 0:e||(e=>{e.stopPropagation(),b(!1)})},p),c.createElement("spriteMaterial",{map:m,"map-encoding":f.outputEncoding,"map-anisotropy":f.capabilities.getMaxAnisotropy()||1,alphaTest:.3,opacity:l?1:.75,toneMapped:!1}))}exports.GizmoViewport=({hideNegativeAxes:e,hideAxisHeads:t,disabled:r,font:a="18px Inter var, Arial, sans-serif",axisColors:n=["#ff2060","#20df80","#2080ff"],axisHeadScale:l=1,axisScale:p,labels:f=["X","Y","Z"],labelColor:m="#000",onClick:d,...b})=>{const[g,E,h]=n,{tweenCamera:y,raycast:x}=o.useGizmoContext(),j={font:a,disabled:r,labelColor:m,raycast:x,onClick:d,axisHeadScale:l,onPointerDown:r?void 0:e=>{y(e.object.position),e.stopPropagation()}};return c.createElement("group",i.default({scale:40},b),c.createElement(s,{color:g,rotation:[0,0,0],scale:p}),c.createElement(s,{color:E,rotation:[0,0,Math.PI/2],scale:p}),c.createElement(s,{color:h,rotation:[0,-Math.PI/2,0],scale:p}),!t&&c.createElement(c.Fragment,null,c.createElement(u,i.default({arcStyle:g,position:[1,0,0],label:f[0]},j)),c.createElement(u,i.default({arcStyle:E,position:[0,1,0],label:f[1]},j)),c.createElement(u,i.default({arcStyle:h,position:[0,0,1],label:f[2]},j)),!e&&c.createElement(c.Fragment,null,c.createElement(u,i.default({arcStyle:g,position:[-1,0,0]},j)),c.createElement(u,i.default({arcStyle:E,position:[0,-1,0]},j)),c.createElement(u,i.default({arcStyle:h,position:[0,0,-1]},j)))),c.createElement("ambientLight",{intensity:.5}),c.createElement("pointLight",{position:[10,10,10],intensity:.5}))};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("@react-three/fiber"),u=require("react-merge-refs");function a(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 u=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,u.get?u:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("@react-three/fiber"),u=require("react-merge-refs"),n=require("./useFBO.cjs.js");function a(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 u=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,u.get?u:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}require("three");var i=a(e),o=c(r),f=a(u);const s=o.forwardRef((({resolution:e=256,frames:r=1/0,children:u,makeDefault:a,...c},s)=>{const l=t.useThree((({set:e})=>e)),d=t.useThree((({camera:e})=>e)),h=t.useThree((({size:e})=>e)),m=o.useRef(null),g=o.useRef(null),p=n.useFBO(e);o.useLayoutEffect((()=>{c.manual||m.current.updateProjectionMatrix()}),[h,c]),o.useLayoutEffect((()=>{m.current.updateProjectionMatrix()})),o.useLayoutEffect((()=>{if(a){const e=d;return l((()=>({camera:m.current}))),()=>l((()=>({camera:e})))}}),[m,a,l]);const b="function"==typeof u;return t.useFrame((e=>{b&&(r===1/0||0<r)&&(g.current.visible=!1,e.gl.setRenderTarget(p),e.gl.render(e.scene,m.current),e.gl.setRenderTarget(null),g.current.visible=!0)})),o.createElement(o.Fragment,null,o.createElement("orthographicCamera",i.default({left:h.width/-2,right:h.width/2,top:h.height/2,bottom:h.height/-2,ref:f.default([m,s])},c),!b&&u),o.createElement("group",{ref:g},b&&u(p.texture)))}));exports.OrthographicCamera=s;
|
|
@@ -1,25 +1,9 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
1
2
|
import * as React from 'react';
|
|
2
|
-
|
|
3
|
-
export declare const OrthographicCamera: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").ExtendedColors<import("@react-three/fiber").Overwrite<Partial<OrthographicCameraImpl>, import("@react-three/fiber").NodeProps<OrthographicCameraImpl, typeof OrthographicCameraImpl>>>, import("@react-three/fiber").NonFunctionKeys<{
|
|
4
|
-
position?: import("@react-three/fiber").Vector3 | undefined;
|
|
5
|
-
up?: import("@react-three/fiber").Vector3 | undefined;
|
|
6
|
-
scale?: import("@react-three/fiber").Vector3 | undefined;
|
|
7
|
-
rotation?: import("@react-three/fiber").Euler | undefined;
|
|
8
|
-
matrix?: import("@react-three/fiber").Matrix4 | undefined;
|
|
9
|
-
quaternion?: import("@react-three/fiber").Quaternion | undefined;
|
|
10
|
-
layers?: import("@react-three/fiber").Layers | undefined;
|
|
11
|
-
dispose?: (() => void) | null | undefined;
|
|
12
|
-
}>> & {
|
|
13
|
-
position?: import("@react-three/fiber").Vector3 | undefined;
|
|
14
|
-
up?: import("@react-three/fiber").Vector3 | undefined;
|
|
15
|
-
scale?: import("@react-three/fiber").Vector3 | undefined;
|
|
16
|
-
rotation?: import("@react-three/fiber").Euler | undefined;
|
|
17
|
-
matrix?: import("@react-three/fiber").Matrix4 | undefined;
|
|
18
|
-
quaternion?: import("@react-three/fiber").Quaternion | undefined;
|
|
19
|
-
layers?: import("@react-three/fiber").Layers | undefined;
|
|
20
|
-
dispose?: (() => void) | null | undefined;
|
|
21
|
-
} & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
|
|
3
|
+
export declare const OrthographicCamera: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").OrthographicCameraProps, "children"> & {
|
|
22
4
|
makeDefault?: boolean | undefined;
|
|
23
5
|
manual?: boolean | undefined;
|
|
24
|
-
children?: React.ReactNode;
|
|
25
|
-
|
|
6
|
+
children?: React.ReactNode | ((texture: THREE.Texture) => React.ReactNode);
|
|
7
|
+
frames?: number | undefined;
|
|
8
|
+
resolution?: number | undefined;
|
|
9
|
+
}, "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 | "left" | "right" | "bottom" | "top" | "manual" | "zoom" | "view" | "matrixWorldInverse" | "projectionMatrix" | "projectionMatrixInverse" | "isCamera" | "near" | "far" | "setViewOffset" | "clearViewOffset" | "updateProjectionMatrix" | "isOrthographicCamera" | "resolution" | "frames" | "makeDefault"> & React.RefAttributes<unknown>>;
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { useThree } from '@react-three/fiber';
|
|
3
|
+
import { useThree, useFrame } from '@react-three/fiber';
|
|
4
4
|
import mergeRefs from 'react-merge-refs';
|
|
5
|
+
import { useFBO } from './useFBO.js';
|
|
6
|
+
|
|
7
|
+
const isFunction = node => typeof node === 'function';
|
|
5
8
|
|
|
6
9
|
const OrthographicCamera = /*#__PURE__*/React.forwardRef(({
|
|
10
|
+
resolution = 256,
|
|
11
|
+
frames = Infinity,
|
|
12
|
+
children,
|
|
7
13
|
makeDefault,
|
|
8
14
|
...props
|
|
9
15
|
}, ref) => {
|
|
@@ -17,6 +23,8 @@ const OrthographicCamera = /*#__PURE__*/React.forwardRef(({
|
|
|
17
23
|
size
|
|
18
24
|
}) => size);
|
|
19
25
|
const cameraRef = React.useRef(null);
|
|
26
|
+
const groupRef = React.useRef(null);
|
|
27
|
+
const fbo = useFBO(resolution);
|
|
20
28
|
React.useLayoutEffect(() => {
|
|
21
29
|
if (!props.manual) {
|
|
22
30
|
cameraRef.current.updateProjectionMatrix();
|
|
@@ -38,13 +46,26 @@ const OrthographicCamera = /*#__PURE__*/React.forwardRef(({
|
|
|
38
46
|
// that must exchange the default, and clean up after itself on unmount.
|
|
39
47
|
|
|
40
48
|
}, [cameraRef, makeDefault, set]);
|
|
41
|
-
|
|
49
|
+
let count = 0;
|
|
50
|
+
const functional = isFunction(children);
|
|
51
|
+
useFrame(state => {
|
|
52
|
+
if (functional && (frames === Infinity || count < frames)) {
|
|
53
|
+
groupRef.current.visible = false;
|
|
54
|
+
state.gl.setRenderTarget(fbo);
|
|
55
|
+
state.gl.render(state.scene, cameraRef.current);
|
|
56
|
+
state.gl.setRenderTarget(null);
|
|
57
|
+
groupRef.current.visible = true;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("orthographicCamera", _extends({
|
|
42
61
|
left: size.width / -2,
|
|
43
62
|
right: size.width / 2,
|
|
44
63
|
top: size.height / 2,
|
|
45
64
|
bottom: size.height / -2,
|
|
46
65
|
ref: mergeRefs([cameraRef, ref])
|
|
47
|
-
}, props))
|
|
66
|
+
}, props), !functional && children), /*#__PURE__*/React.createElement("group", {
|
|
67
|
+
ref: groupRef
|
|
68
|
+
}, functional && children(fbo.texture)));
|
|
48
69
|
});
|
|
49
70
|
|
|
50
71
|
export { OrthographicCamera };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("@react-three/fiber"),u=require("react-merge-refs");function a(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 u=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,u.get?u:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("@react-three/fiber"),u=require("react-merge-refs"),n=require("./useFBO.cjs.js");function a(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 u=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,u.get?u:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}require("three");var s=a(e),f=c(r),i=a(u);const l=f.forwardRef((({resolution:e=256,frames:r=1/0,makeDefault:u,children:a,...c},l)=>{const o=t.useThree((({set:e})=>e)),d=t.useThree((({camera:e})=>e)),m=t.useThree((({size:e})=>e)),p=f.useRef(null),b=f.useRef(null),g=n.useFBO(e);f.useLayoutEffect((()=>{c.manual||(p.current.aspect=m.width/m.height)}),[m,c]),f.useLayoutEffect((()=>{p.current.updateProjectionMatrix()}));const h="function"==typeof a;return t.useFrame((e=>{h&&(r===1/0||0<r)&&(b.current.visible=!1,e.gl.setRenderTarget(g),e.gl.render(e.scene,p.current),e.gl.setRenderTarget(null),b.current.visible=!0)})),f.useLayoutEffect((()=>{if(u){const e=d;return o((()=>({camera:p.current}))),()=>o((()=>({camera:e})))}}),[p,u,o]),f.createElement(f.Fragment,null,f.createElement("perspectiveCamera",s.default({ref:i.default([p,l])},c),!h&&a),f.createElement("group",{ref:b},h&&a(g.texture)))}));exports.PerspectiveCamera=l;
|
|
@@ -1,25 +1,9 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
1
2
|
import * as React from 'react';
|
|
2
|
-
|
|
3
|
-
export declare const PerspectiveCamera: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").ExtendedColors<import("@react-three/fiber").Overwrite<Partial<PerspectiveCameraImpl>, import("@react-three/fiber").NodeProps<PerspectiveCameraImpl, typeof PerspectiveCameraImpl>>>, import("@react-three/fiber").NonFunctionKeys<{
|
|
4
|
-
position?: import("@react-three/fiber").Vector3 | undefined;
|
|
5
|
-
up?: import("@react-three/fiber").Vector3 | undefined;
|
|
6
|
-
scale?: import("@react-three/fiber").Vector3 | undefined;
|
|
7
|
-
rotation?: import("@react-three/fiber").Euler | undefined;
|
|
8
|
-
matrix?: import("@react-three/fiber").Matrix4 | undefined;
|
|
9
|
-
quaternion?: import("@react-three/fiber").Quaternion | undefined;
|
|
10
|
-
layers?: import("@react-three/fiber").Layers | undefined;
|
|
11
|
-
dispose?: (() => void) | null | undefined;
|
|
12
|
-
}>> & {
|
|
13
|
-
position?: import("@react-three/fiber").Vector3 | undefined;
|
|
14
|
-
up?: import("@react-three/fiber").Vector3 | undefined;
|
|
15
|
-
scale?: import("@react-three/fiber").Vector3 | undefined;
|
|
16
|
-
rotation?: import("@react-three/fiber").Euler | undefined;
|
|
17
|
-
matrix?: import("@react-three/fiber").Matrix4 | undefined;
|
|
18
|
-
quaternion?: import("@react-three/fiber").Quaternion | undefined;
|
|
19
|
-
layers?: import("@react-three/fiber").Layers | undefined;
|
|
20
|
-
dispose?: (() => void) | null | undefined;
|
|
21
|
-
} & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
|
|
3
|
+
export declare const PerspectiveCamera: React.ForwardRefExoticComponent<Pick<Omit<import("@react-three/fiber").PerspectiveCameraProps, "children"> & {
|
|
22
4
|
makeDefault?: boolean | undefined;
|
|
23
5
|
manual?: boolean | undefined;
|
|
24
|
-
children?: React.ReactNode;
|
|
25
|
-
|
|
6
|
+
children?: React.ReactNode | ((texture: THREE.Texture) => React.ReactNode);
|
|
7
|
+
frames?: number | undefined;
|
|
8
|
+
resolution?: number | undefined;
|
|
9
|
+
}, "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 | "manual" | "zoom" | "view" | "matrixWorldInverse" | "projectionMatrix" | "projectionMatrixInverse" | "isCamera" | "near" | "far" | "isPerspectiveCamera" | "fov" | "aspect" | "focus" | "filmGauge" | "filmOffset" | "setFocalLength" | "getFocalLength" | "getEffectiveFOV" | "getFilmWidth" | "getFilmHeight" | "setViewOffset" | "clearViewOffset" | "updateProjectionMatrix" | "setLens" | "resolution" | "frames" | "makeDefault"> & React.RefAttributes<unknown>>;
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import { useThree } from '@react-three/fiber';
|
|
3
|
+
import { useThree, useFrame } from '@react-three/fiber';
|
|
4
4
|
import mergeRefs from 'react-merge-refs';
|
|
5
|
+
import { useFBO } from './useFBO.js';
|
|
6
|
+
|
|
7
|
+
const isFunction = node => typeof node === 'function';
|
|
5
8
|
|
|
6
9
|
const PerspectiveCamera = /*#__PURE__*/React.forwardRef(({
|
|
10
|
+
resolution = 256,
|
|
11
|
+
frames = Infinity,
|
|
7
12
|
makeDefault,
|
|
13
|
+
children,
|
|
8
14
|
...props
|
|
9
15
|
}, ref) => {
|
|
10
16
|
const set = useThree(({
|
|
@@ -17,6 +23,8 @@ const PerspectiveCamera = /*#__PURE__*/React.forwardRef(({
|
|
|
17
23
|
size
|
|
18
24
|
}) => size);
|
|
19
25
|
const cameraRef = React.useRef(null);
|
|
26
|
+
const groupRef = React.useRef(null);
|
|
27
|
+
const fbo = useFBO(resolution);
|
|
20
28
|
React.useLayoutEffect(() => {
|
|
21
29
|
if (!props.manual) {
|
|
22
30
|
cameraRef.current.aspect = size.width / size.height;
|
|
@@ -25,6 +33,17 @@ const PerspectiveCamera = /*#__PURE__*/React.forwardRef(({
|
|
|
25
33
|
React.useLayoutEffect(() => {
|
|
26
34
|
cameraRef.current.updateProjectionMatrix();
|
|
27
35
|
});
|
|
36
|
+
let count = 0;
|
|
37
|
+
const functional = isFunction(children);
|
|
38
|
+
useFrame(state => {
|
|
39
|
+
if (functional && (frames === Infinity || count < frames)) {
|
|
40
|
+
groupRef.current.visible = false;
|
|
41
|
+
state.gl.setRenderTarget(fbo);
|
|
42
|
+
state.gl.render(state.scene, cameraRef.current);
|
|
43
|
+
state.gl.setRenderTarget(null);
|
|
44
|
+
groupRef.current.visible = true;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
28
47
|
React.useLayoutEffect(() => {
|
|
29
48
|
if (makeDefault) {
|
|
30
49
|
const oldCam = camera;
|
|
@@ -38,9 +57,11 @@ const PerspectiveCamera = /*#__PURE__*/React.forwardRef(({
|
|
|
38
57
|
// that must exchange the default, and clean up after itself on unmount.
|
|
39
58
|
|
|
40
59
|
}, [cameraRef, makeDefault, set]);
|
|
41
|
-
return /*#__PURE__*/React.createElement("perspectiveCamera", _extends({
|
|
60
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("perspectiveCamera", _extends({
|
|
42
61
|
ref: mergeRefs([cameraRef, ref])
|
|
43
|
-
}, props))
|
|
62
|
+
}, props), !functional && children), /*#__PURE__*/React.createElement("group", {
|
|
63
|
+
ref: groupRef
|
|
64
|
+
}, functional && children(fbo.texture)));
|
|
44
65
|
});
|
|
45
66
|
|
|
46
67
|
export { PerspectiveCamera };
|
package/core/RenderTexture.d.ts
CHANGED
|
@@ -8,4 +8,4 @@ export declare const RenderTexture: React.ForwardRefExoticComponent<Pick<import(
|
|
|
8
8
|
eventPriority?: number | undefined;
|
|
9
9
|
frames?: number | undefined;
|
|
10
10
|
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" | "offset" | "needsUpdate" | "version" | "width" | "height" | "sourceFile" | "mipmaps" | "mapping" | "wrapS" | "wrapT" | "magFilter" | "minFilter" | "anisotropy" | "format" | "internalFormat" | "generateMipmaps" | "premultiplyAlpha" | "flipY" | "unpackAlignment" | "encoding" | "isRenderTargetTexture" | "needsPMREMUpdate" | "isTexture" | "transformUv" | "
|
|
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" | "offset" | "needsUpdate" | "version" | "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>>;
|
package/core/Svg.cjs.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),a=require("three"),s=require("three-stdlib");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var i=l(e),u=o(r);const n=r.forwardRef((function({src:e,skipFill:l,skipStrokes:o,fillMaterial:n,strokeMaterial:c,fillMeshProps:f,strokeMeshProps:d,...p},m){const y=t.useLoader(s.SVGLoader,e.startsWith("<svg")?`data:image/svg+xml;utf8,${e}`:e),h=r.useMemo((()=>o?[]:y.paths.map((e=>{var t;return void 0===(null==(t=e.userData)?void 0:t.style.stroke)||"none"===e.userData.style.stroke?null:e.subPaths.map((t=>s.SVGLoader.pointsToStroke(t.getPoints(),e.userData.style)))}))),[y,o]);return r.useEffect((()=>()=>h.forEach((e=>e&&e.map((e=>e.dispose()))))),[h]),u.createElement("object3D",i.default({ref:m},p),u.createElement("object3D",{scale:[1,-1,1]},y.paths.map(((e,t)=>{var p,m;return u.createElement(r.Fragment,{key:t},!l&&void 0!==(null==(p=e.userData)?void 0:p.style.fill)&&"none"!==e.userData.style.fill&&s.SVGLoader.createShapes(e).map(((t,r)=>u.createElement("mesh",i.default({key:r},f),u.createElement("shapeGeometry",{args:[t]}),u.createElement("meshBasicMaterial",i.default({color:e.userData.style.fill,opacity:e.userData.style.fillOpacity,transparent:!0,side:a.DoubleSide,depthWrite:!1},n))))),!o&&void 0!==(null==(m=e.userData)?void 0:m.style.stroke)&&"none"!==e.userData.style.stroke&&e.subPaths.map(((r,s)=>u.createElement("mesh",i.default({key:s,geometry:h[t][s]},d),u.createElement("meshBasicMaterial",i.default({color:e.userData.style.stroke,opacity:e.userData.style.strokeOpacity,transparent:!0,side:a.DoubleSide,depthWrite:!1},c))))))}))))}));exports.Svg=n;
|
package/core/Svg.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { MeshBasicMaterialProps, MeshProps, Object3DProps } from '@react-three/fiber';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Object3D } from 'three';
|
|
4
|
+
export interface SvgProps extends Omit<Object3DProps, 'ref'> {
|
|
5
|
+
src: string;
|
|
6
|
+
skipFill?: boolean;
|
|
7
|
+
skipStrokes?: boolean;
|
|
8
|
+
fillMaterial?: MeshBasicMaterialProps;
|
|
9
|
+
strokeMaterial?: MeshBasicMaterialProps;
|
|
10
|
+
fillMeshProps?: MeshProps;
|
|
11
|
+
strokeMeshProps?: MeshProps;
|
|
12
|
+
}
|
|
13
|
+
export declare const Svg: React.ForwardRefExoticComponent<SvgProps & React.RefAttributes<Object3D<import("three").Event>>>;
|
package/core/Svg.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import _extends from '@babel/runtime/helpers/esm/extends';
|
|
2
|
+
import { useLoader } from '@react-three/fiber';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { forwardRef, useMemo, useEffect, Fragment } from 'react';
|
|
5
|
+
import { DoubleSide } from 'three';
|
|
6
|
+
import { SVGLoader } from 'three-stdlib';
|
|
7
|
+
|
|
8
|
+
const Svg = /*#__PURE__*/forwardRef(function R3FSvg({
|
|
9
|
+
src,
|
|
10
|
+
skipFill,
|
|
11
|
+
skipStrokes,
|
|
12
|
+
fillMaterial,
|
|
13
|
+
strokeMaterial,
|
|
14
|
+
fillMeshProps,
|
|
15
|
+
strokeMeshProps,
|
|
16
|
+
...props
|
|
17
|
+
}, ref) {
|
|
18
|
+
const svg = useLoader(SVGLoader, !src.startsWith('<svg') ? src : `data:image/svg+xml;utf8,${src}`);
|
|
19
|
+
const strokeGeometries = useMemo(() => skipStrokes ? [] : svg.paths.map(path => {
|
|
20
|
+
var _path$userData;
|
|
21
|
+
|
|
22
|
+
return ((_path$userData = path.userData) == null ? void 0 : _path$userData.style.stroke) === undefined || path.userData.style.stroke === 'none' ? null : path.subPaths.map(subPath => SVGLoader.pointsToStroke(subPath.getPoints(), path.userData.style));
|
|
23
|
+
}), [svg, skipStrokes]);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
return () => strokeGeometries.forEach(group => group && group.map(g => g.dispose()));
|
|
26
|
+
}, [strokeGeometries]);
|
|
27
|
+
return /*#__PURE__*/React.createElement("object3D", _extends({
|
|
28
|
+
ref: ref
|
|
29
|
+
}, props), /*#__PURE__*/React.createElement("object3D", {
|
|
30
|
+
scale: [1, -1, 1]
|
|
31
|
+
}, svg.paths.map((path, p) => {
|
|
32
|
+
var _path$userData2, _path$userData3;
|
|
33
|
+
|
|
34
|
+
return /*#__PURE__*/React.createElement(Fragment, {
|
|
35
|
+
key: p
|
|
36
|
+
}, !skipFill && ((_path$userData2 = path.userData) == null ? void 0 : _path$userData2.style.fill) !== undefined && path.userData.style.fill !== 'none' && SVGLoader.createShapes(path).map((shape, s) => /*#__PURE__*/React.createElement("mesh", _extends({
|
|
37
|
+
key: s
|
|
38
|
+
}, fillMeshProps), /*#__PURE__*/React.createElement("shapeGeometry", {
|
|
39
|
+
args: [shape]
|
|
40
|
+
}), /*#__PURE__*/React.createElement("meshBasicMaterial", _extends({
|
|
41
|
+
color: path.userData.style.fill,
|
|
42
|
+
opacity: path.userData.style.fillOpacity,
|
|
43
|
+
transparent: true,
|
|
44
|
+
side: DoubleSide,
|
|
45
|
+
depthWrite: false
|
|
46
|
+
}, fillMaterial)))), !skipStrokes && ((_path$userData3 = path.userData) == null ? void 0 : _path$userData3.style.stroke) !== undefined && path.userData.style.stroke !== 'none' && path.subPaths.map((_subPath, s) => /*#__PURE__*/React.createElement("mesh", _extends({
|
|
47
|
+
key: s,
|
|
48
|
+
geometry: strokeGeometries[p][s]
|
|
49
|
+
}, strokeMeshProps), /*#__PURE__*/React.createElement("meshBasicMaterial", _extends({
|
|
50
|
+
color: path.userData.style.stroke,
|
|
51
|
+
opacity: path.userData.style.strokeOpacity,
|
|
52
|
+
transparent: true,
|
|
53
|
+
side: DoubleSide,
|
|
54
|
+
depthWrite: false
|
|
55
|
+
}, strokeMaterial)))));
|
|
56
|
+
})));
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
export { Svg };
|
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("./CatmullRomLine.cjs.js"),o=require("./Line.cjs.js"),i=require("./PositionalAudio.cjs.js"),u=require("./Text.cjs.js"),a=require("./Text3D.cjs.js"),n=require("./Effects.cjs.js"),c=require("./GradientTexture.cjs.js"),j=require("./Image.cjs.js"),p=require("./Edges.cjs.js"),x=require("./Trail.cjs.js"),l=require("./Sampler.cjs.js"),q=require("./ComputedAttribute.cjs.js"),d=require("./Clone.cjs.js"),m=require("./MarchingCubes.cjs.js"),C=require("./Decal.cjs.js"),h=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("./CatmullRomLine.cjs.js"),o=require("./Line.cjs.js"),i=require("./PositionalAudio.cjs.js"),u=require("./Text.cjs.js"),a=require("./Text3D.cjs.js"),n=require("./Effects.cjs.js"),c=require("./GradientTexture.cjs.js"),j=require("./Image.cjs.js"),p=require("./Edges.cjs.js"),x=require("./Trail.cjs.js"),l=require("./Sampler.cjs.js"),q=require("./ComputedAttribute.cjs.js"),d=require("./Clone.cjs.js"),m=require("./MarchingCubes.cjs.js"),C=require("./Decal.cjs.js"),h=require("./Svg.cjs.js"),M=require("./OrthographicCamera.cjs.js"),S=require("./PerspectiveCamera.cjs.js"),P=require("./CubeCamera.cjs.js"),b=require("./DeviceOrientationControls.cjs.js"),B=require("./FlyControls.cjs.js"),f=require("./MapControls.cjs.js"),g=require("./OrbitControls.cjs.js"),T=require("./TrackballControls.cjs.js"),v=require("./ArcballControls.cjs.js"),A=require("./TransformControls.cjs.js"),L=require("./PointerLockControls.cjs.js"),k=require("./FirstPersonControls.cjs.js"),D=require("./GizmoHelper.cjs.js"),E=require("./GizmoViewcube.cjs.js"),R=require("./GizmoViewport.cjs.js"),G=require("./useCubeTexture.cjs.js"),w=require("./useFBX.cjs.js"),z=require("./useGLTF.cjs.js"),F=require("./useKTX2.cjs.js"),O=require("./useProgress.cjs.js"),I=require("./useTexture.cjs.js"),V=require("./useVideoTexture.cjs.js"),y=require("./Stats.cjs.js"),H=require("./useDepthBuffer.cjs.js"),Q=require("./useAspect.cjs.js"),X=require("./useCamera.cjs.js"),K=require("./useDetectGPU.cjs.js"),W=require("./useHelper.cjs.js"),N=require("./useBVH.cjs.js"),U=require("./useContextBridge.cjs.js"),_=require("./useAnimations.cjs.js"),J=require("./useFBO.cjs.js"),Y=require("./useIntersect.cjs.js"),Z=require("./useBoxProjectedEnv.cjs.js"),$=require("./BBAnchor.cjs.js"),ee=require("./CurveModifier.cjs.js"),re=require("./MeshDistortMaterial.cjs.js"),se=require("./MeshWobbleMaterial.cjs.js"),te=require("./MeshReflectorMaterial.cjs.js"),oe=require("./MeshRefractionMaterial.cjs.js"),ie=require("./PointMaterial.cjs.js"),ue=require("./shaderMaterial.cjs.js"),ae=require("./softShadows.cjs.js"),ne=require("./shapes.cjs.js"),ce=require("./RoundedBox.cjs.js"),je=require("./ScreenQuad.cjs.js"),pe=require("./Center.cjs.js"),xe=require("./Bounds.cjs.js"),le=require("./CameraShake.cjs.js"),qe=require("./Float.cjs.js"),de=require("./Stage.cjs.js"),me=require("./Backdrop.cjs.js"),Ce=require("./Shadow.cjs.js"),he=require("./ContactShadows.cjs.js"),Me=require("./AccumulativeShadows.cjs.js"),Se=require("./Reflector.cjs.js"),Pe=require("./SpotLight.cjs.js"),be=require("./Environment.cjs.js"),Be=require("./Lightformer.cjs.js"),fe=require("./Sky.cjs.js"),ge=require("./Stars.cjs.js"),Te=require("./Cloud.cjs.js"),ve=require("./Sparkles.cjs.js"),Ae=require("./useMatcapTexture.cjs.js"),Le=require("./useNormalTexture.cjs.js"),ke=require("./Points.cjs.js"),De=require("./Instances.cjs.js"),Ee=require("./Segments.cjs.js"),Re=require("./Detailed.cjs.js"),Ge=require("./Preload.cjs.js"),we=require("./BakeShadows.cjs.js"),ze=require("./meshBounds.cjs.js"),Fe=require("./AdaptiveDpr.cjs.js"),Oe=require("./AdaptiveEvents.cjs.js"),Ie=require("./PerformanceMonitor.cjs.js"),Ve=require("./RenderTexture.cjs.js"),ye=require("./Mask.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("../materials/MeshRefractionMaterial.cjs.js"),require("../helpers/environment-assets.cjs.js"),require("../materials/SpotLightMaterial.cjs.js"),require("react-composer"),exports.Billboard=e.Billboard,exports.QuadraticBezierLine=r.QuadraticBezierLine,exports.CubicBezierLine=s.CubicBezierLine,exports.CatmullRomLine=t.CatmullRomLine,exports.Line=o.Line,exports.PositionalAudio=i.PositionalAudio,exports.Text=u.Text,exports.Text3D=a.Text3D,exports.Effects=n.Effects,exports.isWebGL2Available=n.isWebGL2Available,exports.GradientTexture=c.GradientTexture,exports.Image=j.Image,exports.Edges=p.Edges,exports.Trail=x.Trail,exports.useTrail=x.useTrail,exports.Sampler=l.Sampler,exports.useSurfaceSampler=l.useSurfaceSampler,exports.ComputedAttribute=q.ComputedAttribute,exports.Clone=d.Clone,exports.MarchingCube=m.MarchingCube,exports.MarchingCubes=m.MarchingCubes,exports.MarchingPlane=m.MarchingPlane,exports.Decal=C.Decal,exports.Svg=h.Svg,exports.OrthographicCamera=M.OrthographicCamera,exports.PerspectiveCamera=S.PerspectiveCamera,exports.CubeCamera=P.CubeCamera,exports.DeviceOrientationControls=b.DeviceOrientationControls,exports.FlyControls=B.FlyControls,exports.MapControls=f.MapControls,exports.OrbitControls=g.OrbitControls,exports.TrackballControls=T.TrackballControls,exports.ArcballControls=v.ArcballControls,exports.TransformControls=A.TransformControls,exports.PointerLockControls=L.PointerLockControls,exports.FirstPersonControls=k.FirstPersonControls,exports.GizmoHelper=D.GizmoHelper,exports.useGizmoContext=D.useGizmoContext,exports.GizmoViewcube=E.GizmoViewcube,exports.GizmoViewport=R.GizmoViewport,exports.useCubeTexture=G.useCubeTexture,exports.useFBX=w.useFBX,exports.useGLTF=z.useGLTF,exports.useKTX2=F.useKTX2,exports.useProgress=O.useProgress,exports.IsObject=I.IsObject,exports.useTexture=I.useTexture,exports.useVideoTexture=V.useVideoTexture,exports.Stats=y.Stats,exports.useDepthBuffer=H.useDepthBuffer,exports.useAspect=Q.useAspect,exports.useCamera=X.useCamera,exports.useDetectGPU=K.useDetectGPU,exports.useHelper=W.useHelper,exports.useBVH=N.useBVH,exports.useContextBridge=U.useContextBridge,exports.useAnimations=_.useAnimations,exports.useFBO=J.useFBO,exports.useIntersect=Y.useIntersect,exports.useBoxProjectedEnv=Z.useBoxProjectedEnv,exports.BBAnchor=$.BBAnchor,exports.CurveModifier=ee.CurveModifier,exports.MeshDistortMaterial=re.MeshDistortMaterial,exports.MeshWobbleMaterial=se.MeshWobbleMaterial,exports.MeshReflectorMaterial=te.MeshReflectorMaterial,exports.MeshRefractionMaterial=oe.MeshRefractionMaterial,exports.PointMaterial=ie.PointMaterial,exports.PointMaterialImpl=ie.PointMaterialImpl,exports.shaderMaterial=ue.shaderMaterial,exports.softShadows=ae.softShadows,exports.Box=ne.Box,exports.Capsule=ne.Capsule,exports.Circle=ne.Circle,exports.Cone=ne.Cone,exports.Cylinder=ne.Cylinder,exports.Dodecahedron=ne.Dodecahedron,exports.Extrude=ne.Extrude,exports.Icosahedron=ne.Icosahedron,exports.Lathe=ne.Lathe,exports.Octahedron=ne.Octahedron,exports.Plane=ne.Plane,exports.Polyhedron=ne.Polyhedron,exports.Ring=ne.Ring,exports.Sphere=ne.Sphere,exports.Tetrahedron=ne.Tetrahedron,exports.Torus=ne.Torus,exports.TorusKnot=ne.TorusKnot,exports.Tube=ne.Tube,exports.RoundedBox=ce.RoundedBox,exports.ScreenQuad=je.ScreenQuad,exports.Center=pe.Center,exports.Bounds=xe.Bounds,exports.useBounds=xe.useBounds,exports.CameraShake=le.CameraShake,exports.Float=qe.Float,exports.Stage=de.Stage,exports.Backdrop=me.Backdrop,exports.Shadow=Ce.Shadow,exports.ContactShadows=he.ContactShadows,exports.AccumulativeShadows=Me.AccumulativeShadows,exports.RandomizedLight=Me.RandomizedLight,exports.accumulativeContext=Me.accumulativeContext,exports.Reflector=Se.Reflector,exports.SpotLight=Pe.SpotLight,exports.Environment=be.Environment,exports.EnvironmentCube=be.EnvironmentCube,exports.EnvironmentMap=be.EnvironmentMap,exports.EnvironmentPortal=be.EnvironmentPortal,exports.useEnvironment=be.useEnvironment,exports.Lightformer=Be.Lightformer,exports.Sky=fe.Sky,exports.calcPosFromAngles=fe.calcPosFromAngles,exports.Stars=ge.Stars,exports.Cloud=Te.Cloud,exports.Sparkles=ve.Sparkles,exports.useMatcapTexture=Ae.useMatcapTexture,exports.useNormalTexture=Le.useNormalTexture,exports.Point=ke.Point,exports.Points=ke.Points,exports.PointsBuffer=ke.PointsBuffer,exports.PositionPoint=ke.PositionPoint,exports.Instance=De.Instance,exports.Instances=De.Instances,exports.Merged=De.Merged,exports.Segment=Ee.Segment,exports.SegmentObject=Ee.SegmentObject,exports.Segments=Ee.Segments,exports.Detailed=Re.Detailed,exports.Preload=Ge.Preload,exports.BakeShadows=we.BakeShadows,exports.meshBounds=ze.meshBounds,exports.AdaptiveDpr=Fe.AdaptiveDpr,exports.AdaptiveEvents=Oe.AdaptiveEvents,exports.PerformanceMonitor=Ie.PerformanceMonitor,exports.usePerformanceMonitor=Ie.usePerformanceMonitor,exports.RenderTexture=Ve.RenderTexture,exports.Mask=ye.Mask,exports.useMask=ye.useMask;
|
package/core/index.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export * from './ComputedAttribute';
|
|
|
16
16
|
export * from './Clone';
|
|
17
17
|
export * from './MarchingCubes';
|
|
18
18
|
export * from './Decal';
|
|
19
|
+
export * from './Svg';
|
|
19
20
|
export * from './OrthographicCamera';
|
|
20
21
|
export * from './PerspectiveCamera';
|
|
21
22
|
export * from './CubeCamera';
|
package/core/index.js
CHANGED
|
@@ -16,6 +16,7 @@ export { ComputedAttribute } from './ComputedAttribute.js';
|
|
|
16
16
|
export { Clone } from './Clone.js';
|
|
17
17
|
export { MarchingCube, MarchingCubes, MarchingPlane } from './MarchingCubes.js';
|
|
18
18
|
export { Decal } from './Decal.js';
|
|
19
|
+
export { Svg } from './Svg.js';
|
|
19
20
|
export { OrthographicCamera } from './OrthographicCamera.js';
|
|
20
21
|
export { PerspectiveCamera } from './PerspectiveCamera.js';
|
|
21
22
|
export { CubeCamera } from './CubeCamera.js';
|