@react-three/drei 9.115.0 → 9.116.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 +2 -2
- package/core/AccumulativeShadows.cjs.js +1 -1
- package/core/AdaptiveDpr.cjs.js +1 -1
- package/core/AdaptiveEvents.cjs.js +1 -1
- package/core/ArcballControls.cjs.js +1 -1
- package/core/AsciiRenderer.cjs.js +1 -1
- package/core/BBAnchor.cjs.js +1 -1
- package/core/Backdrop.cjs.js +1 -1
- package/core/BakeShadows.cjs.js +1 -1
- package/core/Billboard.cjs.js +1 -1
- package/core/Bounds.cjs.js +1 -1
- package/core/Bounds.js +0 -1
- package/core/Bvh.cjs.js +1 -1
- package/core/CameraControls.cjs.js +1 -1
- package/core/CameraShake.cjs.js +1 -1
- package/core/CatmullRomLine.cjs.js +1 -1
- package/core/Caustics.cjs.js +1 -1
- package/core/Center.cjs.js +1 -1
- package/core/Clone.cjs.js +1 -1
- package/core/Clone.js +1 -1
- package/core/Cloud.cjs.js +1 -1
- package/core/ComputedAttribute.cjs.js +1 -1
- package/core/ContactShadows.cjs.js +1 -1
- package/core/CubeCamera.cjs.js +1 -1
- package/core/CubeTexture.cjs.js +1 -1
- package/core/CubicBezierLine.cjs.js +1 -1
- package/core/CurveModifier.cjs.js +1 -1
- package/core/Decal.cjs.js +1 -1
- package/core/Detailed.cjs.js +1 -1
- package/core/DetectGPU.cjs.js +1 -1
- package/core/DeviceOrientationControls.cjs.js +1 -1
- package/core/Edges.cjs.js +1 -1
- package/core/Effects.cjs.js +1 -1
- package/core/Effects.js +3 -3
- package/core/Environment.cjs.js +1 -1
- package/core/Environment.js +1 -1
- package/core/Example.cjs.js +1 -1
- package/core/Fbo.cjs.js +1 -1
- package/core/Fbo.js +1 -1
- package/core/Fbx.cjs.js +1 -1
- package/core/FirstPersonControls.cjs.js +1 -1
- package/core/Fisheye.cjs.js +1 -1
- package/core/Float.cjs.js +1 -1
- package/core/FlyControls.cjs.js +1 -1
- package/core/GizmoHelper.cjs.js +1 -1
- package/core/GizmoViewcube.cjs.js +1 -1
- package/core/GizmoViewport.cjs.js +1 -1
- package/core/Gltf.cjs.js +1 -1
- package/core/GradientTexture.cjs.js +1 -1
- package/core/Grid.cjs.js +1 -1
- package/core/Helper.cjs.js +1 -1
- package/core/Hud.cjs.js +1 -1
- package/core/Hud.js +1 -1
- package/core/Image.cjs.js +1 -1
- package/core/Instances.cjs.js +1 -1
- package/core/Instances.d.ts +17 -17
- package/core/Ktx2.cjs.js +1 -1
- package/core/Ktx2.d.ts +1 -1
- package/core/Lightformer.cjs.js +1 -1
- package/core/Line.cjs.js +1 -1
- package/core/MapControls.cjs.js +1 -1
- package/core/MarchingCubes.cjs.js +1 -1
- package/core/Mask.cjs.js +1 -1
- package/core/MatcapTexture.cjs.js +1 -1
- package/core/MeshDiscardMaterial.cjs.js +1 -1
- package/core/MeshDistortMaterial.cjs.js +1 -1
- package/core/MeshPortalMaterial.cjs.js +1 -1
- package/core/MeshReflectorMaterial.cjs.js +1 -1
- package/core/MeshRefractionMaterial.cjs.js +1 -1
- package/core/MeshTransmissionMaterial.cjs.js +1 -1
- package/core/MeshWobbleMaterial.cjs.js +1 -1
- package/core/MotionPathControls.cjs.js +1 -1
- package/core/MultiMaterial.cjs.js +1 -1
- package/core/NormalTexture.cjs.js +1 -1
- package/core/OrbitControls.cjs.js +1 -1
- package/core/OrthographicCamera.cjs.js +1 -1
- package/core/Outlines.cjs.js +1 -1
- package/core/PerformanceMonitor.cjs.js +1 -1
- package/core/PerformanceMonitor.js +0 -1
- package/core/PerspectiveCamera.cjs.js +1 -1
- package/core/PointMaterial.cjs.js +1 -1
- package/core/PointerLockControls.cjs.js +1 -1
- package/core/Points.cjs.js +1 -1
- package/core/PositionalAudio.cjs.js +1 -1
- package/core/Preload.cjs.js +1 -1
- package/core/Progress.cjs.js +1 -1
- package/core/QuadraticBezierLine.cjs.js +1 -1
- package/core/Reflector.cjs.js +1 -1
- package/core/RenderCubeTexture.cjs.js +1 -1
- package/core/RenderCubeTexture.js +1 -1
- package/core/RenderTexture.cjs.js +1 -1
- package/core/RenderTexture.js +1 -1
- package/core/Resize.cjs.js +1 -1
- package/core/RoundedBox.cjs.js +1 -1
- package/core/Sampler.cjs.js +1 -1
- package/core/ScreenQuad.cjs.js +1 -1
- package/core/ScreenSizer.cjs.js +1 -1
- package/core/ScreenSpace.cjs.js +1 -1
- package/core/Segments.cjs.js +1 -1
- package/core/Shadow.cjs.js +1 -1
- package/core/ShadowAlpha.cjs.js +1 -1
- package/core/ShadowAlpha.js +1 -0
- package/core/Sky.cjs.js +1 -1
- package/core/Sparkles.cjs.js +1 -1
- package/core/Splat.cjs.js +1 -1
- package/core/SpotLight.cjs.js +1 -1
- package/core/SpriteAnimator.cjs.js +1 -1
- package/core/SpriteAnimator.d.ts +9 -0
- package/core/SpriteAnimator.js +35 -25
- package/core/Stage.cjs.js +1 -1
- package/core/Stars.cjs.js +1 -1
- package/core/Stats.cjs.js +1 -1
- package/core/StatsGl.cjs.js +1 -1
- package/core/Svg.cjs.js +1 -1
- package/core/Text.cjs.js +1 -1
- package/core/Text.js +0 -1
- package/core/Text3D.cjs.js +1 -1
- package/core/Texture.cjs.js +1 -1
- package/core/TrackballControls.cjs.js +1 -1
- package/core/Trail.cjs.js +1 -1
- package/core/Trail.js +1 -1
- package/core/TrailTexture.cjs.js +1 -1
- package/core/TransformControls.cjs.js +1 -1
- package/core/VideoTexture.cjs.js +1 -1
- package/core/Wireframe.cjs.js +1 -1
- package/core/calculateScaleFactor.cjs.js +1 -1
- package/core/index.cjs.js +1 -1
- package/core/index.js +4 -4
- package/core/meshBounds.cjs.js +1 -1
- package/core/shaderMaterial.cjs.js +1 -1
- package/core/shapes.cjs.js +1 -1
- package/core/softShadows.cjs.js +1 -1
- package/core/softShadows.js +1 -0
- package/core/useAnimations.cjs.js +1 -1
- package/core/useAnimations.js +0 -1
- package/core/useAspect.cjs.js +1 -1
- package/core/useBoxProjectedEnv.cjs.js +1 -1
- package/core/useCamera.cjs.js +1 -1
- package/core/useContextBridge.cjs.js +1 -1
- package/core/useDepthBuffer.cjs.js +1 -1
- package/core/useEnvironment.cjs.js +1 -1
- package/core/useEnvironment.d.ts +2 -2
- package/core/useFont.cjs.js +1 -1
- package/core/useIntersect.cjs.js +1 -1
- package/core/useSpriteLoader.cjs.js +1 -1
- package/helpers/constants.cjs.js +1 -1
- package/helpers/deprecated.cjs.js +1 -1
- package/helpers/environment-assets.cjs.js +1 -1
- package/helpers/useEffectfulState.cjs.js +1 -1
- package/helpers/useEffectfulState.js +1 -3
- package/index.cjs.js +1 -1
- package/materials/BlurPass.cjs.js +1 -1
- package/materials/ConvolutionMaterial.cjs.js +1 -1
- package/materials/DiscardMaterial.cjs.js +1 -1
- package/materials/MeshReflectorMaterial.cjs.js +1 -1
- package/materials/MeshRefractionMaterial.cjs.js +1 -1
- package/materials/MeshRefractionMaterial.js +2 -0
- package/materials/SpotLightMaterial.cjs.js +1 -1
- package/materials/WireframeMaterial.cjs.js +1 -1
- package/native/index.cjs.js +1 -1
- package/native/index.js +4 -4
- package/package.json +14 -14
- package/web/CycleRaycast.cjs.js +1 -1
- package/web/DragControls.cjs.js +1 -1
- package/web/FaceControls.cjs.js +1 -1
- package/web/FaceControls.d.ts +2 -1
- package/web/FaceControls.js +6 -2
- package/web/FaceLandmarker.cjs.js +1 -1
- package/web/FaceLandmarker.js +1 -1
- package/web/Facemesh.cjs.js +1 -1
- package/web/Facemesh.d.ts +14 -47
- package/web/Facemesh.js +1 -2
- package/web/Html.cjs.js +1 -1
- package/web/Html.js +2 -2
- package/web/KeyboardControls.cjs.js +1 -1
- package/web/Loader.cjs.js +1 -1
- package/web/PresentationControls.cjs.js +1 -1
- package/web/ScrollControls.cjs.js +1 -1
- package/web/ScrollControls.js +1 -1
- package/web/Select.cjs.js +1 -1
- package/web/View.cjs.js +1 -1
- package/web/View.js +1 -1
- package/web/index.cjs.js +1 -1
- package/web/index.js +6 -6
- package/web/pivotControls/AxisArrow.cjs.js +1 -1
- package/web/pivotControls/AxisRotator.cjs.js +1 -1
- package/web/pivotControls/PlaneSlider.cjs.js +1 -1
- package/web/pivotControls/ScalingSphere.cjs.js +1 -1
- package/web/pivotControls/context.cjs.js +1 -1
- package/web/pivotControls/index.cjs.js +1 -1
- package/web/useCursor.cjs.js +1 -1
package/core/ShadowAlpha.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";var e=require("@react-three/fiber"),r=require("react"),a=require("three");function t(e){var r=Object.create(null);return e&&Object.keys(e).forEach((function(a){if("default"!==a){var t=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(r,a,t.get?t:{enumerable:!0,get:function(){return e[a]}})}})),r.default=e,Object.freeze(r)}var n=t(r),u=t(a);exports.ShadowAlpha=function({opacity:r,alphaMap:a}){const t=n.useRef(null),c=n.useRef(null),l=n.useRef({value:1}),o=n.useRef({value:null}),i=n.useRef({value:!1});return n.useLayoutEffect((()=>{t.current.onBeforeCompile=c.current.onBeforeCompile=e=>{const r=e.fragmentShader.indexOf("void main");let a,t="",n=r;for(;"\n"!==a&&n<r+100;)a=e.fragmentShader.charAt(n),t+=a,n++;t=t.trim(),e.vertexShader=e.vertexShader.replace("void main() {","\n varying vec2 custom_vUv;\n\n void main() {\n custom_vUv = uv;\n \n "),e.fragmentShader=e.fragmentShader.replace(t,"\n uniform float uShadowOpacity;\n uniform sampler2D uAlphaMap;\n uniform bool uHasAlphaMap;\n\n varying vec2 custom_vUv;\n \n float bayerDither2x2( vec2 v ) {\n return mod( 3.0 * v.y + 2.0 * v.x, 4.0 );\n }\n \n float bayerDither4x4( vec2 v ) {\n vec2 P1 = mod( v, 2.0 );\n vec2 P2 = mod( floor( 0.5 * v ), 2.0 );\n return 4.0 * bayerDither2x2( P1 ) + bayerDither2x2( P2 );\n }\n \n void main() {\n float alpha = \n uHasAlphaMap ? \n uShadowOpacity * texture2D(uAlphaMap, custom_vUv).x\n : uShadowOpacity;\n\n if( ( bayerDither4x4( floor( mod( gl_FragCoord.xy, 4.0 ) ) ) ) / 16.0 >= alpha ) discard;\n \n "),e.uniforms.uShadowOpacity=l.current,e.uniforms.uAlphaMap=o.current,e.uniforms.uHasAlphaMap=i.current}}),[]),e.useFrame((()=>{var e;const n=null==(e=t.current.__r3f)?void 0:e.parent;if(n){const e=n.material;e&&(l.current.value=null!=r?r:e.opacity,!1===a?(o.current.value=null,i.current.value=!1):(o.current.value=a||e.alphaMap,i.current.value=!!o.current.value))}})),n.createElement(n.Fragment,null,n.createElement("meshDepthMaterial",{ref:t,attach:"customDepthMaterial",depthPacking:u.RGBADepthPacking}),n.createElement("meshDistanceMaterial",{ref:c,attach:"customDistanceMaterial"}))};
|
package/core/ShadowAlpha.js
CHANGED
package/core/Sky.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three-stdlib"),i=require("three");function a(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var i=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var n=a(t);function o(e,t,r=new i.Vector3){const a=Math.PI*(e-.5),n=2*Math.PI*(t-.5);return r.x=Math.cos(n),r.y=Math.sin(a),r.z=Math.sin(n),r}const u=n.forwardRef((({inclination:t=.6,azimuth:a=.1,distance:u=1e3,mieCoefficient:c=.005,mieDirectionalG:s=.8,rayleigh:l=.5,turbidity:f=10,sunPosition:m=o(t,a),...b},h)=>{const v=n.useMemo((()=>(new i.Vector3).setScalar(u)),[u]),[y]=n.useState((()=>new r.Sky));return n.createElement("primitive",e({object:y,ref:h,"material-uniforms-mieCoefficient-value":c,"material-uniforms-mieDirectionalG-value":s,"material-uniforms-rayleigh-value":l,"material-uniforms-sunPosition-value":m,"material-uniforms-turbidity-value":f,scale:v},b))}));exports.Sky=u,exports.calcPosFromAngles=o;
|
package/core/Sparkles.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),o=require("@react-three/fiber"),i=require("./shaderMaterial.cjs.js"),n=require("../helpers/constants.cjs.js");function a(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 s=a(t),l=a(r);const c=i.shaderMaterial({time:0,pixelRatio:1}," uniform float pixelRatio;\n uniform float time;\n attribute float size; \n attribute float speed; \n attribute float opacity;\n attribute vec3 noise;\n attribute vec3 color;\n varying vec3 vColor;\n varying float vOpacity;\n void main() {\n vec4 modelPosition = modelMatrix * vec4(position, 1.0);\n modelPosition.y += sin(time * speed + modelPosition.x * noise.x * 100.0) * 0.2;\n modelPosition.z += cos(time * speed + modelPosition.x * noise.y * 100.0) * 0.2;\n modelPosition.x += cos(time * speed + modelPosition.x * noise.z * 100.0) * 0.2;\n vec4 viewPosition = viewMatrix * modelPosition;\n vec4 projectionPostion = projectionMatrix * viewPosition;\n gl_Position = projectionPostion;\n gl_PointSize = size * 25. * pixelRatio;\n gl_PointSize *= (1.0 / - viewPosition.z);\n vColor = color;\n vOpacity = opacity;\n }",` varying vec3 vColor;\n varying float vOpacity;\n void main() {\n float distanceToCenter = distance(gl_PointCoord, vec2(0.5));\n float strength = 0.05 / distanceToCenter - 0.1;\n gl_FragColor = vec4(vColor, strength * vOpacity);\n #include <tonemapping_fragment>\n #include <${n.version>=154?"colorspace_fragment":"encodings_fragment"}>\n }`),u=e=>e&&e.constructor===Float32Array,f=e=>e instanceof l.Vector2||e instanceof l.Vector3||e instanceof l.Vector4,m=e=>Array.isArray(e)?e:f(e)?e.toArray():[e,e,e];function p(e,t,r){return s.useMemo((()=>{if(void 0!==t){if(u(t))return t;if(t instanceof l.Color){const r=Array.from({length:3*e},(()=>{return[(e=t).r,e.g,e.b];var e})).flat();return Float32Array.from(r)}if(f(t)||Array.isArray(t)){const r=Array.from({length:3*e},(()=>m(t))).flat();return Float32Array.from(r)}return Float32Array.from({length:e},(()=>t))}return Float32Array.from({length:e},r)}),[t])}const d=s.forwardRef((({noise:t=1,count:r=100,speed:i=1,opacity:n=1,scale:a=1,size:f,color:d,children:v,...b},y)=>{s.useMemo((()=>o.extend({SparklesImplMaterial:c})),[]);const g=s.useRef(null),h=o.useThree((e=>e.viewport.dpr)),A=m(a),P=s.useMemo((()=>Float32Array.from(Array.from({length:r},(()=>A.map(l.MathUtils.randFloatSpread))).flat())),[r,...A]),x=p(r,f,Math.random),j=p(r,n),M=p(r,i),O=p(3*r,t),z=p(void 0===d?3*r:r,u(d)?d:new l.Color(d),(()=>1));return o.useFrame((e=>{g.current&&g.current.material&&(g.current.material.time=e.clock.elapsedTime)})),s.useImperativeHandle(y,(()=>g.current),[]),s.createElement("points",e({key:`particle-${r}-${JSON.stringify(a)}`},b,{ref:g}),s.createElement("bufferGeometry",null,s.createElement("bufferAttribute",{attach:"attributes-position",args:[P,3]}),s.createElement("bufferAttribute",{attach:"attributes-size",args:[x,1]}),s.createElement("bufferAttribute",{attach:"attributes-opacity",args:[j,1]}),s.createElement("bufferAttribute",{attach:"attributes-speed",args:[M,1]}),s.createElement("bufferAttribute",{attach:"attributes-color",args:[z,3]}),s.createElement("bufferAttribute",{attach:"attributes-noise",args:[O,3]})),v||s.createElement("sparklesImplMaterial",{transparent:!0,pixelRatio:h,depthWrite:!1}))}));exports.Sparkles=d;
|
package/core/Splat.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),n=require("react"),r=require("@react-three/fiber"),o=require("./shaderMaterial.cjs.js");function a(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(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var c=a(e),s=l(t),i=l(n);const u=o.shaderMaterial({alphaTest:0,viewport:new s.Vector2(1980,1080),focal:1e3,centerAndScaleTexture:null,covAndColorTexture:null},"\n precision highp sampler2D;\n precision highp usampler2D;\n out vec4 vColor;\n out vec3 vPosition;\n uniform vec2 resolution;\n uniform vec2 viewport;\n uniform float focal;\n attribute uint splatIndex;\n uniform sampler2D centerAndScaleTexture;\n uniform usampler2D covAndColorTexture; \n\n vec2 unpackInt16(in uint value) {\n int v = int(value);\n int v0 = v >> 16;\n int v1 = (v & 0xFFFF);\n if((v & 0x8000) != 0)\n v1 |= 0xFFFF0000;\n return vec2(float(v1), float(v0));\n }\n\n void main () {\n ivec2 texSize = textureSize(centerAndScaleTexture, 0);\n ivec2 texPos = ivec2(splatIndex%uint(texSize.x), splatIndex/uint(texSize.x));\n vec4 centerAndScaleData = texelFetch(centerAndScaleTexture, texPos, 0);\n vec4 center = vec4(centerAndScaleData.xyz, 1);\n vec4 camspace = modelViewMatrix * center;\n vec4 pos2d = projectionMatrix * camspace;\n\n float bounds = 1.2 * pos2d.w;\n if (pos2d.z < -pos2d.w || pos2d.x < -bounds || pos2d.x > bounds\n || pos2d.y < -bounds || pos2d.y > bounds) {\n gl_Position = vec4(0.0, 0.0, 2.0, 1.0);\n return;\n }\n\n uvec4 covAndColorData = texelFetch(covAndColorTexture, texPos, 0);\n vec2 cov3D_M11_M12 = unpackInt16(covAndColorData.x) * centerAndScaleData.w;\n vec2 cov3D_M13_M22 = unpackInt16(covAndColorData.y) * centerAndScaleData.w;\n vec2 cov3D_M23_M33 = unpackInt16(covAndColorData.z) * centerAndScaleData.w;\n mat3 Vrk = mat3(\n cov3D_M11_M12.x, cov3D_M11_M12.y, cov3D_M13_M22.x,\n cov3D_M11_M12.y, cov3D_M13_M22.y, cov3D_M23_M33.x,\n cov3D_M13_M22.x, cov3D_M23_M33.x, cov3D_M23_M33.y\n );\n\n mat3 J = mat3(\n focal / camspace.z, 0., -(focal * camspace.x) / (camspace.z * camspace.z),\n 0., focal / camspace.z, -(focal * camspace.y) / (camspace.z * camspace.z),\n 0., 0., 0.\n );\n\n mat3 W = transpose(mat3(modelViewMatrix));\n mat3 T = W * J;\n mat3 cov = transpose(T) * Vrk * T;\n vec2 vCenter = vec2(pos2d) / pos2d.w;\n float diagonal1 = cov[0][0] + 0.3;\n float offDiagonal = cov[0][1];\n float diagonal2 = cov[1][1] + 0.3;\n float mid = 0.5 * (diagonal1 + diagonal2);\n float radius = length(vec2((diagonal1 - diagonal2) / 2.0, offDiagonal));\n float lambda1 = mid + radius;\n float lambda2 = max(mid - radius, 0.1);\n vec2 diagonalVector = normalize(vec2(offDiagonal, lambda1 - diagonal1));\n vec2 v1 = min(sqrt(2.0 * lambda1), 1024.0) * diagonalVector;\n vec2 v2 = min(sqrt(2.0 * lambda2), 1024.0) * vec2(diagonalVector.y, -diagonalVector.x);\n uint colorUint = covAndColorData.w;\n vColor = vec4(\n float(colorUint & uint(0xFF)) / 255.0,\n float((colorUint >> uint(8)) & uint(0xFF)) / 255.0,\n float((colorUint >> uint(16)) & uint(0xFF)) / 255.0,\n float(colorUint >> uint(24)) / 255.0\n );\n vPosition = position;\n\n gl_Position = vec4(\n vCenter \n + position.x * v2 / viewport * 2.0 \n + position.y * v1 / viewport * 2.0, pos2d.z / pos2d.w, 1.0);\n }\n ",`\n #include <alphatest_pars_fragment>\n #include <alphahash_pars_fragment>\n in vec4 vColor;\n in vec3 vPosition;\n void main () {\n float A = -dot(vPosition.xy, vPosition.xy);\n if (A < -4.0) discard;\n float B = exp(A) * vColor.a;\n vec4 diffuseColor = vec4(vColor.rgb, B);\n #include <alphatest_fragment>\n #include <alphahash_fragment>\n gl_FragColor = diffuseColor;\n #include <tonemapping_fragment>\n #include <${parseInt(s.REVISION.replace(/\D+/g,""))>=154?"colorspace_fragment":"encodings_fragment"}>\n }\n `);function d(e){let t=null,n=0;e.onmessage=r=>{if("push"==r.data.method){0===n&&(t=new Float32Array(r.data.length));const e=new Float32Array(r.data.matrices);t.set(e,n),n+=e.length}else if("sort"==r.data.method&&null!==t){const n=function(e,n=!1){const r=t.length/16;let o=-1/0,a=1/0;const l=new Float32Array(r),c=new Int32Array(l.buffer),s=new Int32Array(r);let i=0;for(let c=0;c<r;c++){const r=e[0]*t[16*c+12]+e[1]*t[16*c+13]+e[2]*t[16*c+14]+e[3];(n||r<0&&t[16*c+15]>-1e-4*r)&&(l[i]=r,s[i]=c,i++,r>o&&(o=r),r<a&&(a=r))}const u=65535/(o-a),d=new Uint32Array(65536);for(let e=0;e<i;e++)c[e]=(l[e]-a)*u|0,d[c[e]]++;const f=new Uint32Array(65536);for(let e=1;e<65536;e++)f[e]=f[e-1]+d[e-1];const x=new Uint32Array(i);for(let e=0;e<i;e++)x[f[c[e]]++]=s[e];return x}(new Float32Array(r.data.view),r.data.hashed);e.postMessage({indices:n,key:r.data.key},[n.buffer])}}}class f extends s.Loader{constructor(...e){super(...e),this.gl=null,this.chunkSize=25e3}load(e,t,n,r){const o={gl:this.gl,url:this.manager.resolveURL(e),worker:new Worker(URL.createObjectURL(new Blob(["(",d.toString(),")(self)"],{type:"application/javascript"}))),manager:this.manager,update:(e,t,n)=>function(e,t,n,r){if(e.updateMatrixWorld(),t.gl.getCurrentViewport(n.viewport),n.material.viewport.x=n.viewport.z,n.material.viewport.y=n.viewport.w,n.material.focal=n.viewport.w/2*Math.abs(e.projectionMatrix.elements[5]),n.ready){if(r&&n.sorted)return;n.ready=!1;const e=new Float32Array([n.modelViewMatrix.elements[2],-n.modelViewMatrix.elements[6],n.modelViewMatrix.elements[10],n.modelViewMatrix.elements[14]]);t.worker.postMessage({method:"sort",src:t.url,key:n.uuid,view:e.buffer,hashed:r},[e.buffer]),r&&t.loaded&&(n.sorted=!0)}}(t,o,e,n),connect:e=>function(e,t){e.loading||async function(e){e.loading=!0;let t=0,n=0;const r=[];let o=0;const a=0!==e.totalDownloadBytes;for(;;)try{const{value:l,done:c}=await e.stream.read();if(c)break;if(t+=l.length,null!=e.totalDownloadBytes){const n=t/e.totalDownloadBytes*100;if(e.onProgress&&n-o>1){const r=new ProgressEvent("progress",{lengthComputable:a,loaded:t,total:e.totalDownloadBytes});e.onProgress(r),o=n}}r.push(l);const s=t-n;if(null!=e.totalDownloadBytes&&s>e.rowLength*e.chunkSize){let t=Math.floor(s/e.rowLength);const o=new Uint8Array(s);let l=0;for(const e of r)o.set(e,l),l+=e.length;if(r.length=0,s>t*e.rowLength){const n=new Uint8Array(s-t*e.rowLength);n.set(o.subarray(s-n.length,s),0),r.push(n)}const c=new Uint8Array(t*e.rowLength);c.set(o.subarray(0,c.byteLength),0);const i=x(e,c.buffer,t);if(e.worker.postMessage({method:"push",src:e.url,length:16*e.numVertices,matrices:i.buffer},[i.buffer]),n+=t*e.rowLength,e.onProgress){const t=new ProgressEvent("progress",{lengthComputable:a,loaded:e.totalDownloadBytes,total:e.totalDownloadBytes});e.onProgress(t)}}}catch(e){console.error(e);break}if(t-n>0){let t=new Uint8Array(r.reduce(((e,t)=>e+t.length),0)),n=0;for(const e of r)t.set(e,n),n+=e.length;let o=Math.floor(t.byteLength/e.rowLength);const a=x(e,t.buffer,o);e.worker.postMessage({method:"push",src:e.url,length:16*o,matrices:a.buffer},[a.buffer])}e.loaded=!0,e.manager.itemEnd(e.url)}(e);t.ready=!1,t.pm=new s.Matrix4,t.vm1=new s.Matrix4,t.vm2=new s.Matrix4,t.viewport=new s.Vector4;let n=new Uint32Array(e.bufferTextureWidth*e.bufferTextureHeight);const r=new s.InstancedBufferAttribute(n,1,!1);r.setUsage(s.DynamicDrawUsage);const o=t.geometry=new s.InstancedBufferGeometry,a=new Float32Array(18),l=new s.BufferAttribute(a,3);function c(e){if(t&&e.data.key===t.uuid){let n=new Uint32Array(e.data.indices);o.attributes.splatIndex.set(n),o.attributes.splatIndex.needsUpdate=!0,o.instanceCount=n.length,t.ready=!0}}async function i(){for(;;){const t=e.gl.properties.get(e.centerAndScaleTexture),n=e.gl.properties.get(e.covAndColorTexture);if(null!=t&&t.__webglTexture&&null!=n&&n.__webglTexture&&e.loadedVertexCount>0)break;await new Promise((e=>setTimeout(e,10)))}t.ready=!0}return o.setAttribute("position",l),l.setXYZ(2,-2,2,0),l.setXYZ(1,2,2,0),l.setXYZ(0,-2,-2,0),l.setXYZ(5,-2,-2,0),l.setXYZ(4,2,2,0),l.setXYZ(3,2,-2,0),l.needsUpdate=!0,o.setAttribute("splatIndex",r),o.instanceCount=1,e.worker.addEventListener("message",c),i(),()=>e.worker.removeEventListener("message",c)}(o,e),loading:!1,loaded:!1,loadedVertexCount:0,chunkSize:this.chunkSize,totalDownloadBytes:0,numVertices:0,rowLength:32,maxVertexes:0,bufferTextureWidth:0,bufferTextureHeight:0,stream:null,centerAndScaleData:null,covAndColorData:null,covAndColorTexture:null,centerAndScaleTexture:null,onProgress:n};(async function(e){e.manager.itemStart(e.url);const t=await fetch(e.url);if(null===t.body)throw"Failed to fetch file";let n=t.headers.get("Content-Length");const r=n?parseInt(n):void 0;if(null==r)throw"Failed to get content length";e.stream=t.body.getReader(),e.totalDownloadBytes=r,e.numVertices=Math.floor(e.totalDownloadBytes/e.rowLength);const o=e.gl.getContext();let a=o.getParameter(o.MAX_TEXTURE_SIZE);e.maxVertexes=a*a,e.numVertices>e.maxVertexes&&(e.numVertices=e.maxVertexes);return e.bufferTextureWidth=a,e.bufferTextureHeight=Math.floor((e.numVertices-1)/a)+1,e.centerAndScaleData=new Float32Array(e.bufferTextureWidth*e.bufferTextureHeight*4),e.covAndColorData=new Uint32Array(e.bufferTextureWidth*e.bufferTextureHeight*4),e.centerAndScaleTexture=new s.DataTexture(e.centerAndScaleData,e.bufferTextureWidth,e.bufferTextureHeight,s.RGBAFormat,s.FloatType),e.centerAndScaleTexture.needsUpdate=!0,e.covAndColorTexture=new s.DataTexture(e.covAndColorData,e.bufferTextureWidth,e.bufferTextureHeight,s.RGBAIntegerFormat,s.UnsignedIntType),e.covAndColorTexture.internalFormat="RGBA32UI",e.covAndColorTexture.needsUpdate=!0,e})(o).then(t).catch((e=>{null==r||r(e),o.manager.itemError(o.url)}))}}function x(e,t,n){const r=e.gl.getContext();if(e.loadedVertexCount+n>e.maxVertexes&&(n=e.maxVertexes-e.loadedVertexCount),n<=0)throw"Failed to parse file";const o=new Uint8Array(t),a=new Float32Array(t),l=new Float32Array(16*n),c=new Uint8Array(e.covAndColorData.buffer),i=new Int16Array(e.covAndColorData.buffer);for(let t=0;t<n;t++){const n=new s.Quaternion(-(o[32*t+28+1]-128)/128,(o[32*t+28+2]-128)/128,(o[32*t+28+3]-128)/128,-(o[32*t+28+0]-128)/128);n.invert();const r=new s.Vector3(a[8*t+0],a[8*t+1],-a[8*t+2]),u=new s.Vector3(a[8*t+3+0],a[8*t+3+1],a[8*t+3+2]),d=new s.Matrix4;d.makeRotationFromQuaternion(n),d.transpose(),d.scale(u);const f=d.clone();d.transpose(),d.premultiply(f),d.setPosition(r);const x=[0,1,2,5,6,10];let p=0;for(let e=0;e<x.length;e++)Math.abs(d.elements[x[e]])>p&&(p=Math.abs(d.elements[x[e]]));let g=4*e.loadedVertexCount+4*t;e.centerAndScaleData[g+0]=r.x,e.centerAndScaleData[g+1]=-r.y,e.centerAndScaleData[g+2]=r.z,e.centerAndScaleData[g+3]=p/32767,g=8*e.loadedVertexCount+4*t*2;for(let e=0;e<x.length;e++)i[g+e]=32767*d.elements[x[e]]/p;g=16*e.loadedVertexCount+4*(4*t+3);const m=new s.Color(o[32*t+24+0]/255,o[32*t+24+1]/255,o[32*t+24+2]/255);m.convertSRGBToLinear(),c[g+0]=255*m.r,c[g+1]=255*m.g,c[g+2]=255*m.b,c[g+3]=o[32*t+24+3],d.elements[15]=Math.max(u.x,u.y,u.z)*o[32*t+24+3]/255;for(let e=0;e<16;e++)l[16*t+e]=d.elements[e]}for(;n>0;){let t=0,o=0;const a=e.loadedVertexCount%e.bufferTextureWidth,l=Math.floor(e.loadedVertexCount/e.bufferTextureWidth);e.loadedVertexCount%e.bufferTextureWidth!=0?(t=Math.min(e.bufferTextureWidth,a+n)-a,o=1):Math.floor(n/e.bufferTextureWidth)>0?(t=e.bufferTextureWidth,o=Math.floor(n/e.bufferTextureWidth)):(t=n%e.bufferTextureWidth,o=1);const c=e.gl.properties.get(e.centerAndScaleTexture);r.bindTexture(r.TEXTURE_2D,c.__webglTexture),r.texSubImage2D(r.TEXTURE_2D,0,a,l,t,o,r.RGBA,r.FLOAT,e.centerAndScaleData,4*e.loadedVertexCount);const s=e.gl.properties.get(e.covAndColorTexture);r.bindTexture(r.TEXTURE_2D,s.__webglTexture),r.texSubImage2D(r.TEXTURE_2D,0,a,l,t,o,r.RGBA_INTEGER,r.UNSIGNED_INT,e.covAndColorData,4*e.loadedVertexCount),e.gl.resetState(),e.loadedVertexCount+=t*o,n-=t*o}return l}exports.Splat=function({src:e,toneMapped:t=!1,alphaTest:n=0,alphaHash:o=!1,chunkSize:a=25e3,...l}){r.extend({SplatMaterial:u});const d=i.useRef(null),x=r.useThree((e=>e.gl)),p=r.useThree((e=>e.camera)),g=r.useLoader(f,e,(e=>{e.gl=x,e.chunkSize=a}));return i.useLayoutEffect((()=>g.connect(d.current)),[e]),r.useFrame((()=>g.update(d.current,p,o))),i.createElement("mesh",c.default({ref:d,frustumCulled:!1},l),i.createElement("splatMaterial",{key:`${e}/${n}/${o}${u.key}`,transparent:!o,depthTest:!0,alphaTest:o?0:n,centerAndScaleTexture:g.centerAndScaleTexture,covAndColorTexture:g.covAndColorTexture,depthWrite:!!o||n>0,blending:o?s.NormalBlending:s.CustomBlending,blendSrcAlpha:s.OneFactor,alphaHash:!!o,toneMapped:t}))};
|
|
1
|
+
"use strict";var e=require("@babel/runtime/helpers/extends"),t=require("three"),n=require("react"),r=require("@react-three/fiber"),o=require("./shaderMaterial.cjs.js");function a(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var l=a(t),c=a(n);const s=o.shaderMaterial({alphaTest:0,viewport:new l.Vector2(1980,1080),focal:1e3,centerAndScaleTexture:null,covAndColorTexture:null},"\n precision highp sampler2D;\n precision highp usampler2D;\n out vec4 vColor;\n out vec3 vPosition;\n uniform vec2 resolution;\n uniform vec2 viewport;\n uniform float focal;\n attribute uint splatIndex;\n uniform sampler2D centerAndScaleTexture;\n uniform usampler2D covAndColorTexture; \n\n vec2 unpackInt16(in uint value) {\n int v = int(value);\n int v0 = v >> 16;\n int v1 = (v & 0xFFFF);\n if((v & 0x8000) != 0)\n v1 |= 0xFFFF0000;\n return vec2(float(v1), float(v0));\n }\n\n void main () {\n ivec2 texSize = textureSize(centerAndScaleTexture, 0);\n ivec2 texPos = ivec2(splatIndex%uint(texSize.x), splatIndex/uint(texSize.x));\n vec4 centerAndScaleData = texelFetch(centerAndScaleTexture, texPos, 0);\n vec4 center = vec4(centerAndScaleData.xyz, 1);\n vec4 camspace = modelViewMatrix * center;\n vec4 pos2d = projectionMatrix * camspace;\n\n float bounds = 1.2 * pos2d.w;\n if (pos2d.z < -pos2d.w || pos2d.x < -bounds || pos2d.x > bounds\n || pos2d.y < -bounds || pos2d.y > bounds) {\n gl_Position = vec4(0.0, 0.0, 2.0, 1.0);\n return;\n }\n\n uvec4 covAndColorData = texelFetch(covAndColorTexture, texPos, 0);\n vec2 cov3D_M11_M12 = unpackInt16(covAndColorData.x) * centerAndScaleData.w;\n vec2 cov3D_M13_M22 = unpackInt16(covAndColorData.y) * centerAndScaleData.w;\n vec2 cov3D_M23_M33 = unpackInt16(covAndColorData.z) * centerAndScaleData.w;\n mat3 Vrk = mat3(\n cov3D_M11_M12.x, cov3D_M11_M12.y, cov3D_M13_M22.x,\n cov3D_M11_M12.y, cov3D_M13_M22.y, cov3D_M23_M33.x,\n cov3D_M13_M22.x, cov3D_M23_M33.x, cov3D_M23_M33.y\n );\n\n mat3 J = mat3(\n focal / camspace.z, 0., -(focal * camspace.x) / (camspace.z * camspace.z),\n 0., focal / camspace.z, -(focal * camspace.y) / (camspace.z * camspace.z),\n 0., 0., 0.\n );\n\n mat3 W = transpose(mat3(modelViewMatrix));\n mat3 T = W * J;\n mat3 cov = transpose(T) * Vrk * T;\n vec2 vCenter = vec2(pos2d) / pos2d.w;\n float diagonal1 = cov[0][0] + 0.3;\n float offDiagonal = cov[0][1];\n float diagonal2 = cov[1][1] + 0.3;\n float mid = 0.5 * (diagonal1 + diagonal2);\n float radius = length(vec2((diagonal1 - diagonal2) / 2.0, offDiagonal));\n float lambda1 = mid + radius;\n float lambda2 = max(mid - radius, 0.1);\n vec2 diagonalVector = normalize(vec2(offDiagonal, lambda1 - diagonal1));\n vec2 v1 = min(sqrt(2.0 * lambda1), 1024.0) * diagonalVector;\n vec2 v2 = min(sqrt(2.0 * lambda2), 1024.0) * vec2(diagonalVector.y, -diagonalVector.x);\n uint colorUint = covAndColorData.w;\n vColor = vec4(\n float(colorUint & uint(0xFF)) / 255.0,\n float((colorUint >> uint(8)) & uint(0xFF)) / 255.0,\n float((colorUint >> uint(16)) & uint(0xFF)) / 255.0,\n float(colorUint >> uint(24)) / 255.0\n );\n vPosition = position;\n\n gl_Position = vec4(\n vCenter \n + position.x * v2 / viewport * 2.0 \n + position.y * v1 / viewport * 2.0, pos2d.z / pos2d.w, 1.0);\n }\n ",`\n #include <alphatest_pars_fragment>\n #include <alphahash_pars_fragment>\n in vec4 vColor;\n in vec3 vPosition;\n void main () {\n float A = -dot(vPosition.xy, vPosition.xy);\n if (A < -4.0) discard;\n float B = exp(A) * vColor.a;\n vec4 diffuseColor = vec4(vColor.rgb, B);\n #include <alphatest_fragment>\n #include <alphahash_fragment>\n gl_FragColor = diffuseColor;\n #include <tonemapping_fragment>\n #include <${parseInt(l.REVISION.replace(/\D+/g,""))>=154?"colorspace_fragment":"encodings_fragment"}>\n }\n `);function i(e){let t=null,n=0;e.onmessage=r=>{if("push"==r.data.method){0===n&&(t=new Float32Array(r.data.length));const e=new Float32Array(r.data.matrices);t.set(e,n),n+=e.length}else if("sort"==r.data.method&&null!==t){const n=function(e,n=!1){const r=t.length/16;let o=-1/0,a=1/0;const l=new Float32Array(r),c=new Int32Array(l.buffer),s=new Int32Array(r);let i=0;for(let c=0;c<r;c++){const r=e[0]*t[16*c+12]+e[1]*t[16*c+13]+e[2]*t[16*c+14]+e[3];(n||r<0&&t[16*c+15]>-1e-4*r)&&(l[i]=r,s[i]=c,i++,r>o&&(o=r),r<a&&(a=r))}const u=65535/(o-a),d=new Uint32Array(65536);for(let e=0;e<i;e++)c[e]=(l[e]-a)*u|0,d[c[e]]++;const f=new Uint32Array(65536);for(let e=1;e<65536;e++)f[e]=f[e-1]+d[e-1];const x=new Uint32Array(i);for(let e=0;e<i;e++)x[f[c[e]]++]=s[e];return x}(new Float32Array(r.data.view),r.data.hashed);e.postMessage({indices:n,key:r.data.key},[n.buffer])}}}class u extends l.Loader{constructor(...e){super(...e),this.gl=null,this.chunkSize=25e3}load(e,t,n,r){const o={gl:this.gl,url:this.manager.resolveURL(e),worker:new Worker(URL.createObjectURL(new Blob(["(",i.toString(),")(self)"],{type:"application/javascript"}))),manager:this.manager,update:(e,t,n)=>function(e,t,n,r){if(e.updateMatrixWorld(),t.gl.getCurrentViewport(n.viewport),n.material.viewport.x=n.viewport.z,n.material.viewport.y=n.viewport.w,n.material.focal=n.viewport.w/2*Math.abs(e.projectionMatrix.elements[5]),n.ready){if(r&&n.sorted)return;n.ready=!1;const e=new Float32Array([n.modelViewMatrix.elements[2],-n.modelViewMatrix.elements[6],n.modelViewMatrix.elements[10],n.modelViewMatrix.elements[14]]);t.worker.postMessage({method:"sort",src:t.url,key:n.uuid,view:e.buffer,hashed:r},[e.buffer]),r&&t.loaded&&(n.sorted=!0)}}(t,o,e,n),connect:e=>function(e,t){e.loading||async function(e){e.loading=!0;let t=0,n=0;const r=[];let o=0;const a=0!==e.totalDownloadBytes;for(;;)try{const{value:l,done:c}=await e.stream.read();if(c)break;if(t+=l.length,null!=e.totalDownloadBytes){const n=t/e.totalDownloadBytes*100;if(e.onProgress&&n-o>1){const r=new ProgressEvent("progress",{lengthComputable:a,loaded:t,total:e.totalDownloadBytes});e.onProgress(r),o=n}}r.push(l);const s=t-n;if(null!=e.totalDownloadBytes&&s>e.rowLength*e.chunkSize){let t=Math.floor(s/e.rowLength);const o=new Uint8Array(s);let l=0;for(const e of r)o.set(e,l),l+=e.length;if(r.length=0,s>t*e.rowLength){const n=new Uint8Array(s-t*e.rowLength);n.set(o.subarray(s-n.length,s),0),r.push(n)}const c=new Uint8Array(t*e.rowLength);c.set(o.subarray(0,c.byteLength),0);const i=d(e,c.buffer,t);if(e.worker.postMessage({method:"push",src:e.url,length:16*e.numVertices,matrices:i.buffer},[i.buffer]),n+=t*e.rowLength,e.onProgress){const t=new ProgressEvent("progress",{lengthComputable:a,loaded:e.totalDownloadBytes,total:e.totalDownloadBytes});e.onProgress(t)}}}catch(e){console.error(e);break}if(t-n>0){let t=new Uint8Array(r.reduce(((e,t)=>e+t.length),0)),n=0;for(const e of r)t.set(e,n),n+=e.length;let o=Math.floor(t.byteLength/e.rowLength);const a=d(e,t.buffer,o);e.worker.postMessage({method:"push",src:e.url,length:16*o,matrices:a.buffer},[a.buffer])}e.loaded=!0,e.manager.itemEnd(e.url)}(e);t.ready=!1,t.pm=new l.Matrix4,t.vm1=new l.Matrix4,t.vm2=new l.Matrix4,t.viewport=new l.Vector4;let n=new Uint32Array(e.bufferTextureWidth*e.bufferTextureHeight);const r=new l.InstancedBufferAttribute(n,1,!1);r.setUsage(l.DynamicDrawUsage);const o=t.geometry=new l.InstancedBufferGeometry,a=new Float32Array(18),c=new l.BufferAttribute(a,3);function s(e){if(t&&e.data.key===t.uuid){let n=new Uint32Array(e.data.indices);o.attributes.splatIndex.set(n),o.attributes.splatIndex.needsUpdate=!0,o.instanceCount=n.length,t.ready=!0}}async function i(){for(;;){const t=e.gl.properties.get(e.centerAndScaleTexture),n=e.gl.properties.get(e.covAndColorTexture);if(null!=t&&t.__webglTexture&&null!=n&&n.__webglTexture&&e.loadedVertexCount>0)break;await new Promise((e=>setTimeout(e,10)))}t.ready=!0}return o.setAttribute("position",c),c.setXYZ(2,-2,2,0),c.setXYZ(1,2,2,0),c.setXYZ(0,-2,-2,0),c.setXYZ(5,-2,-2,0),c.setXYZ(4,2,2,0),c.setXYZ(3,2,-2,0),c.needsUpdate=!0,o.setAttribute("splatIndex",r),o.instanceCount=1,e.worker.addEventListener("message",s),i(),()=>e.worker.removeEventListener("message",s)}(o,e),loading:!1,loaded:!1,loadedVertexCount:0,chunkSize:this.chunkSize,totalDownloadBytes:0,numVertices:0,rowLength:32,maxVertexes:0,bufferTextureWidth:0,bufferTextureHeight:0,stream:null,centerAndScaleData:null,covAndColorData:null,covAndColorTexture:null,centerAndScaleTexture:null,onProgress:n};(async function(e){e.manager.itemStart(e.url);const t=await fetch(e.url);if(null===t.body)throw"Failed to fetch file";let n=t.headers.get("Content-Length");const r=n?parseInt(n):void 0;if(null==r)throw"Failed to get content length";e.stream=t.body.getReader(),e.totalDownloadBytes=r,e.numVertices=Math.floor(e.totalDownloadBytes/e.rowLength);const o=e.gl.getContext();let a=o.getParameter(o.MAX_TEXTURE_SIZE);e.maxVertexes=a*a,e.numVertices>e.maxVertexes&&(e.numVertices=e.maxVertexes);return e.bufferTextureWidth=a,e.bufferTextureHeight=Math.floor((e.numVertices-1)/a)+1,e.centerAndScaleData=new Float32Array(e.bufferTextureWidth*e.bufferTextureHeight*4),e.covAndColorData=new Uint32Array(e.bufferTextureWidth*e.bufferTextureHeight*4),e.centerAndScaleTexture=new l.DataTexture(e.centerAndScaleData,e.bufferTextureWidth,e.bufferTextureHeight,l.RGBAFormat,l.FloatType),e.centerAndScaleTexture.needsUpdate=!0,e.covAndColorTexture=new l.DataTexture(e.covAndColorData,e.bufferTextureWidth,e.bufferTextureHeight,l.RGBAIntegerFormat,l.UnsignedIntType),e.covAndColorTexture.internalFormat="RGBA32UI",e.covAndColorTexture.needsUpdate=!0,e})(o).then(t).catch((e=>{null==r||r(e),o.manager.itemError(o.url)}))}}function d(e,t,n){const r=e.gl.getContext();if(e.loadedVertexCount+n>e.maxVertexes&&(n=e.maxVertexes-e.loadedVertexCount),n<=0)throw"Failed to parse file";const o=new Uint8Array(t),a=new Float32Array(t),c=new Float32Array(16*n),s=new Uint8Array(e.covAndColorData.buffer),i=new Int16Array(e.covAndColorData.buffer);for(let t=0;t<n;t++){const n=new l.Quaternion(-(o[32*t+28+1]-128)/128,(o[32*t+28+2]-128)/128,(o[32*t+28+3]-128)/128,-(o[32*t+28+0]-128)/128);n.invert();const r=new l.Vector3(a[8*t+0],a[8*t+1],-a[8*t+2]),u=new l.Vector3(a[8*t+3+0],a[8*t+3+1],a[8*t+3+2]),d=new l.Matrix4;d.makeRotationFromQuaternion(n),d.transpose(),d.scale(u);const f=d.clone();d.transpose(),d.premultiply(f),d.setPosition(r);const x=[0,1,2,5,6,10];let g=0;for(let e=0;e<x.length;e++)Math.abs(d.elements[x[e]])>g&&(g=Math.abs(d.elements[x[e]]));let m=4*e.loadedVertexCount+4*t;e.centerAndScaleData[m+0]=r.x,e.centerAndScaleData[m+1]=-r.y,e.centerAndScaleData[m+2]=r.z,e.centerAndScaleData[m+3]=g/32767,m=8*e.loadedVertexCount+4*t*2;for(let e=0;e<x.length;e++)i[m+e]=32767*d.elements[x[e]]/g;m=16*e.loadedVertexCount+4*(4*t+3);const p=new l.Color(o[32*t+24+0]/255,o[32*t+24+1]/255,o[32*t+24+2]/255);p.convertSRGBToLinear(),s[m+0]=255*p.r,s[m+1]=255*p.g,s[m+2]=255*p.b,s[m+3]=o[32*t+24+3],d.elements[15]=Math.max(u.x,u.y,u.z)*o[32*t+24+3]/255;for(let e=0;e<16;e++)c[16*t+e]=d.elements[e]}for(;n>0;){let t=0,o=0;const a=e.loadedVertexCount%e.bufferTextureWidth,l=Math.floor(e.loadedVertexCount/e.bufferTextureWidth);e.loadedVertexCount%e.bufferTextureWidth!=0?(t=Math.min(e.bufferTextureWidth,a+n)-a,o=1):Math.floor(n/e.bufferTextureWidth)>0?(t=e.bufferTextureWidth,o=Math.floor(n/e.bufferTextureWidth)):(t=n%e.bufferTextureWidth,o=1);const c=e.gl.properties.get(e.centerAndScaleTexture);r.bindTexture(r.TEXTURE_2D,c.__webglTexture),r.texSubImage2D(r.TEXTURE_2D,0,a,l,t,o,r.RGBA,r.FLOAT,e.centerAndScaleData,4*e.loadedVertexCount);const s=e.gl.properties.get(e.covAndColorTexture);r.bindTexture(r.TEXTURE_2D,s.__webglTexture),r.texSubImage2D(r.TEXTURE_2D,0,a,l,t,o,r.RGBA_INTEGER,r.UNSIGNED_INT,e.covAndColorData,4*e.loadedVertexCount),e.gl.resetState(),e.loadedVertexCount+=t*o,n-=t*o}return c}exports.Splat=function({src:t,toneMapped:n=!1,alphaTest:o=0,alphaHash:a=!1,chunkSize:i=25e3,...d}){r.extend({SplatMaterial:s});const f=c.useRef(null),x=r.useThree((e=>e.gl)),g=r.useThree((e=>e.camera)),m=r.useLoader(u,t,(e=>{e.gl=x,e.chunkSize=i}));return c.useLayoutEffect((()=>m.connect(f.current)),[t]),r.useFrame((()=>m.update(f.current,g,a))),c.createElement("mesh",e({ref:f,frustumCulled:!1},d),c.createElement("splatMaterial",{key:`${t}/${o}/${a}${s.key}`,transparent:!a,depthTest:!0,alphaTest:a?0:o,centerAndScaleTexture:m.centerAndScaleTexture,covAndColorTexture:m.covAndColorTexture,depthWrite:!!a||o>0,blending:a?l.NormalBlending:l.CustomBlending,blendSrcAlpha:l.OneFactor,alphaHash:!!a,toneMapped:n}))};
|
package/core/SpotLight.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("three"),a=require("@react-three/fiber"),n=require("three-stdlib"),o=require("../materials/SpotLightMaterial.cjs.js");function i(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("../helpers/constants.cjs.js");var u=i(t);function l({opacity:e=1,radiusTop:t,radiusBottom:n,depthBuffer:i,color:l="white",distance:s=5,angle:c=.15,attenuation:p=5,anglePower:m=5}){const d=u.useRef(null),h=a.useThree((e=>e.size)),f=a.useThree((e=>e.camera)),g=a.useThree((e=>e.viewport.dpr)),[v]=u.useState((()=>new o.SpotLightMaterial)),[w]=u.useState((()=>new r.Vector3));t=void 0===t?.1:t,n=void 0===n?7*c:n,a.useFrame((()=>{v.uniforms.spotPosition.value.copy(d.current.getWorldPosition(w)),d.current.lookAt(d.current.parent.target.getWorldPosition(w))}));const S=u.useMemo((()=>{const e=new r.CylinderGeometry(t,n,s,128,64,!0);return e.applyMatrix4((new r.Matrix4).makeTranslation(0,-s/2,0)),e.applyMatrix4((new r.Matrix4).makeRotationX(-Math.PI/2)),e}),[s,t,n]);return u.createElement(u.Fragment,null,u.createElement("mesh",{ref:d,geometry:S,raycast:()=>null},u.createElement("primitive",{object:v,attach:"material","uniforms-opacity-value":e,"uniforms-lightColor-value":l,"uniforms-attenuation-value":p,"uniforms-anglePower-value":m,"uniforms-depth-value":i,"uniforms-cameraNear-value":f.near,"uniforms-cameraFar-value":f.far,"uniforms-resolution-value":i?[h.width*g,h.height*g]:[0,0]})))}function s(e,t,n,o,i){const[[l,s]]=u.useState((()=>[new r.Vector3,new r.Vector3]));u.useLayoutEffect((()=>{if(!(null==(t=e.current)?void 0:t.isSpotLight))throw new Error("SpotlightShadow must be a child of a SpotLight");var t;e.current.shadow.mapSize.set(n,o),e.current.shadow.needsUpdate=!0}),[e,n,o]),a.useFrame((()=>{if(!e.current)return;const r=e.current.position,a=e.current.target.position;s.copy(a).sub(r);var n=s.length();s.normalize().multiplyScalar(n*i),l.copy(r).add(s),t.current.position.copy(l),t.current.lookAt(e.current.target.position)}))}function c({distance:e=.4,alphaTest:t=.5,map:o,shader:i="#define GLSLIFY 1\nvarying vec2 vUv;uniform sampler2D uShadowMap;uniform float uTime;void main(){vec3 color=texture2D(uShadowMap,vUv).xyz;gl_FragColor=vec4(color,1.);}",width:l=512,height:c=512,scale:p=1,children:m,...d}){const h=u.useRef(null),f=d.spotlightRef,g=d.debug;s(f,h,l,c,e);const v=u.useMemo((()=>new r.WebGLRenderTarget(l,c,{format:r.RGBAFormat,stencilBuffer:!1})),[l,c]),w=u.useRef({uShadowMap:{value:o},uTime:{value:0}});u.useEffect((()=>{w.current.uShadowMap.value=o}),[o]);const S=u.useMemo((()=>new n.FullScreenQuad(new r.ShaderMaterial({uniforms:w.current,vertexShader:"\n varying vec2 vUv;\n\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n ",fragmentShader:i}))),[i]);return u.useEffect((()=>()=>{S.material.dispose(),S.dispose()}),[S]),u.useEffect((()=>()=>v.dispose()),[v]),a.useFrame((({gl:e},t)=>{w.current.uTime.value+=t,e.setRenderTarget(v),S.render(e),e.setRenderTarget(null)})),u.createElement(u.Fragment,null,u.createElement("mesh",{ref:h,scale:p,castShadow:!0},u.createElement("planeGeometry",null),u.createElement("meshBasicMaterial",{transparent:!0,side:r.DoubleSide,alphaTest:t,alphaMap:v.texture,"alphaMap-wrapS":r.RepeatWrapping,"alphaMap-wrapT":r.RepeatWrapping,opacity:g?1:0},m)))}function p({distance:e=.4,alphaTest:t=.5,map:a,width:n=512,height:o=512,scale:i,children:l,...c}){const p=u.useRef(null),m=c.spotlightRef,d=c.debug;return s(m,p,n,o,e),u.createElement(u.Fragment,null,u.createElement("mesh",{ref:p,scale:i,castShadow:!0},u.createElement("planeGeometry",null),u.createElement("meshBasicMaterial",{transparent:!0,side:r.DoubleSide,alphaTest:t,alphaMap:a,"alphaMap-wrapS":r.RepeatWrapping,"alphaMap-wrapT":r.RepeatWrapping,opacity:d?1:0},l)))}const m=u.forwardRef((({opacity:t=1,radiusTop:r,radiusBottom:a,depthBuffer:n,color:o="white",distance:i=5,angle:s=.15,attenuation:c=5,anglePower:p=5,volumetric:m=!0,debug:d=!1,children:h,...f},g)=>{const v=u.useRef(null);return u.useImperativeHandle(g,(()=>v.current),[]),u.createElement("group",null,d&&v.current&&u.createElement("spotLightHelper",{args:[v.current]}),u.createElement("spotLight",e({ref:v,angle:s,color:o,distance:i,castShadow:!0},f),m&&u.createElement(l,{debug:d,opacity:t,radiusTop:r,radiusBottom:a,depthBuffer:n,color:o,distance:i,angle:s,attenuation:c,anglePower:p})),h&&u.cloneElement(h,{spotlightRef:v,debug:d}))}));exports.SpotLight=m,exports.SpotLightShadow=function(e){return e.shader?u.createElement(c,e):u.createElement(p,e)};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("@react-three/fiber"),n=require("three"),u=require("./Instances.cjs.js"),a=require("./useSpriteLoader.cjs.js");function c(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("react-composer"),require("../helpers/deprecated.cjs.js");var s=c(r),l=c(n);const o=s.createContext(null);const i=new l.PlaneGeometry(1,1),f=s.forwardRef((({startFrame:r,endFrame:n,fps:c,frameName:f,textureDataURL:m,textureImageURL:p,loop:d,numberOfFrames:h,autoPlay:y,animationNames:v,onStart:w,onEnd:E,onLoopEnd:g,onFrame:x,play:F,pause:S,flipX:b,alphaTest:R,children:j,asSprite:A,offset:M,playBackwards:z,resetOnEnd:O,maxItems:N,instanceItems:q,spriteDataset:L,canvasRenderingContext2DSettings:T,roundFramePosition:k=!1,meshProps:D={},...I},P)=>{var C;const U=s.useRef(),B=s.useRef(null),G=s.useRef(),H=s.useRef(),J=s.useRef(window.performance.now()),V=s.useRef(r||0),W=s.useRef(f||""),X=(null!=c?c:30)>0?1e3/(c||30):0,[K,Q]=s.useState(new l.Texture),Y=s.useRef(0),[Z,$]=s.useState([1,1,1]),_=b?-1:1,[ee,re]=s.useState(null==A||A),te=s.useRef(S),ne=s.useRef(M),ue=s.useRef(!1),ae=s.useRef([]),{spriteObj:ce,loadJsonAndTexture:se}=a.useSpriteLoader(null,null,v,h,void 0,T);function le(){}const oe=s.useMemo((()=>({current:ne.current,offset:ne.current,imageUrl:p,reset:le,hasEnded:!1,ref:P})),[p,L]);s.useImperativeHandle(P,(()=>U.current),[]),s.useLayoutEffect((()=>{ne.current=M}),[M]);const ie=(e,r)=>{const t=r/e;return H.current&&H.current.scale.set(1,t,1),[1,t,1]};s.useEffect((()=>{var e;L?fe(null==L||null==(e=L.spriteTexture)?void 0:e.clone(),L.spriteData):p&&m&&se(p,m)}),[L]),s.useEffect((()=>{var e;ce&&fe(null==ce||null==(e=ce.spriteTexture)?void 0:e.clone(),null==ce?void 0:ce.spriteData)}),[ce]),s.useEffect((()=>{re(null==A||A)}),[A]),s.useEffect((()=>{oe.hasEnded=!1,B.current&&!0===z?V.current=B.current.frames.length-1:V.current=0}),[z]),s.useLayoutEffect((()=>{me()}),[K,b]),s.useEffect((()=>{y&&(te.current=!1)}),[y]),s.useLayoutEffect((()=>{if(W.current!==f&&f&&(V.current=0,W.current=f,oe.hasEnded=!1,X<=0&&(V.current=n||r||0),B.current)){const{w:e,h:r}=de(B.current.frames).sourceSize,t=ie(e,r);$(t)}}),[f,X]);const fe=(e,r=null)=>{if(null===r){if(h){const t=e.image.width,n=e.image.height;Y.current=h,z&&(V.current=h-1),B.current={frames:[],meta:{version:"1.0",size:{w:t,h:n},scale:"1"}},B.current.frames=r}}else{B.current=r,Y.current=B.current.frames.length,z&&(V.current=Y.current-1);const{w:t,h:n}=de(B.current.frames).sourceSize,u=ie(t,n);$(u),G.current&&(G.current.map=e)}if(q)for(var t=0;t<q.length;t++){const e=Object.keys(B.current.frames),r=e[Math.floor(Math.random()*e.length)];ae.current.push({key:t,frames:B.current.frames,selectedFrame:r,offset:{x:0,y:0}})}Q(e)},me=()=>{if(!B.current)return;const{meta:{size:e},frames:r}=B.current,{w:t,h:n}=Array.isArray(r)?r[0].sourceSize:f&&r[f]?r[f][0].sourceSize:{w:0,h:0};G.current.map.wrapS=G.current.map.wrapT=l.RepeatWrapping,G.current.map.center.set(0,0),G.current.map.repeat.set(1*_/(e.w/t),1/(e.h/n));const u=1/((e.h-1)/n);G.current.map.offset.x=0,G.current.map.offset.y=1-u,w&&w({currentFrameName:f,currentFrame:V.current})},pe=(e,r,t,n)=>{var u=void 0===M?oe.current:M;const a=V.current;let c=0,s=0;ie(e,r);const l=k?Math.round((t.w-1)/e):(t.w-1)/e,o=k?Math.round((t.h-1)/r):(t.h-1)/r;if(!n[a])return;const{frame:{x:i,y:f},sourceSize:{w:m,h:p}}=n[a],d=1/l,h=1/o;if(c=_>0?d*(i/m):d*(i/m)-G.current.map.repeat.x,s=Math.abs(1-h)-h*(f/p),G.current.map.offset.x=c,G.current.map.offset.y=s,null!=u){let e=Math.floor(u*n.length);e=Math.max(0,Math.min(e,n.length-1)),isNaN(e)&&(e=0),V.current=e}else z?V.current-=1:V.current+=1};t.useFrame(((e,t)=>{var u,a;null!=(u=B.current)&&u.frames&&null!=(a=G.current)&&a.map&&(te.current||oe.hasEnded||!y&&!F||((()=>{const{meta:{size:e},frames:t}=B.current,{w:u,h:a}=de(t).sourceSize,c=Array.isArray(t)?t:f?t[f]:[],s=n||c.length-1;var l=void 0===M?oe.current:M;if(X<=0)return V.current=n||r||0,void pe(u,a,e,c);const o=window.performance.now(),i=o-J.current;if(!(i<=X)){var m=z?V.current<0:V.current>s,p=z?V.current===s:0===V.current,h=z?V.current<0:V.current>=s;if(m){if(V.current=d&&null!=r?r:0,z&&(V.current=s),d?null==g||g({currentFrameName:f,currentFrame:V.current}):(null==E||E({currentFrameName:f,currentFrame:V.current}),oe.hasEnded=!O,O&&(te.current=!0)),!d)return}else p&&(null==w||w({currentFrameName:f,currentFrame:V.current}));void 0!==l&&h?!1===ue.current&&(null==E||E({currentFrameName:f,currentFrame:V.current}),ue.current=!0):ue.current=!1,i<=X||(J.current=o-i%X,pe(u,a,e,c))}})(),x&&x({currentFrameName:W.current,currentFrame:V.current})))}));const de=e=>{if(Array.isArray(e))return e[0];if("object"==typeof e&&null!==e){const r=Object.keys(e);return f?e[f][0]:e[r[0]][0]}return{w:0,h:0}};return s.createElement("group",e({},I,{ref:U,scale:function(e,r){let t=[];return"number"==typeof r?t=[r,r,r]:Array.isArray(r)?t=r:r instanceof l.Vector3&&(t=[r.x,r.y,r.z]),e.map(((e,r)=>e*t[r]))}(null!=Z?Z:[1,1,1],null!==(C=I.scale)&&void 0!==C?C:1)}),s.createElement(o.Provider,{value:oe},s.createElement(s.Suspense,{fallback:null},ee&&s.createElement("sprite",e({ref:H,scale:1,geometry:i},D),s.createElement("spriteMaterial",{premultipliedAlpha:!1,toneMapped:!1,ref:G,map:K,transparent:!0,alphaTest:null!=R?R:0})),!ee&&s.createElement(u.Instances,e({geometry:i,limit:null!=N?N:1},D),s.createElement("meshBasicMaterial",{premultipliedAlpha:!1,toneMapped:!1,side:l.DoubleSide,ref:G,map:K,transparent:!0,alphaTest:null!=R?R:0}),(null!=q?q:[0]).map(((r,t)=>s.createElement(u.Instance,e({key:t,ref:1===(null==q?void 0:q.length)?H:null,position:r,scale:1},D)))))),j))}));exports.SpriteAnimator=f,exports.useSpriteAnimator=function(){return s.useContext(o)};
|
package/core/SpriteAnimator.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
type CommonMeshProps = {
|
|
3
|
+
frustumCulled?: boolean;
|
|
4
|
+
renderOrder?: number;
|
|
5
|
+
visible?: boolean;
|
|
6
|
+
userData?: any;
|
|
7
|
+
matrixAutoUpdate?: boolean;
|
|
8
|
+
};
|
|
2
9
|
export type SpriteAnimatorProps = {
|
|
3
10
|
startFrame?: number;
|
|
4
11
|
endFrame?: number;
|
|
@@ -27,6 +34,8 @@ export type SpriteAnimatorProps = {
|
|
|
27
34
|
instanceItems?: any[];
|
|
28
35
|
spriteDataset?: any;
|
|
29
36
|
canvasRenderingContext2DSettings?: CanvasRenderingContext2DSettings;
|
|
37
|
+
roundFramePosition?: boolean;
|
|
38
|
+
meshProps?: CommonMeshProps;
|
|
30
39
|
} & JSX.IntrinsicElements['group'];
|
|
31
40
|
type SpriteAnimatorState = {
|
|
32
41
|
current: number | undefined;
|
package/core/SpriteAnimator.js
CHANGED
|
@@ -9,6 +9,7 @@ const context = /*#__PURE__*/React.createContext(null);
|
|
|
9
9
|
function useSpriteAnimator() {
|
|
10
10
|
return React.useContext(context);
|
|
11
11
|
}
|
|
12
|
+
const geometry = new THREE.PlaneGeometry(1, 1);
|
|
12
13
|
const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
13
14
|
startFrame,
|
|
14
15
|
endFrame,
|
|
@@ -37,6 +38,8 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
37
38
|
instanceItems,
|
|
38
39
|
spriteDataset,
|
|
39
40
|
canvasRenderingContext2DSettings,
|
|
41
|
+
roundFramePosition = false,
|
|
42
|
+
meshProps = {},
|
|
40
43
|
...props
|
|
41
44
|
}, fref) => {
|
|
42
45
|
var _props$scale;
|
|
@@ -47,7 +50,7 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
47
50
|
const timerOffset = React.useRef(window.performance.now());
|
|
48
51
|
const currentFrame = React.useRef(startFrame || 0);
|
|
49
52
|
const currentFrameName = React.useRef(frameName || '');
|
|
50
|
-
const fpsInterval = 1000 / (fps || 30);
|
|
53
|
+
const fpsInterval = (fps !== null && fps !== void 0 ? fps : 30) > 0 ? 1000 / (fps || 30) : 0;
|
|
51
54
|
const [spriteTexture, setSpriteTexture] = React.useState(new THREE.Texture());
|
|
52
55
|
const totalFrames = React.useRef(0);
|
|
53
56
|
const [aspect, setAspect] = React.useState([1, 1, 1]);
|
|
@@ -90,7 +93,9 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
90
93
|
var _spriteDataset$sprite;
|
|
91
94
|
parseSpriteDataLite(spriteDataset == null || (_spriteDataset$sprite = spriteDataset.spriteTexture) == null ? void 0 : _spriteDataset$sprite.clone(), spriteDataset.spriteData);
|
|
92
95
|
} else {
|
|
93
|
-
|
|
96
|
+
if (textureImageURL && textureDataURL) {
|
|
97
|
+
loadJsonAndTexture(textureImageURL, textureDataURL);
|
|
98
|
+
}
|
|
94
99
|
}
|
|
95
100
|
}, [spriteDataset]);
|
|
96
101
|
React.useEffect(() => {
|
|
@@ -125,6 +130,9 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
125
130
|
currentFrame.current = 0;
|
|
126
131
|
currentFrameName.current = frameName;
|
|
127
132
|
state.hasEnded = false;
|
|
133
|
+
if (fpsInterval <= 0) {
|
|
134
|
+
currentFrame.current = endFrame || startFrame || 0;
|
|
135
|
+
}
|
|
128
136
|
// modifySpritePosition()
|
|
129
137
|
if (spriteData.current) {
|
|
130
138
|
const {
|
|
@@ -135,7 +143,7 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
135
143
|
setAspect(_aspect);
|
|
136
144
|
}
|
|
137
145
|
}
|
|
138
|
-
}, [frameName]);
|
|
146
|
+
}, [frameName, fpsInterval]);
|
|
139
147
|
|
|
140
148
|
// lite version for pre-loaded assets
|
|
141
149
|
const parseSpriteDataLite = (textureData, frameData = null) => {
|
|
@@ -237,8 +245,6 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
237
245
|
const runAnimation = () => {
|
|
238
246
|
//if (!frameName) return
|
|
239
247
|
|
|
240
|
-
const now = window.performance.now();
|
|
241
|
-
const diff = now - timerOffset.current;
|
|
242
248
|
const {
|
|
243
249
|
meta: {
|
|
244
250
|
size: metaInfo
|
|
@@ -252,6 +258,14 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
252
258
|
const spriteFrames = Array.isArray(frames) ? frames : frameName ? frames[frameName] : [];
|
|
253
259
|
const _endFrame = endFrame || spriteFrames.length - 1;
|
|
254
260
|
var _offset = offset === undefined ? state.current : offset;
|
|
261
|
+
if (fpsInterval <= 0) {
|
|
262
|
+
currentFrame.current = endFrame || startFrame || 0;
|
|
263
|
+
calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames);
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
const now = window.performance.now();
|
|
267
|
+
const diff = now - timerOffset.current;
|
|
268
|
+
if (diff <= fpsInterval) return;
|
|
255
269
|
|
|
256
270
|
// conditionals to support backwards play
|
|
257
271
|
var endCondition = playBackwards ? currentFrame.current < 0 : currentFrame.current > _endFrame;
|
|
@@ -278,7 +292,6 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
278
292
|
//calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames)
|
|
279
293
|
}
|
|
280
294
|
}
|
|
281
|
-
|
|
282
295
|
if (!loop) return;
|
|
283
296
|
} else if (onStartCondition) {
|
|
284
297
|
onStart == null || onStart({
|
|
@@ -313,8 +326,8 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
313
326
|
let finalValX = 0;
|
|
314
327
|
let finalValY = 0;
|
|
315
328
|
calculateAspectRatio(frameW, frameH);
|
|
316
|
-
const framesH = Math.round((metaInfo.w - 1) / frameW);
|
|
317
|
-
const framesV = Math.round((metaInfo.h - 1) / frameH);
|
|
329
|
+
const framesH = roundFramePosition ? Math.round((metaInfo.w - 1) / frameW) : (metaInfo.w - 1) / frameW;
|
|
330
|
+
const framesV = roundFramePosition ? Math.round((metaInfo.h - 1) / frameH) : (metaInfo.h - 1) / frameH;
|
|
318
331
|
if (!spriteFrames[targetFrame]) {
|
|
319
332
|
return;
|
|
320
333
|
}
|
|
@@ -345,7 +358,6 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
345
358
|
if (isNaN(frameIndex)) {
|
|
346
359
|
frameIndex = 0; //fallback
|
|
347
360
|
}
|
|
348
|
-
|
|
349
361
|
currentFrame.current = frameIndex;
|
|
350
362
|
} else {
|
|
351
363
|
// auto update
|
|
@@ -414,21 +426,21 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
414
426
|
value: state
|
|
415
427
|
}, /*#__PURE__*/React.createElement(React.Suspense, {
|
|
416
428
|
fallback: null
|
|
417
|
-
}, displayAsSprite && /*#__PURE__*/React.createElement("sprite", {
|
|
429
|
+
}, displayAsSprite && /*#__PURE__*/React.createElement("sprite", _extends({
|
|
418
430
|
ref: spriteRef,
|
|
419
|
-
scale: 1.0
|
|
420
|
-
|
|
431
|
+
scale: 1.0,
|
|
432
|
+
geometry: geometry
|
|
433
|
+
}, meshProps), /*#__PURE__*/React.createElement("spriteMaterial", {
|
|
421
434
|
premultipliedAlpha: false,
|
|
422
435
|
toneMapped: false,
|
|
423
436
|
ref: matRef,
|
|
424
437
|
map: spriteTexture,
|
|
425
438
|
transparent: true,
|
|
426
439
|
alphaTest: alphaTest !== null && alphaTest !== void 0 ? alphaTest : 0.0
|
|
427
|
-
})), !displayAsSprite && /*#__PURE__*/React.createElement(Instances, {
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
}), /*#__PURE__*/React.createElement("meshBasicMaterial", {
|
|
440
|
+
})), !displayAsSprite && /*#__PURE__*/React.createElement(Instances, _extends({
|
|
441
|
+
geometry: geometry,
|
|
442
|
+
limit: maxItems !== null && maxItems !== void 0 ? maxItems : 1
|
|
443
|
+
}, meshProps), /*#__PURE__*/React.createElement("meshBasicMaterial", {
|
|
432
444
|
premultipliedAlpha: false,
|
|
433
445
|
toneMapped: false,
|
|
434
446
|
side: THREE.DoubleSide,
|
|
@@ -436,14 +448,12 @@ const SpriteAnimator = /* @__PURE__ */React.forwardRef(({
|
|
|
436
448
|
map: spriteTexture,
|
|
437
449
|
transparent: true,
|
|
438
450
|
alphaTest: alphaTest !== null && alphaTest !== void 0 ? alphaTest : 0.0
|
|
439
|
-
}), (instanceItems !== null && instanceItems !== void 0 ? instanceItems : [0]).map((item, index) => {
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
});
|
|
446
|
-
}))), children));
|
|
451
|
+
}), (instanceItems !== null && instanceItems !== void 0 ? instanceItems : [0]).map((item, index) => /*#__PURE__*/React.createElement(Instance, _extends({
|
|
452
|
+
key: index,
|
|
453
|
+
ref: (instanceItems == null ? void 0 : instanceItems.length) === 1 ? spriteRef : null,
|
|
454
|
+
position: item,
|
|
455
|
+
scale: 1.0
|
|
456
|
+
}, meshProps))))), children));
|
|
447
457
|
});
|
|
448
458
|
|
|
449
459
|
export { SpriteAnimator, useSpriteAnimator };
|
package/core/Stage.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";var e=require("@babel/runtime/helpers/extends"),t=require("react"),i=require("./Environment.cjs.js"),n=require("./ContactShadows.cjs.js"),r=require("./Center.cjs.js"),a=require("./AccumulativeShadows.cjs.js"),s=require("./Bounds.cjs.js");function l(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(i){if("default"!==i){var n=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,n.get?n:{enumerable:!0,get:function(){return e[i]}})}})),t.default=e,Object.freeze(t)}require("@react-three/fiber"),require("three"),require("three-stdlib"),require("./useEnvironment.cjs.js"),require("@monogrid/gainmap-js"),require("../helpers/environment-assets.cjs.js"),require("../helpers/deprecated.cjs.js"),require("./shaderMaterial.cjs.js"),require("../materials/DiscardMaterial.cjs.js"),require("../helpers/constants.cjs.js");var o=l(t);const u={rembrandt:{main:[1,2,1],fill:[-2,-.5,-2]},portrait:{main:[-1,2,.5],fill:[-1,.5,-1.5]},upfront:{main:[0,2,1],fill:[-1,.5,-1.5]},soft:{main:[-2,4,4],fill:[-1,.5,-1.5]}};function c({radius:e,adjustCamera:t}){const i=s.useBounds();return o.useEffect((()=>{t&&i.refresh().clip().fit()}),[e,t]),null}exports.Stage=function({children:t,center:l,adjustCamera:d=!0,intensity:m=.5,shadows:h="contact",environment:p="city",preset:f="rembrandt",...j}){var v,b,g,q,E,y,w,C;const S="string"==typeof f?u[f]:f,[{radius:z,height:O},B]=o.useState({radius:0,width:0,height:0,depth:0}),L=null!==(v=null==h?void 0:h.bias)&&void 0!==v?v:-1e-4,M=null!==(b=null==h?void 0:h.normalBias)&&void 0!==b?b:0,k=null!==(g=null==h?void 0:h.size)&&void 0!==g?g:1024,x=null!==(q=null==h?void 0:h.offset)&&void 0!==q?q:0,A="contact"===h||"contact"===(null==h?void 0:h.type),D="accumulative"===h||"accumulative"===(null==h?void 0:h.type),P={..."object"==typeof h?h:{}},F=p?"string"==typeof p?{preset:p}:p:null,N=o.useCallback((e=>{const{width:t,height:i,depth:n,boundingSphere:r}=e;B({radius:r.radius,width:t,height:i,depth:n}),null!=l&&l.onCentered&&l.onCentered(e)}),[]);return o.createElement(o.Fragment,null,o.createElement("ambientLight",{intensity:m/3}),o.createElement("spotLight",{penumbra:1,position:[S.main[0]*z,S.main[1]*z,S.main[2]*z],intensity:2*m,castShadow:!!h,"shadow-bias":L,"shadow-normalBias":M,"shadow-mapSize":k}),o.createElement("pointLight",{position:[S.fill[0]*z,S.fill[1]*z,S.fill[2]*z],intensity:m}),o.createElement(s.Bounds,e({fit:!!d,clip:!!d,margin:Number(d),observe:!0},j),o.createElement(c,{radius:z,adjustCamera:d}),o.createElement(r.Center,e({},l,{position:[0,x/2,0],onCentered:N}),t)),o.createElement("group",{position:[0,-O/2-x/2,0]},A&&o.createElement(n.ContactShadows,e({scale:4*z,far:z,blur:2},P)),D&&o.createElement(a.AccumulativeShadows,e({temporal:!0,frames:100,alphaTest:.9,toneMapped:!0,scale:4*z},P),o.createElement(a.RandomizedLight,{amount:null!==(E=P.amount)&&void 0!==E?E:8,radius:null!==(y=P.radius)&&void 0!==y?y:z,ambient:null!==(w=P.ambient)&&void 0!==w?w:.5,intensity:null!==(C=P.intensity)&&void 0!==C?C:1,position:[S.main[0]*z,S.main[1]*z,S.main[2]*z],size:4*z,bias:-L,mapSize:k}))),p&&o.createElement(i.Environment,F))};
|
package/core/Stars.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";var e=require("react"),t=require("@react-three/fiber"),r=require("three"),n=require("../helpers/constants.cjs.js");function a(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 o=a(e);class i extends r.ShaderMaterial{constructor(){super({uniforms:{time:{value:0},fade:{value:1}},vertexShader:"\n uniform float time;\n attribute float size;\n varying vec3 vColor;\n void main() {\n vColor = color;\n vec4 mvPosition = modelViewMatrix * vec4(position, 0.5);\n gl_PointSize = size * (30.0 / -mvPosition.z) * (3.0 + sin(time + 100.0));\n gl_Position = projectionMatrix * mvPosition;\n }",fragmentShader:`\n uniform sampler2D pointTexture;\n uniform float fade;\n varying vec3 vColor;\n void main() {\n float opacity = 1.0;\n if (fade == 1.0) {\n float d = distance(gl_PointCoord, vec2(0.5, 0.5));\n opacity = 1.0 / (1.0 + exp(16.0 * (d - 0.25)));\n }\n gl_FragColor = vec4(vColor, opacity);\n\n #include <tonemapping_fragment>\n\t #include <${n.version>=154?"colorspace_fragment":"encodings_fragment"}>\n }`})}}const c=e=>(new r.Vector3).setFromSpherical(new r.Spherical(e,Math.acos(1-2*Math.random()),2*Math.random()*Math.PI)),s=o.forwardRef((({radius:e=100,depth:n=50,count:a=5e3,saturation:s=0,factor:l=4,fade:u=!1,speed:f=1},m)=>{const d=o.useRef(),[v,p,g]=o.useMemo((()=>{const t=[],o=[],i=Array.from({length:a},(()=>(.5+.5*Math.random())*l)),u=new r.Color;let f=e+n;const m=n/a;for(let e=0;e<a;e++)f-=m*Math.random(),t.push(...c(f).toArray()),u.setHSL(e/a,s,.9),o.push(u.r,u.g,u.b);return[new Float32Array(t),new Float32Array(o),new Float32Array(i)]}),[a,n,l,e,s]);t.useFrame((e=>d.current&&(d.current.uniforms.time.value=e.clock.getElapsedTime()*f)));const[h]=o.useState((()=>new i));return o.createElement("points",{ref:m},o.createElement("bufferGeometry",null,o.createElement("bufferAttribute",{attach:"attributes-position",args:[v,3]}),o.createElement("bufferAttribute",{attach:"attributes-color",args:[p,3]}),o.createElement("bufferAttribute",{attach:"attributes-size",args:[g,1]})),o.createElement("primitive",{ref:d,object:h,attach:"material",blending:r.AdditiveBlending,"uniforms-fade-value":u,depthWrite:!1,transparent:!0,vertexColors:!0}))}));exports.Stars=s;
|
package/core/Stats.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";var e=require("react"),t=require("@react-three/fiber"),r=require("stats.js"),n=require("../helpers/useEffectfulState.cjs.js");function c(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=c(e);exports.Stats=function({showPanel:e=0,className:c,parent:u}){const l=n.useEffectfulState((()=>new r),[]);return s.useEffect((()=>{if(l){const r=u&&u.current||document.body;l.showPanel(e),null==r||r.appendChild(l.dom);const n=(null!=c?c:"").split(" ").filter((e=>e));n.length&&l.dom.classList.add(...n);const s=t.addEffect((()=>l.begin())),a=t.addAfterEffect((()=>l.end()));return()=>{n.length&&l.dom.classList.remove(...n),null==r||r.removeChild(l.dom),s(),a()}}}),[u,l,c,e]),null};
|
package/core/StatsGl.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";var e=require("@react-three/fiber"),t=require("react"),r=require("stats-gl");function l(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var l=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,l.get?l:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var o=l(t);const n=o.forwardRef((({className:t,parent:l,id:n,clearStatsGlStyle:s,...a},c)=>{const u=e.useThree((e=>e.gl)),i=o.useMemo((()=>{const e=new r({...a});return e.init(u),e}),[u]);return o.useImperativeHandle(c,(()=>i.dom)),o.useEffect((()=>{if(i){const r=l&&l.current||document.body;null==r||r.appendChild(i.dom),i.dom.querySelectorAll("canvas").forEach((e=>{e.style.removeProperty("position")})),n&&(i.dom.id=n),s&&i.dom.removeAttribute("style"),i.dom.removeAttribute("style");const o=(null!=t?t:"").split(" ").filter((e=>e));o.length&&i.dom.classList.add(...o);const a=e.addAfterEffect((()=>i.update()));return()=>{o.length&&i.dom.classList.remove(...o),null==r||r.removeChild(i.dom),a()}}}),[l,i,t,n,s]),null}));n.displayName="StatsGl",exports.StatsGl=n;
|
package/core/Svg.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";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){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 o=l(r);const i=r.forwardRef((function({src:l,skipFill:i,skipStrokes:n,fillMaterial:u,strokeMaterial:c,fillMeshProps:p,strokeMeshProps:d,...m},f){const y=t.useLoader(s.SVGLoader,l.startsWith("<svg")?`data:image/svg+xml;utf8,${l}`:l),h=r.useMemo((()=>n?[]: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,n]);r.useEffect((()=>()=>h.forEach((e=>e&&e.map((e=>e.dispose()))))),[h]);let b=0;return o.createElement("object3D",e({ref:f},m),o.createElement("object3D",{scale:[1,-1,1]},y.paths.map(((t,l)=>{var m,f;return o.createElement(r.Fragment,{key:l},!i&&void 0!==(null==(m=t.userData)?void 0:m.style.fill)&&"none"!==t.userData.style.fill&&s.SVGLoader.createShapes(t).map(((r,s)=>o.createElement("mesh",e({key:s},p,{renderOrder:b++}),o.createElement("shapeGeometry",{args:[r]}),o.createElement("meshBasicMaterial",e({color:t.userData.style.fill,opacity:t.userData.style.fillOpacity,transparent:!0,side:a.DoubleSide,depthWrite:!1},u))))),!n&&void 0!==(null==(f=t.userData)?void 0:f.style.stroke)&&"none"!==t.userData.style.stroke&&t.subPaths.map(((r,s)=>o.createElement("mesh",e({key:s,geometry:h[l][s]},d,{renderOrder:b++}),o.createElement("meshBasicMaterial",e({color:t.userData.style.stroke,opacity:t.userData.style.strokeOpacity,transparent:!0,side:a.DoubleSide,depthWrite:!1},c))))))}))))}));exports.Svg=i;
|
package/core/Text.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("troika-three-text"),n=require("@react-three/fiber"),c=require("suspend-react");function o(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 a=o(t);const i=a.forwardRef((({sdfGlyphSize:t=64,anchorX:o="center",anchorY:i="middle",font:s,fontSize:u=1,children:f,characters:h,onSync:d,...l},p)=>{const b=n.useThree((({invalidate:e})=>e)),[y]=a.useState((()=>new r.Text)),[m,x]=a.useMemo((()=>{const e=[];let t="";return a.Children.forEach(f,(r=>{"string"==typeof r||"number"==typeof r?t+=r:e.push(r)})),[e,t]}),[f]);return c.suspend((()=>new Promise((e=>r.preloadFont({font:s,characters:h},e)))),["troika-text",s,h]),a.useLayoutEffect((()=>{y.sync((()=>{b(),d&&d(y)}))})),a.useEffect((()=>()=>y.dispose()),[y]),a.createElement("primitive",e({object:y,ref:p,font:s,text:x,anchorX:o,anchorY:i,fontSize:u,sdfGlyphSize:t},l),m)}));exports.Text=i;
|
package/core/Text.js
CHANGED
|
@@ -4,7 +4,6 @@ import { Text as Text$1, preloadFont } from 'troika-three-text';
|
|
|
4
4
|
import { useThree } from '@react-three/fiber';
|
|
5
5
|
import { suspend } from 'suspend-react';
|
|
6
6
|
|
|
7
|
-
// eslint-disable-next-line prettier/prettier
|
|
8
7
|
const Text = /* @__PURE__ */React.forwardRef(({
|
|
9
8
|
sdfGlyphSize = 64,
|
|
10
9
|
anchorX = 'center',
|
package/core/Text3D.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";var e=require("@babel/runtime/helpers/extends"),t=require("react"),r=require("@react-three/fiber"),n=require("three-stdlib"),s=require("./useFont.cjs.js");function u(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)}require("suspend-react");var c=u(t);const i=["string","number"],l=c.forwardRef((({font:u,letterSpacing:l=0,lineHeight:o=1,size:a=1,height:m=.2,bevelThickness:f=.1,bevelSize:b=.01,bevelEnabled:g=!1,bevelOffset:h=0,bevelSegments:v=4,curveSegments:d=8,smooth:p,children:y,...x},O)=>{c.useMemo((()=>r.extend({RenamedTextGeometry:n.TextGeometry})),[]);const S=c.useRef(null),j=s.useFont(u),E=t.useMemo((()=>({font:j,size:a,height:m,bevelThickness:f,bevelSize:b,bevelEnabled:g,bevelSegments:v,bevelOffset:h,curveSegments:d,letterSpacing:l,lineHeight:o})),[j,a,m,f,b,g,v,h,d,l,o]),[q,...T]=t.useMemo((()=>(e=>{let t="";const r=[];return c.Children.forEach(e,(e=>{i.includes(typeof e)?t+=e+"":r.push(e)})),[t,...r]})(y)),[y]),z=c.useMemo((()=>[q,E]),[q,E]);return c.useLayoutEffect((()=>{p&&(S.current.geometry=n.mergeVertices(S.current.geometry,p),S.current.geometry.computeVertexNormals())}),[z,p]),c.useImperativeHandle(O,(()=>S.current),[]),c.createElement("mesh",e({},x,{ref:S}),c.createElement("renamedTextGeometry",{args:z}),T)}));exports.Text3D=l;
|
package/core/Texture.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";var e=require("react"),r=require("three"),t=require("@react-three/fiber");function u(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 n=u(e);const o=e=>e===Object(e)&&!Array.isArray(e)&&"function"!=typeof e;function a(u,n){const a=t.useThree((e=>e.gl)),c=t.useLoader(r.TextureLoader,o(u)?Object.values(u):u);e.useLayoutEffect((()=>{null==n||n(c)}),[n]),e.useEffect((()=>{if("initTexture"in a){let e=[];Array.isArray(c)?e=c:c instanceof r.Texture?e=[c]:o(c)&&(e=Object.values(c)),e.forEach((e=>{e instanceof r.Texture&&a.initTexture(e)}))}}),[a,c]);return e.useMemo((()=>{if(o(u)){const e={};let r=0;for(const t in u)e[t]=c[r++];return e}return c}),[u,c])}a.preload=e=>t.useLoader.preload(r.TextureLoader,e),a.clear=e=>t.useLoader.clear(r.TextureLoader,e);exports.IsObject=o,exports.Texture=({children:e,input:r,onLoad:t})=>{const u=a(r,t);return n.createElement(n.Fragment,null,null==e?void 0:e(u))},exports.useTexture=a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function s(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 a=s(r);const c=a.forwardRef((({makeDefault:r,camera:s,domElement:c,regress:o,onChange:i,onStart:u,onEnd:l,...f},d)=>{const{invalidate:m,camera:v,gl:E,events:b,set:g,get:p,performance:h,viewport:j}=t.useThree(),L=s||v,O=c||b.connected||E.domElement,k=a.useMemo((()=>new n.TrackballControls(L)),[L]);return t.useFrame((()=>{k.enabled&&k.update()}),-1),a.useEffect((()=>(k.connect(O),()=>{k.dispose()})),[O,o,k,m]),a.useEffect((()=>{const e=e=>{m(),o&&h.regress(),i&&i(e)};return k.addEventListener("change",e),u&&k.addEventListener("start",u),l&&k.addEventListener("end",l),()=>{u&&k.removeEventListener("start",u),l&&k.removeEventListener("end",l),k.removeEventListener("change",e)}}),[i,u,l,k,m]),a.useEffect((()=>{k.handleResize()}),[j]),a.useEffect((()=>{if(r){const e=p().controls;return g({controls:k}),()=>g({controls:e})}}),[r,k]),a.createElement("primitive",e({ref:d,object:k},f))}));exports.TrackballControls=c;
|
package/core/Trail.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";var e=require("@react-three/fiber"),t=require("react"),r=require("three"),n=require("meshline");function o(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 i=o(t);const c={width:.2,length:1,decay:1,local:!1,stride:0,interval:1},s=(e,t=1)=>(e.set(e.subarray(t)),e.fill(-1/0,-t),e);function u(t,n){const{length:o,local:u,decay:l,interval:a,stride:f}={...c,...n},h=i.useRef(),[d]=i.useState((()=>new r.Vector3));i.useLayoutEffect((()=>{t&&(h.current=Float32Array.from({length:10*o*3},((e,r)=>t.position.getComponent(r%3))))}),[o,t]);const p=i.useRef(new r.Vector3),y=i.useRef(0);return e.useFrame((()=>{if(t&&h.current){if(0===y.current){let e;u?e=t.position:(t.getWorldPosition(d),e=d);const r=1*l;for(let t=0;t<r;t++)e.distanceTo(p.current)<f||(s(h.current,3),h.current.set(e.toArray(),h.current.length-3));p.current.copy(e)}y.current++,y.current=y.current%a}})),h}const l=i.forwardRef(((t,o)=>{const{children:s}=t,{width:l,length:a,decay:f,local:h,stride:d,interval:p}={...c,...t},{color:y="hotpink",attenuation:g,target:m}=t,v=e.useThree((e=>e.size)),w=e.useThree((e=>e.scene)),b=i.useRef(null),[j,E]=i.useState(null),M=u(j,{length:a,decay:f,local:h,stride:d,interval:p});i.useEffect((()=>{const e=(null==m?void 0:m.current)||b.current.children.find((e=>e instanceof r.Object3D));e&&E(e)}),[M,m]);const O=i.useMemo((()=>new n.MeshLineGeometry),[]),A=i.useMemo((()=>{var e;const t=new n.MeshLineMaterial({lineWidth:.1*l,color:y,sizeAttenuation:1,resolution:new r.Vector2(v.width,v.height)});let o;if(s)if(Array.isArray(s))o=s.find((e=>{const t=e;return"string"==typeof t.type&&"meshLineMaterial"===t.type}));else{const e=s;"string"==typeof e.type&&"meshLineMaterial"===e.type&&(o=e)}return"object"==typeof(null==(e=o)?void 0:e.props)&&t.setValues(o.props),t}),[l,y,v,s]);return i.useEffect((()=>{A.uniforms.resolution.value.set(v.width,v.height)}),[v]),e.useFrame((()=>{M.current&&O.setPoints(M.current,g)})),i.createElement("group",null,e.createPortal(i.createElement("mesh",{ref:o,geometry:O,material:A}),w),i.createElement("group",{ref:b},s))}));exports.Trail=l,exports.useTrail=u;
|
package/core/Trail.js
CHANGED
|
@@ -138,7 +138,7 @@ const Trail = /* @__PURE__ */React.forwardRef((props, forwardRef) => {
|
|
|
138
138
|
if (!points.current) return;
|
|
139
139
|
geo.setPoints(points.current, attenuation);
|
|
140
140
|
});
|
|
141
|
-
return /*#__PURE__*/React.createElement("group", null, createPortal(
|
|
141
|
+
return /*#__PURE__*/React.createElement("group", null, createPortal(/*#__PURE__*/React.createElement("mesh", {
|
|
142
142
|
ref: forwardRef,
|
|
143
143
|
geometry: geo,
|
|
144
144
|
material: mat
|
package/core/TrailTexture.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";var t=require("react"),e=require("@react-three/fiber"),i=require("three");function s(t){var e=Object.create(null);return t&&Object.keys(t).forEach((function(i){if("default"!==i){var s=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(e,i,s.get?s:{enumerable:!0,get:function(){return t[i]}})}})),e.default=t,Object.freeze(e)}var a=s(t);const h=t=>Math.sqrt(1-Math.pow(t-1,2));class r{constructor({size:t=256,maxAge:e=750,radius:i=.3,intensity:s=.2,interpolate:a=0,smoothing:r=0,minForce:n=.3,blend:c="screen",ease:o=h}={}){this.size=t,this.maxAge=e,this.radius=i,this.intensity=s,this.ease=o,this.interpolate=a,this.smoothing=r,this.minForce=n,this.blend=c,this.trail=[],this.force=0,this.initTexture()}initTexture(){this.canvas=document.createElement("canvas"),this.canvas.width=this.canvas.height=this.size;const t=this.canvas.getContext("2d");if(null===t)throw new Error("2D not available");this.ctx=t,this.ctx.fillStyle="black",this.ctx.fillRect(0,0,this.canvas.width,this.canvas.height),this.texture=new i.Texture(this.canvas),this.canvas.id="touchTexture",this.canvas.style.width=this.canvas.style.height=`${this.canvas.width}px`}update(t){this.clear(),this.trail.forEach(((e,i)=>{e.age+=1e3*t,e.age>this.maxAge&&this.trail.splice(i,1)})),this.trail.length||(this.force=0),this.trail.forEach((t=>{this.drawTouch(t)})),this.texture.needsUpdate=!0}clear(){this.ctx.globalCompositeOperation="source-over",this.ctx.fillStyle="black",this.ctx.fillRect(0,0,this.canvas.width,this.canvas.height)}addTouch(t){const e=this.trail[this.trail.length-1];if(e){const i=e.x-t.x,s=e.y-t.y,a=i*i+s*s,h=Math.max(this.minForce,Math.min(1e4*a,1));if(this.force=function(t,e,i=.9){return e*i+t*(1-i)}(h,this.force,this.smoothing),this.interpolate){const t=Math.ceil(a/Math.pow(.5*this.radius/this.interpolate,2));if(t>1)for(let a=1;a<t;a++)this.trail.push({x:e.x-i/t*a,y:e.y-s/t*a,age:0,force:h})}}this.trail.push({x:t.x,y:t.y,age:0,force:this.force})}drawTouch(t){const e={x:t.x*this.size,y:(1-t.y)*this.size};let i=1;i=t.age<.3*this.maxAge?this.ease(t.age/(.3*this.maxAge)):this.ease(1-(t.age-.3*this.maxAge)/(.7*this.maxAge)),i*=t.force,this.ctx.globalCompositeOperation=this.blend;const s=this.size*this.radius*i,a=this.ctx.createRadialGradient(e.x,e.y,Math.max(0,.25*s),e.x,e.y,Math.max(0,s));a.addColorStop(0,`rgba(255, 255, 255, ${this.intensity})`),a.addColorStop(1,"rgba(0, 0, 0, 0.0)"),this.ctx.beginPath(),this.ctx.fillStyle=a,this.ctx.arc(e.x,e.y,Math.max(0,s),0,2*Math.PI),this.ctx.fill()}}function n(i={}){const{size:s,maxAge:a,radius:h,intensity:n,interpolate:c,smoothing:o,minForce:l,blend:u,ease:x}=i,d=t.useMemo((()=>new r(i)),[s,a,h,n,c,o,l,u,x]);e.useFrame(((t,e)=>{d.update(e)}));const g=t.useCallback((t=>d.addTouch(t.uv)),[d]);return[d.texture,g]}exports.TrailTexture=({children:t,...e})=>{const i=n(e);return a.createElement(a.Fragment,null,null==t?void 0:t(i))},exports.useTrailTexture=n;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three"),o=require("three-stdlib");function s(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 a=s(r),u=s(n);const c=a.forwardRef((({children:r,domElement:n,onChange:s,onMouseDown:c,onMouseUp:i,onObjectChange:l,object:f,makeDefault:d,camera:h,enabled:m,axis:v,mode:E,translationSnap:g,rotationSnap:b,scaleSnap:p,space:L,size:j,showX:w,showY:O,showZ:T,...y},D)=>{const C=t.useThree((e=>e.controls)),R=t.useThree((e=>e.gl)),S=t.useThree((e=>e.events)),q=t.useThree((e=>e.camera)),x=t.useThree((e=>e.invalidate)),z=t.useThree((e=>e.get)),M=t.useThree((e=>e.set)),U=h||q,k=n||S.connected||R.domElement,P=a.useMemo((()=>new o.TransformControls(U,k)),[U,k]),X=a.useRef(null);a.useLayoutEffect((()=>(f?P.attach(f instanceof u.Object3D?f:f.current):X.current instanceof u.Object3D&&P.attach(X.current),()=>{P.detach()})),[f,r,P]),a.useEffect((()=>{if(C){const e=e=>C.enabled=!e.value;return P.addEventListener("dragging-changed",e),()=>P.removeEventListener("dragging-changed",e)}}),[P,C]);const Y=a.useRef(),Z=a.useRef(),F=a.useRef(),A=a.useRef();return a.useLayoutEffect((()=>{Y.current=s}),[s]),a.useLayoutEffect((()=>{Z.current=c}),[c]),a.useLayoutEffect((()=>{F.current=i}),[i]),a.useLayoutEffect((()=>{A.current=l}),[l]),a.useEffect((()=>{const e=e=>{x(),null==Y.current||Y.current(e)},t=e=>null==Z.current?void 0:Z.current(e),r=e=>null==F.current?void 0:F.current(e),n=e=>null==A.current?void 0:A.current(e);return P.addEventListener("change",e),P.addEventListener("mouseDown",t),P.addEventListener("mouseUp",r),P.addEventListener("objectChange",n),()=>{P.removeEventListener("change",e),P.removeEventListener("mouseDown",t),P.removeEventListener("mouseUp",r),P.removeEventListener("objectChange",n)}}),[x,P]),a.useEffect((()=>{if(d){const e=z().controls;return M({controls:P}),()=>M({controls:e})}}),[d,P]),a.createElement(a.Fragment,null,a.createElement("primitive",{ref:D,object:P,enabled:m,axis:v,mode:E,translationSnap:g,rotationSnap:b,scaleSnap:p,space:L,size:j,showX:w,showY:O,showZ:T}),a.createElement("group",e({ref:X},y),r))}));exports.TransformControls=c;
|