@react-three/drei 9.111.1 → 9.111.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/GizmoHelper.cjs.js +1 -1
- package/core/GizmoHelper.js +8 -2
- package/core/Instances.cjs.js +1 -1
- package/core/Instances.d.ts +2 -0
- package/core/Instances.js +10 -2
- package/index.cjs.js +1 -1
- package/package.json +1 -1
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"),o=require("./Hud.cjs.js");function
|
|
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"),o=require("./Hud.cjs.js");function i(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}require("@babel/runtime/helpers/extends"),require("./Fbo.cjs.js");var u=i(e);const a=u.createContext({}),c=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,m=e=>"getTarget"in e;exports.GizmoHelper=({alignment:e="bottom-right",margin:i=[80,80],renderPriority:g=1,onUpdate:y,onTarget:b,children:j})=>{const w=r.useThree((e=>e.size)),v=r.useThree((e=>e.camera)),q=r.useThree((e=>e.controls)),x=r.useThree((e=>e.invalidate)),O=u.useRef(null),T=u.useRef(null),P=u.useRef(!1),C=u.useRef(0),R=u.useRef(new t.Vector3(0,0,0)),z=u.useRef(new t.Vector3(0,0,0));u.useEffect((()=>{z.current.copy(v.up)}),[v]);const E=u.useCallback((e=>{P.current=!0,(q||b)&&(R.current=(null==b?void 0:b())||(m(q)?q.getTarget(R.current):null==q?void 0:q.target)),C.current=v.position.distanceTo(f),p.copy(v.quaternion),h.copy(e).multiplyScalar(C.current).add(f),s.lookAt(h),s.up.copy(v.up),d.copy(s.quaternion),x()}),[q,v,b,x]);r.useFrame(((e,r)=>{if(T.current&&O.current){var t;if(P.current)if(p.angleTo(d)<.01)P.current=!1,"minPolarAngle"in q&&v.up.copy(z.current);else{const e=r*c;p.rotateTowards(d,e),v.position.set(0,0,1).applyQuaternion(p).multiplyScalar(C.current).add(R.current),v.up.set(0,1,0).applyQuaternion(p).normalize(),v.quaternion.copy(p),m(q)&&q.setPosition(v.position.x,v.position.y,v.position.z),y?y():q&&q.update(r),x()}l.copy(v.matrix).invert(),null==(t=O.current)||t.quaternion.setFromRotationMatrix(l)}}));const M=u.useMemo((()=>({tweenCamera:E})),[E]),[k,Q]=i,V=e.endsWith("-center")?0:e.endsWith("-left")?-w.width/2+k:w.width/2-k,W=e.startsWith("center-")?0:e.startsWith("top-")?w.height/2-Q:-w.height/2+Q;return u.createElement(o.Hud,{renderPriority:g},u.createElement(a.Provider,{value:M},u.createElement(n.OrthographicCamera,{makeDefault:!0,ref:T,position:[0,0,200]}),u.createElement("group",{ref:O,position:[V,W,0]},j)))},exports.useGizmoContext=()=>u.useContext(a);
|
package/core/GizmoHelper.js
CHANGED
|
@@ -17,6 +17,9 @@ const targetPosition = /* @__PURE__ */new Vector3();
|
|
|
17
17
|
const isOrbitControls = controls => {
|
|
18
18
|
return 'minPolarAngle' in controls;
|
|
19
19
|
};
|
|
20
|
+
const isCameraControls = controls => {
|
|
21
|
+
return 'getTarget' in controls;
|
|
22
|
+
};
|
|
20
23
|
const GizmoHelper = ({
|
|
21
24
|
alignment = 'bottom-right',
|
|
22
25
|
margin = [80, 80],
|
|
@@ -41,7 +44,9 @@ const GizmoHelper = ({
|
|
|
41
44
|
}, [mainCamera]);
|
|
42
45
|
const tweenCamera = React.useCallback(direction => {
|
|
43
46
|
animating.current = true;
|
|
44
|
-
if (defaultControls || onTarget)
|
|
47
|
+
if (defaultControls || onTarget) {
|
|
48
|
+
focusPoint.current = (onTarget == null ? void 0 : onTarget()) || (isCameraControls(defaultControls) ? defaultControls.getTarget(focusPoint.current) : defaultControls == null ? void 0 : defaultControls.target);
|
|
49
|
+
}
|
|
45
50
|
radius.current = mainCamera.position.distanceTo(target);
|
|
46
51
|
|
|
47
52
|
// Rotate from current camera orientation
|
|
@@ -75,7 +80,8 @@ const GizmoHelper = ({
|
|
|
75
80
|
mainCamera.position.set(0, 0, 1).applyQuaternion(q1).multiplyScalar(radius.current).add(focusPoint.current);
|
|
76
81
|
mainCamera.up.set(0, 1, 0).applyQuaternion(q1).normalize();
|
|
77
82
|
mainCamera.quaternion.copy(q1);
|
|
78
|
-
if (
|
|
83
|
+
if (isCameraControls(defaultControls)) defaultControls.setPosition(mainCamera.position.x, mainCamera.position.y, mainCamera.position.z);
|
|
84
|
+
if (onUpdate) onUpdate();else if (defaultControls) defaultControls.update(delta);
|
|
79
85
|
invalidate();
|
|
80
86
|
}
|
|
81
87
|
}
|
package/core/Instances.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),a=require("react-composer"),c=require("../helpers/deprecated.cjs.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),a=require("react-composer"),c=require("../helpers/deprecated.cjs.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var u=s(e),o=i(t),l=i(r),f=s(a);const d=new o.Matrix4,m=new o.Matrix4,y=[],p=new o.Mesh;class g extends o.Group{constructor(){super(),this.color=new o.Color("white"),this.instance={current:void 0},this.instanceKey={current:void 0}}get geometry(){var e;return null==(e=this.instance.current)?void 0:e.geometry}raycast(e,t){const r=this.instance.current;if(!r)return;if(!r.geometry||!r.material)return;p.geometry=r.geometry;const n=r.matrixWorld,a=r.userData.instances.indexOf(this.instanceKey);if(!(-1===a||a>r.count)){r.getMatrixAt(a,d),m.multiplyMatrices(n,d),p.matrixWorld=m,r.material instanceof o.Material?p.material.side=r.material.side:p.material.side=r.material[0].side,p.raycast(e,y);for(let e=0,r=y.length;e<r;e++){const r=y[e];r.instanceId=a,r.object=this,t.push(r)}y.length=0}}}const x=l.createContext(null),h=new o.Matrix4,b=new o.Matrix4,w=new o.Matrix4,M=new o.Vector3,A=new o.Quaternion,v=new o.Vector3,E=l.forwardRef((({context:e,children:t,...r},a)=>{l.useMemo((()=>n.extend({PositionMesh:g})),[]);const c=l.useRef();l.useImperativeHandle(a,(()=>c.current),[]);const{subscribe:s,getParent:i}=l.useContext(e||x);return l.useLayoutEffect((()=>s(c)),[]),l.createElement("positionMesh",u.default({instance:i(),instanceKey:c,ref:c},r),t)})),j=l.forwardRef((({context:e,children:t,range:r,limit:a=1e3,frames:s=1/0,...i},f)=>{const[{localContext:d,instance:m}]=l.useState((()=>{const e=l.createContext(null);return{localContext:e,instance:l.forwardRef(((t,r)=>l.createElement(E,u.default({context:e},t,{ref:r}))))}})),y=l.useRef(null);l.useImperativeHandle(f,(()=>y.current),[]);const[p,g]=l.useState([]),[[j,D]]=l.useState((()=>{const e=new Float32Array(16*a);for(let t=0;t<a;t++)w.identity().toArray(e,16*t);return[e,new Float32Array([...new Array(3*a)].map((()=>1)))]}));l.useEffect((()=>{y.current.instanceMatrix.needsUpdate=!0}));let R=0,O=0;const C=l.useRef([]);l.useLayoutEffect((()=>{C.current=Object.entries(y.current.geometry.attributes).filter((([e,t])=>t.isInstancedBufferAttribute))})),n.useFrame((()=>{if(s===1/0||R<s){y.current.updateMatrix(),y.current.updateMatrixWorld(),h.copy(y.current.matrixWorld).invert(),O=Math.min(a,void 0!==r?r:a,p.length),y.current.count=O,c.setUpdateRange(y.current.instanceMatrix,{offset:0,count:16*O}),c.setUpdateRange(y.current.instanceColor,{offset:0,count:3*O});for(let e=0;e<p.length;e++){const t=p[e].current;t.matrixWorld.decompose(M,A,v),b.compose(M,A,v).premultiply(h),b.toArray(j,16*e),y.current.instanceMatrix.needsUpdate=!0,t.color.toArray(D,3*e),y.current.instanceColor.needsUpdate=!0}R++}}));const U=l.useMemo((()=>({getParent:()=>y,subscribe:e=>(g((t=>[...t,e])),()=>g((t=>t.filter((t=>t.current!==e.current)))))})),[]);return l.createElement("instancedMesh",u.default({userData:{instances:p,limit:a,frames:s},matrixAutoUpdate:!1,ref:y,args:[null,null,0],raycast:()=>null},i),l.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:j.length/16,array:j,itemSize:16,usage:o.DynamicDrawUsage}),l.createElement("instancedBufferAttribute",{attach:"instanceColor",count:D.length/3,array:D,itemSize:3,usage:o.DynamicDrawUsage}),"function"==typeof t?l.createElement(d.Provider,{value:U},t(m)):e?l.createElement(e.Provider,{value:U},t):l.createElement(x.Provider,{value:U},t))})),D=l.forwardRef((function({meshes:e,children:t,...r},n){const a=Array.isArray(e);if(!a)for(const t of Object.keys(e))e[t].isMesh||delete e[t];return l.createElement("group",{ref:n},l.createElement(f.default,{components:(a?e:Object.values(e)).map((({geometry:e,material:t})=>l.createElement(j,u.default({key:e.uuid,geometry:e,material:t},r))))},(r=>a?t(...r):t(Object.keys(e).filter((t=>e[t].isMesh)).reduce(((e,t,n)=>({...e,[t]:r[n]})),{})))))}));const R=l.forwardRef((({name:e,defaultValue:t,normalized:r,usage:a=o.DynamicDrawUsage},c)=>{const s=l.useRef(null);l.useImperativeHandle(c,(()=>s.current),[]),l.useLayoutEffect((()=>{const r=s.current.__r3f.parent;r.geometry.attributes[e]=s.current;const n=Array.isArray(t)?t:[t],a=Array.from({length:r.userData.limit},(()=>n)).flat();return s.current.array=new Float32Array(a),s.current.itemSize=n.length,s.current.count=a.length/s.current.itemSize,()=>{delete r.geometry.attributes[e]}}),[e]);let i=0;return n.useFrame((()=>{const t=s.current.__r3f.parent;if(t.userData.frames===1/0||i<t.userData.frames){for(let r=0;r<t.userData.instances.length;r++){const n=t.userData.instances[r].current[e];void 0!==n&&(s.current.set(Array.isArray(n)?n:"function"==typeof n.toArray?n.toArray():[n],r*s.current.itemSize),s.current.needsUpdate=!0)}i++}})),l.createElement("instancedBufferAttribute",{ref:s,usage:a,normalized:r})}));exports.Instance=E,exports.InstancedAttribute=R,exports.Instances=j,exports.Merged=D,exports.createInstances=function(){const e=l.createContext(null);return[l.forwardRef(((t,r)=>l.createElement(j,u.default({ref:r,context:e},t)))),l.forwardRef(((t,r)=>l.createElement(E,u.default({ref:r,context:e},t))))]};
|
package/core/Instances.d.ts
CHANGED
|
@@ -25,6 +25,8 @@ export type InstanceProps = JSX.IntrinsicElements['positionMesh'] & {
|
|
|
25
25
|
export type InstancedAttributeProps = JSX.IntrinsicElements['instancedBufferAttribute'] & {
|
|
26
26
|
name: string;
|
|
27
27
|
defaultValue: any;
|
|
28
|
+
normalized?: boolean;
|
|
29
|
+
usage?: number;
|
|
28
30
|
};
|
|
29
31
|
type InstancedMesh = Omit<THREE.InstancedMesh, 'instanceMatrix' | 'instanceColor'> & {
|
|
30
32
|
instanceMatrix: THREE.InstancedBufferAttribute;
|
package/core/Instances.js
CHANGED
|
@@ -217,6 +217,11 @@ const Merged = /* @__PURE__ */React.forwardRef(function Merged({
|
|
|
217
217
|
[key]: args[i]
|
|
218
218
|
}), {}))));
|
|
219
219
|
});
|
|
220
|
+
|
|
221
|
+
/** Idea and implementation for global instances and instanced attributes by
|
|
222
|
+
/* Matias Gonzalez Fernandez https://x.com/matiNotFound
|
|
223
|
+
/* and Paul Henschel https://x.com/0xca0a
|
|
224
|
+
*/
|
|
220
225
|
function createInstances() {
|
|
221
226
|
const context = /*#__PURE__*/React.createContext(null);
|
|
222
227
|
return [/*#__PURE__*/React.forwardRef((props, fref) => /*#__PURE__*/React.createElement(Instances, _extends({
|
|
@@ -229,7 +234,9 @@ function createInstances() {
|
|
|
229
234
|
}
|
|
230
235
|
const InstancedAttribute = /*#__PURE__*/React.forwardRef(({
|
|
231
236
|
name,
|
|
232
|
-
defaultValue
|
|
237
|
+
defaultValue,
|
|
238
|
+
normalized,
|
|
239
|
+
usage = THREE.DynamicDrawUsage
|
|
233
240
|
}, fref) => {
|
|
234
241
|
const ref = React.useRef(null);
|
|
235
242
|
React.useImperativeHandle(fref, () => ref.current, []);
|
|
@@ -264,7 +271,8 @@ const InstancedAttribute = /*#__PURE__*/React.forwardRef(({
|
|
|
264
271
|
});
|
|
265
272
|
return /*#__PURE__*/React.createElement("instancedBufferAttribute", {
|
|
266
273
|
ref: ref,
|
|
267
|
-
usage:
|
|
274
|
+
usage: usage,
|
|
275
|
+
normalized: normalized
|
|
268
276
|
});
|
|
269
277
|
});
|
|
270
278
|
|