@react-three/drei 9.82.1 → 9.83.1
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 +3 -1
- package/core/Outlines.cjs.js +1 -1
- package/core/Outlines.d.ts +10 -8
- package/core/Outlines.js +13 -1
- package/core/SpriteAnimator.cjs.js +1 -1
- package/core/SpriteAnimator.d.ts +1 -0
- package/core/SpriteAnimator.js +18 -1
- package/index.cjs.js +1 -1
- package/package.json +1 -1
- package/react-three-drei-0.0.0-semantic-release.tgz +0 -0
package/README.md
CHANGED
|
@@ -1403,7 +1403,7 @@ Abstracts [THREE.EdgesGeometry](https://threejs.org/docs/#api/en/geometries/Edge
|
|
|
1403
1403
|
<a href="https://codesandbox.io/s/2gh6jf"><img width="20%" src="https://codesandbox.io/api/v1/sandboxes/2gh6jf/screenshot.png" alt="Demo"/></a>
|
|
1404
1404
|
</p>
|
|
1405
1405
|
|
|
1406
|
-
An ornamental component that extracts the geometry from its parent and displays an [inverted-hull outline](https://bnpr.gitbook.io/bnpr/outline/inverse-hull-method).
|
|
1406
|
+
An ornamental component that extracts the geometry from its parent and displays an [inverted-hull outline](https://bnpr.gitbook.io/bnpr/outline/inverse-hull-method). Supported parents are `<mesh>`, `<skinnedMesh>` and `<instancedMesh>`.
|
|
1407
1407
|
|
|
1408
1408
|
```tsx
|
|
1409
1409
|
type OutlinesProps = JSX.IntrinsicElements['group'] & {
|
|
@@ -2358,6 +2358,8 @@ type Props = {
|
|
|
2358
2358
|
flipX?: boolean
|
|
2359
2359
|
/** Sets the alpha value to be used when running an alpha test. https://threejs.org/docs/#api/en/materials/Material.alphaTest */
|
|
2360
2360
|
alphaTest?: number
|
|
2361
|
+
/** Displays the texture on a SpriteGeometry always facing the camera, if set to false, it renders on a PlaneGeometry */
|
|
2362
|
+
asSprite?: boolean
|
|
2361
2363
|
}
|
|
2362
2364
|
```
|
|
2363
2365
|
|
package/core/Outlines.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),n=require("three"),r=require("react"),t=require("./shaderMaterial.cjs.js"),i=require("@react-three/fiber"),o=require("three-stdlib");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var t=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,t.get?t:{enumerable:!0,get:function(){return e[r]}})}})),n.default=e,Object.freeze(n)}var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),n=require("three"),r=require("react"),t=require("./shaderMaterial.cjs.js"),i=require("@react-three/fiber"),o=require("three-stdlib");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var t=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,t.get?t:{enumerable:!0,get:function(){return e[r]}})}})),n.default=e,Object.freeze(n)}var s=a(e),l=c(n),d=c(r);const u=t.shaderMaterial({color:new l.Color("black"),opacity:1,thickness:.05},"#include <common>\n #include <morphtarget_pars_vertex>\n #include <skinning_pars_vertex>\n uniform float thickness;\n void main() {\n #if defined (USE_SKINNING)\n\t #include <beginnormal_vertex>\n #include <morphnormal_vertex>\n #include <skinbase_vertex>\n #include <skinnormal_vertex>\n #include <defaultnormal_vertex>\n #endif\n #include <begin_vertex>\n\t #include <morphtarget_vertex>\n\t #include <skinning_vertex>\n #include <project_vertex>\n vec4 transformedNormal = vec4(normal, 0.0);\n vec4 transformedPosition = vec4(transformed, 1.0);\n #ifdef USE_INSTANCING\n transformedNormal = instanceMatrix * transformedNormal;\n transformedPosition = instanceMatrix * transformedPosition;\n #endif\n vec3 newPosition = transformedPosition.xyz + transformedNormal.xyz * thickness;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0); \n }",`uniform vec3 color;\n uniform float opacity;\n void main(){\n gl_FragColor = vec4(color, opacity);\n #include <tonemapping_fragment>\n #include <${parseInt(l.REVISION.replace(/\D+/g,""))>=154?"colorspace_fragment":"encodings_fragment"}>\n }`);exports.Outlines=function({color:e="black",opacity:n=1,transparent:r=!1,thickness:t=.05,angle:a=Math.PI,...c}){const f=d.useRef(null);return d.useMemo((()=>i.extend({OutlinesMaterial:u})),[]),d.useLayoutEffect((()=>{const e=f.current,n=e.parent;if(n&&n.geometry){let r;return n.skeleton?(r=new l.SkinnedMesh,r.material=new u({side:l.BackSide}),r.bind(n.skeleton,n.bindMatrix),e.add(r)):n.isInstancedMesh?(r=new l.InstancedMesh(n.geometry,new u({side:l.BackSide}),n.count),r.instanceMatrix=n.instanceMatrix,e.add(r)):(r=new l.Mesh,r.material=new u({side:l.BackSide}),e.add(r)),r.geometry=a?o.toCreasedNormals(n.geometry,a):n.geometry,()=>{i.dispose(r),e.clear()}}}),[a]),d.useLayoutEffect((()=>{const o=f.current.children[0];o&&i.applyProps(o.material,{transparent:r,thickness:t,color:e,opacity:n})}),[a,r,t,e,n]),d.createElement("group",s.default({ref:f},c))};
|
package/core/Outlines.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
color
|
|
5
|
-
opacity
|
|
6
|
-
transparent
|
|
7
|
-
thickness
|
|
8
|
-
angle
|
|
9
|
-
}
|
|
2
|
+
import { ReactThreeFiber } from '@react-three/fiber';
|
|
3
|
+
declare type OutlinesProps = JSX.IntrinsicElements['group'] & {
|
|
4
|
+
color: ReactThreeFiber.Color;
|
|
5
|
+
opacity: number;
|
|
6
|
+
transparent: boolean;
|
|
7
|
+
thickness: number;
|
|
8
|
+
angle: number;
|
|
9
|
+
};
|
|
10
|
+
export declare function Outlines({ color, opacity, transparent, thickness, angle, ...props }: OutlinesProps): JSX.Element;
|
|
11
|
+
export {};
|
package/core/Outlines.js
CHANGED
|
@@ -25,7 +25,13 @@ const OutlinesMaterial = shaderMaterial({
|
|
|
25
25
|
#include <morphtarget_vertex>
|
|
26
26
|
#include <skinning_vertex>
|
|
27
27
|
#include <project_vertex>
|
|
28
|
-
|
|
28
|
+
vec4 transformedNormal = vec4(normal, 0.0);
|
|
29
|
+
vec4 transformedPosition = vec4(transformed, 1.0);
|
|
30
|
+
#ifdef USE_INSTANCING
|
|
31
|
+
transformedNormal = instanceMatrix * transformedNormal;
|
|
32
|
+
transformedPosition = instanceMatrix * transformedPosition;
|
|
33
|
+
#endif
|
|
34
|
+
vec3 newPosition = transformedPosition.xyz + transformedNormal.xyz * thickness;
|
|
29
35
|
gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0);
|
|
30
36
|
}`, `uniform vec3 color;
|
|
31
37
|
uniform float opacity;
|
|
@@ -60,6 +66,12 @@ function Outlines({
|
|
|
60
66
|
});
|
|
61
67
|
mesh.bind(parent.skeleton, parent.bindMatrix);
|
|
62
68
|
group.add(mesh);
|
|
69
|
+
} else if (parent.isInstancedMesh) {
|
|
70
|
+
mesh = new THREE.InstancedMesh(parent.geometry, new OutlinesMaterial({
|
|
71
|
+
side: THREE.BackSide
|
|
72
|
+
}), parent.count);
|
|
73
|
+
mesh.instanceMatrix = parent.instanceMatrix;
|
|
74
|
+
group.add(mesh);
|
|
63
75
|
} else {
|
|
64
76
|
mesh = new THREE.Mesh();
|
|
65
77
|
mesh.material = new OutlinesMaterial({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("@react-three/fiber"),t=require("three");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 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 a=n(e),u=n(t);exports.SpriteAnimator=({startFrame:e,endFrame:t,fps:n,frameName:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("@react-three/fiber"),t=require("three");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 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 a=n(e),u=n(t);exports.SpriteAnimator=({startFrame:e,endFrame:t,fps:n,frameName:s,textureDataURL:c,textureImageURL:f,loop:o,numberOfFrames:m,autoPlay:l,animationNames:i,onStart:p,onEnd:h,onLoopEnd:w,onFrame:y,play:d,pause:S,flipX:g,alphaTest:x,children:b,asSprite:E,...z},F)=>{r.useThree((e=>e.viewport));const A=a.useRef(null),[R,O]=a.useState(!1),j=a.useRef(!1),v=a.useRef(),L=a.useRef(),T=a.useRef(window.performance.now()),M=a.useRef(),P=a.useRef(e||0),N=a.useRef(s||""),k=1e3/(n||30),[_,q]=a.useState(new u.Texture),D=a.useRef(0),[C,I]=a.useState([1,1,1]),U=g?-1:1,[B,G]=a.useState(null==E||E);const W=(e,r)=>{const t=r/e;return L.current.scale.set(1,t,1),[1,t,1]};a.useEffect((()=>{if(c&&f)!function(e,r,t){const n=new u.TextureLoader,a=fetch(e).then((e=>e.json())),s=new Promise((e=>{n.load(r,e)}));Promise.all([a,s]).then((e=>{t(e[0],e[1])}))}(c,f,X);else if(f){const e=new u.TextureLoader;new Promise((r=>{e.load(f,r)})).then((e=>{X(null,e)}))}}),[]),a.useEffect((()=>{G(null==E||E)}),[E]),a.useLayoutEffect((()=>{J()}),[_,g]),a.useEffect((()=>{}),[S]),a.useEffect((()=>{N.current!==s&&s&&(P.current=0,N.current=s,j.current=!1)}),[s]);const X=(e,r)=>{if(null===e){if(r&&m){const e=r.image.width,t=r.image.height,n=e/m,a=t;if(M.current=r,D.current=m,A.current={frames:[],meta:{version:"1.0",size:{w:e,h:t},scale:"1"}},parseInt(n.toString(),10)===n)for(let e=0;e<m;e++)A.current.frames.push({frame:{x:e*n,y:0,w:n,h:a},rotated:!1,trimmed:!1,spriteSourceSize:{x:0,y:0,w:n,h:a},sourceSize:{w:n,h:t}})}}else if(r){A.current=e,A.current.frames=Array.isArray(e.frames)?e.frames:H(),D.current=Array.isArray(e.frames)?e.frames.length:Object.keys(e.frames).length,M.current=r;const{w:t,h:n}=K(e.frames).sourceSize,a=W(t,n);I(a),v.current&&(v.current.map=r)}r.premultiplyAlpha=!1,q(r)},H=()=>{const e={},r=A.current,t=i;if(t)for(let n=0;n<t.length;n++){e[t[n]]=[];for(let a in r.frames){const u=r.frames[a],s=u.frame,c=s.x,f=s.y,o=s.w,m=s.h,l=u.sourceSize.w,i=u.sourceSize.h;"string"==typeof a&&-1!==a.toLowerCase().indexOf(t[n].toLowerCase())&&e[t[n]].push({x:c,y:f,w:o,h:m,frame:s,sourceSize:{w:l,h:i}})}}return e},J=()=>{if(!A.current)return;const{meta:{size:e},frames:r}=A.current,{w:t,h:n}=Array.isArray(r)?r[0].sourceSize:s&&r[s]?r[s][0].sourceSize:{w:0,h:0};v.current.map.wrapS=v.current.map.wrapT=u.RepeatWrapping,v.current.map.center.set(0,0),v.current.map.repeat.set(1*U/(e.w/t),1/(e.h/n));const a=1/((e.h-1)/n);v.current.map.offset.x=0,v.current.map.offset.y=1-a,O(!0),p&&p({currentFrameName:s,currentFrame:P.current})};r.useFrame(((r,n)=>{var a,u;null!=(a=A.current)&&a.frames&&null!=(u=v.current)&&u.map&&(S||j.current||!l&&!d||((()=>{const r=window.performance.now(),n=r-T.current,{meta:{size:a},frames:u}=A.current,{w:c,h:f}=K(u).sourceSize,m=Array.isArray(u)?u:s?u[s]:[];let l=0,i=0;const p=t||m.length-1;if(P.current>p&&(P.current=o&&null!=e?e:0,o?null==w||w({currentFrameName:s,currentFrame:P.current}):(null==h||h({currentFrameName:s,currentFrame:P.current}),j.current=!0),!o))return;if(n<=k)return;T.current=r-n%k,W(c,f);const y=(a.w-1)/c,d=(a.h-1)/f,{frame:{x:S,y:g},sourceSize:{w:x,h:b}}=m[P.current],E=1/y,z=1/d;l=U>0?E*(S/x):E*(S/x)-v.current.map.repeat.x,i=Math.abs(1-z)-z*(g/b),v.current.map.offset.x=l,v.current.map.offset.y=i,P.current+=1})(),y&&y({currentFrameName:N.current,currentFrame:P.current})))}));const K=e=>{if(Array.isArray(e))return e[0];if("object"==typeof e&&null!==e){return e[Object.keys(e)[0]][0]}return{w:0,h:0}};return a.createElement("group",z,a.createElement(a.Suspense,{fallback:null},B&&a.createElement("sprite",{ref:L,scale:C},a.createElement("spriteMaterial",{toneMapped:!1,ref:v,map:_,transparent:!0,alphaTest:null!=x?x:0})),!B&&a.createElement("mesh",{ref:L,scale:C},a.createElement("planeGeometry",{args:[1,1]}),a.createElement("meshBasicMaterial",{toneMapped:!1,side:u.DoubleSide,ref:v,map:_,transparent:!0,alphaTest:null!=x?x:0}))),b)};
|
package/core/SpriteAnimator.d.ts
CHANGED
package/core/SpriteAnimator.js
CHANGED
|
@@ -22,6 +22,7 @@ const SpriteAnimator = ({
|
|
|
22
22
|
flipX,
|
|
23
23
|
alphaTest,
|
|
24
24
|
children,
|
|
25
|
+
asSprite,
|
|
25
26
|
...props
|
|
26
27
|
}, fref) => {
|
|
27
28
|
useThree(state => state.viewport);
|
|
@@ -39,6 +40,7 @@ const SpriteAnimator = ({
|
|
|
39
40
|
const totalFrames = React.useRef(0);
|
|
40
41
|
const [aspect, setAspect] = React.useState([1, 1, 1]);
|
|
41
42
|
const flipOffset = flipX ? -1 : 1;
|
|
43
|
+
const [displayAsSprite, setDisplayAsSprite] = React.useState(asSprite !== null && asSprite !== void 0 ? asSprite : true);
|
|
42
44
|
|
|
43
45
|
function loadJsonAndTextureAndExecuteCallback(jsonUrl, textureUrl, callback) {
|
|
44
46
|
const textureLoader = new THREE.TextureLoader();
|
|
@@ -71,6 +73,9 @@ const SpriteAnimator = ({
|
|
|
71
73
|
});
|
|
72
74
|
}
|
|
73
75
|
}, []);
|
|
76
|
+
React.useEffect(() => {
|
|
77
|
+
setDisplayAsSprite(asSprite !== null && asSprite !== void 0 ? asSprite : true);
|
|
78
|
+
}, [asSprite]);
|
|
74
79
|
React.useLayoutEffect(() => {
|
|
75
80
|
modifySpritePosition();
|
|
76
81
|
}, [spriteTexture, flipX]);
|
|
@@ -330,7 +335,7 @@ const SpriteAnimator = ({
|
|
|
330
335
|
|
|
331
336
|
return /*#__PURE__*/React.createElement("group", props, /*#__PURE__*/React.createElement(React.Suspense, {
|
|
332
337
|
fallback: null
|
|
333
|
-
}, /*#__PURE__*/React.createElement("sprite", {
|
|
338
|
+
}, displayAsSprite && /*#__PURE__*/React.createElement("sprite", {
|
|
334
339
|
ref: spriteRef,
|
|
335
340
|
scale: aspect
|
|
336
341
|
}, /*#__PURE__*/React.createElement("spriteMaterial", {
|
|
@@ -339,6 +344,18 @@ const SpriteAnimator = ({
|
|
|
339
344
|
map: spriteTexture,
|
|
340
345
|
transparent: true,
|
|
341
346
|
alphaTest: alphaTest !== null && alphaTest !== void 0 ? alphaTest : 0.0
|
|
347
|
+
})), !displayAsSprite && /*#__PURE__*/React.createElement("mesh", {
|
|
348
|
+
ref: spriteRef,
|
|
349
|
+
scale: aspect
|
|
350
|
+
}, /*#__PURE__*/React.createElement("planeGeometry", {
|
|
351
|
+
args: [1, 1]
|
|
352
|
+
}), /*#__PURE__*/React.createElement("meshBasicMaterial", {
|
|
353
|
+
toneMapped: false,
|
|
354
|
+
side: THREE.DoubleSide,
|
|
355
|
+
ref: matRef,
|
|
356
|
+
map: spriteTexture,
|
|
357
|
+
transparent: true,
|
|
358
|
+
alphaTest: alphaTest !== null && alphaTest !== void 0 ? alphaTest : 0.0
|
|
342
359
|
}))), children);
|
|
343
360
|
};
|
|
344
361
|
|