@react-three/drei 7.22.0 → 7.22.4
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/Bounds.cjs.js +1 -1
- package/core/Bounds.d.ts +1 -1
- package/core/Bounds.js +5 -1
- package/core/GizmoViewport.cjs.js +1 -1
- package/core/GizmoViewport.d.ts +5 -1
- package/core/GizmoViewport.js +20 -10
- package/core/SpotLight.cjs.js +1 -1
- package/core/SpotLight.js +1 -1
- package/core/useNormalTexture.cjs.js +1 -1
- package/core/useNormalTexture.js +1 -1
- package/core/useTexture.js +1 -1
- package/index.cjs.js +1 -1
- package/package.json +1 -1
package/core/Bounds.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("three"),r=require("@react-three/fiber");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 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)}var a=o(e),n=o(t);const c=e=>e&&e.isOrthographicCamera,i=a.createContext(null);exports.Bounds=function({children:e,damping:t=6,fit:o,clip:s,margin:m=1.2,eps:u=.01}){const f=a.useRef(null),x=r.useThree((e=>e.camera)),p=r.useThree((e=>e.controls)),l=r.useThree((e=>e.invalidate));function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("three"),r=require("@react-three/fiber");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 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)}var a=o(e),n=o(t);const c=e=>e&&e.isOrthographicCamera,i=a.createContext(null);exports.Bounds=function({children:e,damping:t=6,fit:o,clip:s,margin:m=1.2,eps:u=.01}){const f=a.useRef(null),x=r.useThree((e=>e.camera)),p=r.useThree((e=>e.controls)),l=r.useThree((e=>e.invalidate));function y(e,t){return Math.abs(e.x-t.x)<u&&Math.abs(e.y-t.y)<u&&Math.abs(e.z-t.z)<u}function z(e,t,r,o){e.x=n.MathUtils.damp(e.x,t.x,r,o),e.y=n.MathUtils.damp(e.y,t.y,r,o),e.z=n.MathUtils.damp(e.z,t.z,r,o)}const[h]=a.useState((()=>({animating:!1,focus:new n.Vector3,camera:new n.Vector3,zoom:1}))),[d]=a.useState((()=>({focus:new n.Vector3,camera:new n.Vector3,zoom:1}))),M=a.useMemo((()=>{const e=new n.Box3;function r(){const t=e.getSize(new n.Vector3),r=e.getCenter(new n.Vector3),o=Math.max(t.x,t.y,t.z),a=c(x)?4*o:o/(2*Math.atan(Math.PI*x.fov/360)),i=c(x)?4*o:a/x.aspect;return{size:t,center:r,distance:m*Math.max(a,i)}}return{getSize:r,refresh(t){var r;if((r=t)&&r.isObject3D?e.setFromObject(t):(e=>e&&e.isBox3)(t)?e.copy(t):e.setFromObject(f.current),e.isEmpty()){const t=x.position.length()||10;e.setFromCenterAndSize(new n.Vector3,new n.Vector3(t,t,t))}return this},clip(){const{distance:e}=r();return p&&(p.maxDistance=10*e),x.near=e/100,x.far=100*e,x.updateProjectionMatrix(),p&&p.update(),this},fit(){h.camera.copy(x.position),p&&h.focus.copy(p.target);const{center:o,distance:a}=r(),i=o.clone().sub(x.position).normalize().multiplyScalar(a);if(d.camera.copy(o).sub(i),d.focus.copy(o),c(x)){h.zoom=x.zoom;let r=0,a=0;const c=[new n.Vector3(e.min.x,e.min.y,e.min.z),new n.Vector3(e.min.x,e.max.y,e.min.z),new n.Vector3(e.min.x,e.min.y,e.max.z),new n.Vector3(e.min.x,e.max.y,e.max.z),new n.Vector3(e.max.x,e.max.y,e.max.z),new n.Vector3(e.max.x,e.max.y,e.min.z),new n.Vector3(e.max.x,e.min.y,e.max.z),new n.Vector3(e.max.x,e.min.y,e.min.z)];o.applyMatrix4(x.matrixWorldInverse);for(const e of c)e.applyMatrix4(x.matrixWorldInverse),r=Math.max(r,Math.abs(e.y-o.y)),a=Math.max(a,Math.abs(e.x-o.x));r*=2,a*=2;const i=(x.top-x.bottom)/r,s=(x.right-x.left)/a;d.zoom=Math.min(i,s)/m,t||(x.zoom=d.zoom,x.updateProjectionMatrix())}return t?h.animating=!0:(x.position.copy(d.camera),x.lookAt(d.focus),p&&(p.target.copy(d.focus),p.update()),l()),this}}}),[x,p,m,t,l]);return a.useLayoutEffect((()=>{if(M.refresh(),o&&M.fit(),s&&M.clip(),p){const e=e=>h.animating=!1;return p.addEventListener("start",e),()=>p.removeEventListener("start",e)}}),[M,o,p]),r.useFrame(((e,r)=>{if(h.animating){if(z(h.focus,d.focus,t,r),z(h.camera,d.camera,t,r),h.zoom=n.MathUtils.damp(h.zoom,d.zoom,t,r),x.position.copy(h.camera),c(x)&&(x.zoom=h.zoom,x.updateProjectionMatrix()),p?(p.target.copy(h.focus),p.update()):x.lookAt(h.focus),l(),c(x)&&!(Math.abs(h.zoom-d.zoom)<u))return;if(!c(x)&&!y(h.camera,d.camera))return;if(p&&!y(h.focus,d.focus))return;h.animating=!1}})),a.createElement("group",{ref:f},a.createElement(i.Provider,{value:M},e))},exports.useBounds=function(){return a.useContext(i)};
|
package/core/Bounds.d.ts
CHANGED
package/core/Bounds.js
CHANGED
|
@@ -4,6 +4,10 @@ import { useThree, useFrame } from '@react-three/fiber';
|
|
|
4
4
|
|
|
5
5
|
const isOrthographic = def => def && def.isOrthographicCamera;
|
|
6
6
|
|
|
7
|
+
const isObject3D = def => def && def.isObject3D;
|
|
8
|
+
|
|
9
|
+
const isBox3 = def => def && def.isBox3;
|
|
10
|
+
|
|
7
11
|
const context = /*#__PURE__*/React.createContext(null);
|
|
8
12
|
function Bounds({
|
|
9
13
|
children,
|
|
@@ -61,7 +65,7 @@ function Bounds({
|
|
|
61
65
|
getSize,
|
|
62
66
|
|
|
63
67
|
refresh(object) {
|
|
64
|
-
box.setFromObject(object
|
|
68
|
+
if (isObject3D(object)) box.setFromObject(object);else if (isBox3(object)) box.copy(object);else box.setFromObject(ref.current);
|
|
65
69
|
|
|
66
70
|
if (box.isEmpty()) {
|
|
67
71
|
const max = camera.position.length() || 10;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),a=require("./GizmoHelper.cjs.js");function o(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("react"),r=require("three"),a=require("./GizmoHelper.cjs.js");function o(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("@react-three/fiber"),require("./OrthographicCamera.cjs.js"),require("react-merge-refs"),require("./useCamera.cjs.js");var n=o(e),i=l(t);function c({scale:e=[.8,.05,.05],color:t,rotation:r}){return i.createElement("group",{rotation:r},i.createElement("mesh",{position:[.4,0,0]},i.createElement("boxGeometry",{args:e}),i.createElement("meshBasicMaterial",{color:t,toneMapped:!1})))}function s({onClick:e,font:t,disabled:a,arcStyle:o,label:l,labelColor:c,axisHeadScale:s=1,...u}){const f=i.useMemo((()=>{const e=document.createElement("canvas");e.width=64,e.height=64;const a=e.getContext("2d");return a.beginPath(),a.arc(32,32,16,0,2*Math.PI),a.closePath(),a.fillStyle=o,a.fill(),l&&(a.font=t,a.textAlign="center",a.fillStyle=c,a.fillText(l,32,41)),new r.CanvasTexture(e)}),[o,l,c,t]),[d,m]=i.useState(!1),p=(l?1:.75)*(d?1.2:1)*s;return i.createElement("sprite",n.default({scale:p,onPointerOver:a?void 0:e=>{e.stopPropagation(),m(!0)},onPointerOut:a?void 0:e||(e=>{e.stopPropagation(),m(!1)})},u),i.createElement("spriteMaterial",{map:f,alphaTest:.3,opacity:l?1:.75,toneMapped:!1}))}exports.GizmoViewport=({hideNegativeAxes:e,hideAxisHeads:t,disabled:r,font:o="18px Inter var, Arial, sans-serif",axisColors:l=["#ff3653","#0adb50","#2c8fdf"],axisHeadScale:u=1,axisScale:f,labels:d=["X","Y","Z"],labelColor:m="#000",onClick:p,...b})=>{const[E,h,g]=l,{tweenCamera:y,raycast:x}=a.useGizmoContext(),j={font:o,disabled:r,labelColor:m,raycast:x,onClick:p,axisHeadScale:u,onPointerDown:r?void 0:e=>{y(e.object.position),e.stopPropagation()}};return i.createElement("group",n.default({scale:40},b),i.createElement(c,{color:E,rotation:[0,0,0],scale:f}),i.createElement(c,{color:h,rotation:[0,0,Math.PI/2],scale:f}),i.createElement(c,{color:g,rotation:[0,-Math.PI/2,0],scale:f}),!t&&i.createElement(i.Fragment,null,i.createElement(s,n.default({arcStyle:E,position:[1,0,0],label:d[0]},j)),i.createElement(s,n.default({arcStyle:h,position:[0,1,0],label:d[1]},j)),i.createElement(s,n.default({arcStyle:g,position:[0,0,1],label:d[2]},j)),!e&&i.createElement(i.Fragment,null,i.createElement(s,n.default({arcStyle:E,position:[-1,0,0]},j)),i.createElement(s,n.default({arcStyle:h,position:[0,-1,0]},j)),i.createElement(s,n.default({arcStyle:g,position:[0,0,-1]},j)))),i.createElement("ambientLight",{intensity:.5}),i.createElement("pointLight",{position:[10,10,10],intensity:.5}))};
|
package/core/GizmoViewport.d.ts
CHANGED
|
@@ -2,11 +2,15 @@
|
|
|
2
2
|
import { Event } from 'three';
|
|
3
3
|
declare type GizmoViewportProps = JSX.IntrinsicElements['group'] & {
|
|
4
4
|
axisColors?: [string, string, string];
|
|
5
|
+
axisScale?: [number, number, number];
|
|
6
|
+
labels?: [string, string, string];
|
|
7
|
+
axisHeadScale?: number;
|
|
5
8
|
labelColor?: string;
|
|
6
9
|
hideNegativeAxes?: boolean;
|
|
10
|
+
hideAxisHeads?: boolean;
|
|
7
11
|
disabled?: boolean;
|
|
8
12
|
font?: string;
|
|
9
13
|
onClick?: (e: Event) => null;
|
|
10
14
|
};
|
|
11
|
-
export declare const GizmoViewport: ({ hideNegativeAxes, disabled, font, axisColors, labelColor, onClick, ...props }: GizmoViewportProps) => JSX.Element;
|
|
15
|
+
export declare const GizmoViewport: ({ hideNegativeAxes, hideAxisHeads, disabled, font, axisColors, axisHeadScale, axisScale, labels, labelColor, onClick, ...props }: GizmoViewportProps) => JSX.Element;
|
|
12
16
|
export {};
|
package/core/GizmoViewport.js
CHANGED
|
@@ -4,6 +4,7 @@ import { CanvasTexture } from 'three';
|
|
|
4
4
|
import { useGizmoContext } from './GizmoHelper.js';
|
|
5
5
|
|
|
6
6
|
function Axis({
|
|
7
|
+
scale = [0.8, 0.05, 0.05],
|
|
7
8
|
color,
|
|
8
9
|
rotation
|
|
9
10
|
}) {
|
|
@@ -12,7 +13,7 @@ function Axis({
|
|
|
12
13
|
}, /*#__PURE__*/React.createElement("mesh", {
|
|
13
14
|
position: [0.4, 0, 0]
|
|
14
15
|
}, /*#__PURE__*/React.createElement("boxGeometry", {
|
|
15
|
-
args:
|
|
16
|
+
args: scale
|
|
16
17
|
}), /*#__PURE__*/React.createElement("meshBasicMaterial", {
|
|
17
18
|
color: color,
|
|
18
19
|
toneMapped: false
|
|
@@ -26,6 +27,7 @@ function AxisHead({
|
|
|
26
27
|
arcStyle,
|
|
27
28
|
label,
|
|
28
29
|
labelColor,
|
|
30
|
+
axisHeadScale = 1,
|
|
29
31
|
...props
|
|
30
32
|
}) {
|
|
31
33
|
const texture = React.useMemo(() => {
|
|
@@ -49,7 +51,7 @@ function AxisHead({
|
|
|
49
51
|
return new CanvasTexture(canvas);
|
|
50
52
|
}, [arcStyle, label, labelColor, font]);
|
|
51
53
|
const [active, setActive] = React.useState(false);
|
|
52
|
-
const scale = (label ? 1 : 0.75) * (active ? 1.2 : 1);
|
|
54
|
+
const scale = (label ? 1 : 0.75) * (active ? 1.2 : 1) * axisHeadScale;
|
|
53
55
|
|
|
54
56
|
const handlePointerOver = e => {
|
|
55
57
|
e.stopPropagation();
|
|
@@ -75,9 +77,13 @@ function AxisHead({
|
|
|
75
77
|
|
|
76
78
|
const GizmoViewport = ({
|
|
77
79
|
hideNegativeAxes,
|
|
80
|
+
hideAxisHeads,
|
|
78
81
|
disabled,
|
|
79
82
|
font = '18px Inter var, Arial, sans-serif',
|
|
80
83
|
axisColors = ['#ff3653', '#0adb50', '#2c8fdf'],
|
|
84
|
+
axisHeadScale = 1,
|
|
85
|
+
axisScale,
|
|
86
|
+
labels = ['X', 'Y', 'Z'],
|
|
81
87
|
labelColor = '#000',
|
|
82
88
|
onClick,
|
|
83
89
|
...props
|
|
@@ -93,6 +99,7 @@ const GizmoViewport = ({
|
|
|
93
99
|
labelColor,
|
|
94
100
|
raycast,
|
|
95
101
|
onClick,
|
|
102
|
+
axisHeadScale,
|
|
96
103
|
onPointerDown: !disabled ? e => {
|
|
97
104
|
tweenCamera(e.object.position);
|
|
98
105
|
e.stopPropagation();
|
|
@@ -102,25 +109,28 @@ const GizmoViewport = ({
|
|
|
102
109
|
scale: 40
|
|
103
110
|
}, props), /*#__PURE__*/React.createElement(Axis, {
|
|
104
111
|
color: colorX,
|
|
105
|
-
rotation: [0, 0, 0]
|
|
112
|
+
rotation: [0, 0, 0],
|
|
113
|
+
scale: axisScale
|
|
106
114
|
}), /*#__PURE__*/React.createElement(Axis, {
|
|
107
115
|
color: colorY,
|
|
108
|
-
rotation: [0, 0, Math.PI / 2]
|
|
116
|
+
rotation: [0, 0, Math.PI / 2],
|
|
117
|
+
scale: axisScale
|
|
109
118
|
}), /*#__PURE__*/React.createElement(Axis, {
|
|
110
119
|
color: colorZ,
|
|
111
|
-
rotation: [0, -Math.PI / 2, 0]
|
|
112
|
-
|
|
120
|
+
rotation: [0, -Math.PI / 2, 0],
|
|
121
|
+
scale: axisScale
|
|
122
|
+
}), !hideAxisHeads && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(AxisHead, _extends({
|
|
113
123
|
arcStyle: colorX,
|
|
114
124
|
position: [1, 0, 0],
|
|
115
|
-
label:
|
|
125
|
+
label: labels[0]
|
|
116
126
|
}, axisHeadProps)), /*#__PURE__*/React.createElement(AxisHead, _extends({
|
|
117
127
|
arcStyle: colorY,
|
|
118
128
|
position: [0, 1, 0],
|
|
119
|
-
label:
|
|
129
|
+
label: labels[1]
|
|
120
130
|
}, axisHeadProps)), /*#__PURE__*/React.createElement(AxisHead, _extends({
|
|
121
131
|
arcStyle: colorZ,
|
|
122
132
|
position: [0, 0, 1],
|
|
123
|
-
label:
|
|
133
|
+
label: labels[2]
|
|
124
134
|
}, axisHeadProps)), !hideNegativeAxes && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(AxisHead, _extends({
|
|
125
135
|
arcStyle: colorX,
|
|
126
136
|
position: [-1, 0, 0]
|
|
@@ -130,7 +140,7 @@ const GizmoViewport = ({
|
|
|
130
140
|
}, axisHeadProps)), /*#__PURE__*/React.createElement(AxisHead, _extends({
|
|
131
141
|
arcStyle: colorZ,
|
|
132
142
|
position: [0, 0, -1]
|
|
133
|
-
}, axisHeadProps))), /*#__PURE__*/React.createElement("ambientLight", {
|
|
143
|
+
}, axisHeadProps)))), /*#__PURE__*/React.createElement("ambientLight", {
|
|
134
144
|
intensity: 0.5
|
|
135
145
|
}), /*#__PURE__*/React.createElement("pointLight", {
|
|
136
146
|
position: [10, 10, 10],
|
package/core/SpotLight.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),a=require("@react-three/fiber"),n=require("../materials/SpotLightMaterial.cjs.js");function o(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 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 u=o(e),l=i(t);const s=new r.Vector3,c=l.forwardRef((({depthBuffer:e,color:t="white",distance:o=5,angle:i=.15,attenuation:c=5,anglePower:f=5,...m},p)=>{const h=l.useRef(null),d=a.useThree((e=>e.size)),g=a.useThree((e=>e.camera)),v=a.useThree((e=>e.viewport.dpr)),[b]=l.useState((()=>new n.SpotLightMaterial));a.useFrame((()=>{b.uniforms.spotPosition.value.copy(h.current.getWorldPosition(s)),h.current.lookAt(h.current.parent.target.
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),a=require("@react-three/fiber"),n=require("../materials/SpotLightMaterial.cjs.js");function o(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 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 u=o(e),l=i(t);const s=new r.Vector3,c=l.forwardRef((({depthBuffer:e,color:t="white",distance:o=5,angle:i=.15,attenuation:c=5,anglePower:f=5,...m},p)=>{const h=l.useRef(null),d=a.useThree((e=>e.size)),g=a.useThree((e=>e.camera)),v=a.useThree((e=>e.viewport.dpr)),[b]=l.useState((()=>new n.SpotLightMaterial));a.useFrame((()=>{b.uniforms.spotPosition.value.copy(h.current.getWorldPosition(s)),h.current.lookAt(h.current.parent.target.getWorldPosition(s))}));const w=l.useMemo((()=>{const e=new r.CylinderGeometry(.1,7*i,o,128,64,!0);return e.applyMatrix4((new r.Matrix4).makeTranslation(0,-o/2,0)),e.applyMatrix4((new r.Matrix4).makeRotationX(-Math.PI/2)),e}),[i,o]);return l.createElement("spotLight",u.default({ref:p,angle:i,color:t,distance:o},m),l.createElement("mesh",{ref:h,geometry:w},l.createElement("primitive",{object:b,attach:"material","uniforms-lightColor-value":t,"uniforms-attenuation-value":c,"uniforms-anglePower-value":f,"uniforms-depth-value":e,"uniforms-cameraNear-value":g.near,"uniforms-cameraFar-value":g.far,"uniforms-resolution-value":e?[d.width*v,d.height*v]:[0,0]})))}));exports.SpotLight=c;
|
package/core/SpotLight.js
CHANGED
|
@@ -21,7 +21,7 @@ const SpotLight = /*#__PURE__*/React.forwardRef(({
|
|
|
21
21
|
const [material] = React.useState(() => new SpotLightMaterial());
|
|
22
22
|
useFrame(() => {
|
|
23
23
|
material.uniforms.spotPosition.value.copy(mesh.current.getWorldPosition(vec));
|
|
24
|
-
mesh.current.lookAt(mesh.current.parent.target.
|
|
24
|
+
mesh.current.lookAt(mesh.current.parent.target.getWorldPosition(vec));
|
|
25
25
|
});
|
|
26
26
|
const geom = React.useMemo(() => {
|
|
27
27
|
const geometry = new CylinderGeometry(0.1, angle * 7, distance, 128, 64, true);
|
|
@@ -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("../helpers/normal-assets.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 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
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("./useTexture.cjs.js"),t=require("three"),s=require("../helpers/normal-assets.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 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 o=a(e);const n=s.normalsList[0];exports.useNormalTexture=function(e=0,a={}){const{repeat:u=[1,1],anisotropy:c=1,offset:f=[0,0]}=a,i=o.useMemo((()=>Object.keys(s.normalsList).length),[]),p=`https://rawcdn.githack.com/emmelleppi/normal-maps/f24c810fc1d86b5b1e5dfea914b668f70b5f2923/normals/${s.normalsList[e]||n}`,l=r.useTexture(p);return o.useLayoutEffect((()=>{l&&(l.wrapS=l.wrapT=t.RepeatWrapping,l.repeat=new t.Vector2(u[0],u[1]),l.offset=new t.Vector2(f[0],f[1]),l.anisotropy=c)}),[l,c,u,f]),[l,p,i]};
|
package/core/useNormalTexture.js
CHANGED
|
@@ -15,7 +15,7 @@ function useNormalTexture(id = 0, settings = {}) {
|
|
|
15
15
|
const imageName = normalsList[id] || DEFAULT_NORMAL;
|
|
16
16
|
const url = `${NORMAL_ROOT}/normals/${imageName}`;
|
|
17
17
|
const normalTexture = useTexture(url);
|
|
18
|
-
React.
|
|
18
|
+
React.useLayoutEffect(() => {
|
|
19
19
|
if (!normalTexture) return;
|
|
20
20
|
normalTexture.wrapS = normalTexture.wrapT = RepeatWrapping;
|
|
21
21
|
normalTexture.repeat = new Vector2(repeat[0], repeat[1]);
|
package/core/useTexture.js
CHANGED
|
@@ -5,7 +5,7 @@ import { useEffect } from 'react';
|
|
|
5
5
|
const IsObject = url => url === Object(url) && !Array.isArray(url) && typeof url !== 'function';
|
|
6
6
|
function useTexture(input) {
|
|
7
7
|
const gl = useThree(state => state.gl);
|
|
8
|
-
const textures = useLoader(TextureLoader, IsObject(input) ? Object.values(input) : input); // https://github.com/mrdoob/three.js/issues/
|
|
8
|
+
const textures = useLoader(TextureLoader, IsObject(input) ? Object.values(input) : input); // https://github.com/mrdoob/three.js/issues/22696
|
|
9
9
|
// Upload the texture to the GPU immediately instead of waiting for the first render
|
|
10
10
|
|
|
11
11
|
useEffect(() => {
|