@zephyr3d/scene 0.9.2 → 0.9.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/dist/animation/animationset.js +135 -135
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/ik/ik_chain_builder.js +68 -0
- package/dist/animation/ik/ik_chain_builder.js.map +1 -0
- package/dist/animation/ik/ik_pole_constraint.js +2 -7
- package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +146 -146
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/math.js +16 -0
- package/dist/animation/joint_dynamics/math.js.map +1 -0
- package/dist/animation/spring/spring_system.js +75 -75
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring2/constraints.js.map +1 -1
- package/dist/animation/spring2/controller.js +64 -64
- package/dist/animation/spring2/controller.js.map +1 -1
- package/dist/animation/spring2/math.js.map +1 -1
- package/dist/animation/spring2/spring_system.js +8 -8
- package/dist/animation/spring2/spring_system.js.map +1 -1
- package/dist/app/engine.js +119 -71
- package/dist/app/engine.js.map +1 -1
- package/dist/asset/assetmanager.js +296 -244
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +1 -0
- package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
- package/dist/camera/camera.js +184 -184
- package/dist/camera/camera.js.map +1 -1
- package/dist/index.d.ts +685 -38
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/material/material.js +290 -290
- package/dist/material/material.js.map +1 -1
- package/dist/material/msdf_text.js +180 -0
- package/dist/material/msdf_text.js.map +1 -0
- package/dist/material/msdf_text_sprite.js +64 -0
- package/dist/material/msdf_text_sprite.js.map +1 -0
- package/dist/material/pbrblueprint.js +123 -108
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/shader/helper.js +6 -3
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/sprite_sdf.js +106 -0
- package/dist/material/sprite_sdf.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
- package/dist/posteffect/ssr.js +1 -0
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/render/abuffer_oit.js +1 -0
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/cluster_light.js +3 -4
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +28 -0
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/drawable_mixin.js +1 -0
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +1 -0
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +1 -0
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +1 -0
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/render_queue.js +1 -0
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +93 -93
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +3 -3
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/types.js +22 -22
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/scene/basesprite.js +1 -5
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +29 -17
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +1 -0
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/mesh.js +8 -9
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +96 -0
- package/dist/scene/meshdrawable.js.map +1 -0
- package/dist/scene/msdftext.js +341 -0
- package/dist/scene/msdftext.js.map +1 -0
- package/dist/scene/msdftextsprite.js +349 -0
- package/dist/scene/msdftextsprite.js.map +1 -0
- package/dist/scene/particlesys.js +1 -0
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene.js +1 -0
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +6 -0
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/sdftextsprite.js +322 -0
- package/dist/scene/sdftextsprite.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +1 -0
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +1 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/textsprite.js +120 -0
- package/dist/scene/textsprite.js.map +1 -0
- package/dist/scene/water.js +1 -0
- package/dist/scene/water.js.map +1 -1
- package/dist/shadow/shader.js +1 -0
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shapes/torus.js +90 -59
- package/dist/shapes/torus.js.map +1 -1
- package/dist/src/animation/animation.js +127 -0
- package/dist/src/animation/animation.js.map +1 -0
- package/dist/src/animation/animationset.js +255 -0
- package/dist/src/animation/animationset.js.map +1 -0
- package/dist/src/animation/animationtrack.js +34 -0
- package/dist/src/animation/animationtrack.js.map +1 -0
- package/dist/src/animation/eulerrotationtrack.js +52 -0
- package/dist/src/animation/eulerrotationtrack.js.map +1 -0
- package/dist/src/animation/morphtarget.js +93 -0
- package/dist/src/animation/morphtarget.js.map +1 -0
- package/dist/src/animation/morphtrack.js +70 -0
- package/dist/src/animation/morphtrack.js.map +1 -0
- package/dist/src/animation/proptrack.js +161 -0
- package/dist/src/animation/proptrack.js.map +1 -0
- package/dist/src/animation/rotationtrack.js +51 -0
- package/dist/src/animation/rotationtrack.js.map +1 -0
- package/dist/src/animation/scaletrack.js +50 -0
- package/dist/src/animation/scaletrack.js.map +1 -0
- package/dist/src/animation/skeleton.js +204 -0
- package/dist/src/animation/skeleton.js.map +1 -0
- package/dist/src/animation/translationtrack.js +50 -0
- package/dist/src/animation/translationtrack.js.map +1 -0
- package/dist/src/app/app.js +129 -0
- package/dist/src/app/app.js.map +1 -0
- package/dist/src/app/inputmgr.js +267 -0
- package/dist/src/app/inputmgr.js.map +1 -0
- package/dist/src/asset/assetmanager.js +404 -0
- package/dist/src/asset/assetmanager.js.map +1 -0
- package/dist/src/asset/builtin.js +337 -0
- package/dist/src/asset/builtin.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds.js +470 -0
- package/dist/src/asset/loaders/dds/dds.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
- package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/helpers.js +327 -0
- package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
- package/dist/src/asset/loaders/hdr/hdr.js +180 -0
- package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
- package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
- package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
- package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
- package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
- package/dist/src/asset/loaders/loader.js +45 -0
- package/dist/src/asset/loaders/loader.js.map +1 -0
- package/dist/src/asset/model.js +414 -0
- package/dist/src/asset/model.js.map +1 -0
- package/dist/src/blitter/bilateralblur.js +221 -0
- package/dist/src/blitter/bilateralblur.js.map +1 -0
- package/dist/src/blitter/blitter.js +390 -0
- package/dist/src/blitter/blitter.js.map +1 -0
- package/dist/src/blitter/box.js +118 -0
- package/dist/src/blitter/box.js.map +1 -0
- package/dist/src/blitter/copy.js +22 -0
- package/dist/src/blitter/copy.js.map +1 -0
- package/dist/src/blitter/gaussianblur.js +228 -0
- package/dist/src/blitter/gaussianblur.js.map +1 -0
- package/dist/src/camera/base.js +92 -0
- package/dist/src/camera/base.js.map +1 -0
- package/dist/src/camera/camera.js +1005 -0
- package/dist/src/camera/camera.js.map +1 -0
- package/dist/src/camera/fps.js +238 -0
- package/dist/src/camera/fps.js.map +1 -0
- package/dist/src/camera/orbit.js +245 -0
- package/dist/src/camera/orbit.js.map +1 -0
- package/dist/src/camera/orthocamera.js +167 -0
- package/dist/src/camera/orthocamera.js.map +1 -0
- package/dist/src/camera/perspectivecamera.js +141 -0
- package/dist/src/camera/perspectivecamera.js.map +1 -0
- package/dist/src/index.js +120 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/material/blinn.js +81 -0
- package/dist/src/material/blinn.js.map +1 -0
- package/dist/src/material/grassmaterial.js +113 -0
- package/dist/src/material/grassmaterial.js.map +1 -0
- package/dist/src/material/lambert.js +92 -0
- package/dist/src/material/lambert.js.map +1 -0
- package/dist/src/material/material.js +301 -0
- package/dist/src/material/material.js.map +1 -0
- package/dist/src/material/meshmaterial.js +704 -0
- package/dist/src/material/meshmaterial.js.map +1 -0
- package/dist/src/material/mixins/albedocolor.js +76 -0
- package/dist/src/material/mixins/albedocolor.js.map +1 -0
- package/dist/src/material/mixins/foliage.js +47 -0
- package/dist/src/material/mixins/foliage.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
- package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
- package/dist/src/material/mixins/lit.js +476 -0
- package/dist/src/material/mixins/lit.js.map +1 -0
- package/dist/src/material/mixins/pbr/common.js +918 -0
- package/dist/src/material/mixins/pbr/common.js.map +1 -0
- package/dist/src/material/mixins/texture.js +172 -0
- package/dist/src/material/mixins/texture.js.map +1 -0
- package/dist/src/material/mixins/vertexcolor.js +56 -0
- package/dist/src/material/mixins/vertexcolor.js.map +1 -0
- package/dist/src/material/particle.js +178 -0
- package/dist/src/material/particle.js.map +1 -0
- package/dist/src/material/pbrmr.js +97 -0
- package/dist/src/material/pbrmr.js.map +1 -0
- package/dist/src/material/pbrsg.js +97 -0
- package/dist/src/material/pbrsg.js.map +1 -0
- package/dist/src/material/shader/helper.js +1209 -0
- package/dist/src/material/shader/helper.js.map +1 -0
- package/dist/src/material/terrain-cm.js +606 -0
- package/dist/src/material/terrain-cm.js.map +1 -0
- package/dist/src/material/terrainmaterial.js +375 -0
- package/dist/src/material/terrainmaterial.js.map +1 -0
- package/dist/src/material/unlit.js +41 -0
- package/dist/src/material/unlit.js.map +1 -0
- package/dist/src/material/water.js +417 -0
- package/dist/src/material/water.js.map +1 -0
- package/dist/src/posteffect/bloom.js +361 -0
- package/dist/src/posteffect/bloom.js.map +1 -0
- package/dist/src/posteffect/compositor.js +226 -0
- package/dist/src/posteffect/compositor.js.map +1 -0
- package/dist/src/posteffect/fxaa.js +273 -0
- package/dist/src/posteffect/fxaa.js.map +1 -0
- package/dist/src/posteffect/grayscale.js +69 -0
- package/dist/src/posteffect/grayscale.js.map +1 -0
- package/dist/src/posteffect/motionblur.js +96 -0
- package/dist/src/posteffect/motionblur.js.map +1 -0
- package/dist/src/posteffect/posteffect.js +126 -0
- package/dist/src/posteffect/posteffect.js.map +1 -0
- package/dist/src/posteffect/sao.js +324 -0
- package/dist/src/posteffect/sao.js.map +1 -0
- package/dist/src/posteffect/ssr.js +489 -0
- package/dist/src/posteffect/ssr.js.map +1 -0
- package/dist/src/posteffect/taa.js +172 -0
- package/dist/src/posteffect/taa.js.map +1 -0
- package/dist/src/posteffect/tonemap.js +94 -0
- package/dist/src/posteffect/tonemap.js.map +1 -0
- package/dist/src/render/abuffer_oit.js +361 -0
- package/dist/src/render/abuffer_oit.js.map +1 -0
- package/dist/src/render/clipmap.js +851 -0
- package/dist/src/render/clipmap.js.map +1 -0
- package/dist/src/render/cluster_light.js +333 -0
- package/dist/src/render/cluster_light.js.map +1 -0
- package/dist/src/render/cull_visitor.js +187 -0
- package/dist/src/render/cull_visitor.js.map +1 -0
- package/dist/src/render/depthpass.js +68 -0
- package/dist/src/render/depthpass.js.map +1 -0
- package/dist/src/render/drawable_mixin.js +227 -0
- package/dist/src/render/drawable_mixin.js.map +1 -0
- package/dist/src/render/envlight.js +463 -0
- package/dist/src/render/envlight.js.map +1 -0
- package/dist/src/render/fbm_wavegenerator.js +251 -0
- package/dist/src/render/fbm_wavegenerator.js.map +1 -0
- package/dist/src/render/fft_wavegenerator.js +1006 -0
- package/dist/src/render/fft_wavegenerator.js.map +1 -0
- package/dist/src/render/fullscreenquad.js +38 -0
- package/dist/src/render/fullscreenquad.js.map +1 -0
- package/dist/src/render/gerstner_wavegenerator.js +314 -0
- package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
- package/dist/src/render/globalbindgroup_allocator.js +60 -0
- package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
- package/dist/src/render/hzb.js +273 -0
- package/dist/src/render/hzb.js.map +1 -0
- package/dist/src/render/lightpass.js +172 -0
- package/dist/src/render/lightpass.js.map +1 -0
- package/dist/src/render/objectcolorpass.js +51 -0
- package/dist/src/render/objectcolorpass.js.map +1 -0
- package/dist/src/render/primitive.js +364 -0
- package/dist/src/render/primitive.js.map +1 -0
- package/dist/src/render/render_queue.js +467 -0
- package/dist/src/render/render_queue.js.map +1 -0
- package/dist/src/render/renderbundle_wrapper.js +152 -0
- package/dist/src/render/renderbundle_wrapper.js.map +1 -0
- package/dist/src/render/renderer.js +455 -0
- package/dist/src/render/renderer.js.map +1 -0
- package/dist/src/render/renderpass.js +200 -0
- package/dist/src/render/renderpass.js.map +1 -0
- package/dist/src/render/shadowmap_pass.js +56 -0
- package/dist/src/render/shadowmap_pass.js.map +1 -0
- package/dist/src/render/sky.js +1103 -0
- package/dist/src/render/sky.js.map +1 -0
- package/dist/src/render/weightedblended_oit.js +168 -0
- package/dist/src/render/weightedblended_oit.js.map +1 -0
- package/dist/src/scene/batchgroup.js +162 -0
- package/dist/src/scene/batchgroup.js.map +1 -0
- package/dist/src/scene/environment.js +209 -0
- package/dist/src/scene/environment.js.map +1 -0
- package/dist/src/scene/graph_node.js +72 -0
- package/dist/src/scene/graph_node.js.map +1 -0
- package/dist/src/scene/light.js +416 -0
- package/dist/src/scene/light.js.map +1 -0
- package/dist/src/scene/mesh.js +341 -0
- package/dist/src/scene/mesh.js.map +1 -0
- package/dist/src/scene/octree.js +649 -0
- package/dist/src/scene/octree.js.map +1 -0
- package/dist/src/scene/particlesys.js +738 -0
- package/dist/src/scene/particlesys.js.map +1 -0
- package/dist/src/scene/raycast_visitor.js +103 -0
- package/dist/src/scene/raycast_visitor.js.map +1 -0
- package/dist/src/scene/scene.js +284 -0
- package/dist/src/scene/scene.js.map +1 -0
- package/dist/src/scene/scene_node.js +732 -0
- package/dist/src/scene/scene_node.js.map +1 -0
- package/dist/src/scene/terrain/grass.js +278 -0
- package/dist/src/scene/terrain/grass.js.map +1 -0
- package/dist/src/scene/terrain/heightfield.js +475 -0
- package/dist/src/scene/terrain/heightfield.js.map +1 -0
- package/dist/src/scene/terrain/patch.js +530 -0
- package/dist/src/scene/terrain/patch.js.map +1 -0
- package/dist/src/scene/terrain/quadtree.js +461 -0
- package/dist/src/scene/terrain/quadtree.js.map +1 -0
- package/dist/src/scene/terrain/terrain.js +246 -0
- package/dist/src/scene/terrain/terrain.js.map +1 -0
- package/dist/src/scene/terrain-cm/grass.js +594 -0
- package/dist/src/scene/terrain-cm/grass.js.map +1 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
- package/dist/src/scene/water.js +374 -0
- package/dist/src/scene/water.js.map +1 -0
- package/dist/src/shaders/atmosphere.js +957 -0
- package/dist/src/shaders/atmosphere.js.map +1 -0
- package/dist/src/shaders/fog.js +112 -0
- package/dist/src/shaders/fog.js.map +1 -0
- package/dist/src/shaders/misc.js +266 -0
- package/dist/src/shaders/misc.js.map +1 -0
- package/dist/src/shaders/noise.js +222 -0
- package/dist/src/shaders/noise.js.map +1 -0
- package/dist/src/shaders/pbr.js +51 -0
- package/dist/src/shaders/pbr.js.map +1 -0
- package/dist/src/shaders/shadow.js +636 -0
- package/dist/src/shaders/shadow.js.map +1 -0
- package/dist/src/shaders/ssr.js +490 -0
- package/dist/src/shaders/ssr.js.map +1 -0
- package/dist/src/shaders/temporal.js +215 -0
- package/dist/src/shaders/temporal.js.map +1 -0
- package/dist/src/shaders/water.js +756 -0
- package/dist/src/shaders/water.js.map +1 -0
- package/dist/src/shadow/esm.js +237 -0
- package/dist/src/shadow/esm.js.map +1 -0
- package/dist/src/shadow/pcf_opt.js +181 -0
- package/dist/src/shadow/pcf_opt.js.map +1 -0
- package/dist/src/shadow/pcf_pd.js +189 -0
- package/dist/src/shadow/pcf_pd.js.map +1 -0
- package/dist/src/shadow/shader.js +37 -0
- package/dist/src/shadow/shader.js.map +1 -0
- package/dist/src/shadow/shadow_impl.js +15 -0
- package/dist/src/shadow/shadow_impl.js.map +1 -0
- package/dist/src/shadow/shadowmapper.js +790 -0
- package/dist/src/shadow/shadowmapper.js.map +1 -0
- package/dist/src/shadow/ssm.js +159 -0
- package/dist/src/shadow/ssm.js.map +1 -0
- package/dist/src/shadow/vsm.js +297 -0
- package/dist/src/shadow/vsm.js.map +1 -0
- package/dist/src/shapes/box.js +386 -0
- package/dist/src/shapes/box.js.map +1 -0
- package/dist/src/shapes/cylinder.js +125 -0
- package/dist/src/shapes/cylinder.js.map +1 -0
- package/dist/src/shapes/plane.js +88 -0
- package/dist/src/shapes/plane.js.map +1 -0
- package/dist/src/shapes/shape.js +87 -0
- package/dist/src/shapes/shape.js.map +1 -0
- package/dist/src/shapes/sphere.js +114 -0
- package/dist/src/shapes/sphere.js.map +1 -0
- package/dist/src/shapes/tetrahedron.js +188 -0
- package/dist/src/shapes/tetrahedron.js.map +1 -0
- package/dist/src/shapes/torus.js +111 -0
- package/dist/src/shapes/torus.js.map +1 -0
- package/dist/src/utility/aabbtree.js +400 -0
- package/dist/src/utility/aabbtree.js.map +1 -0
- package/dist/src/utility/bounding_volume.js +29 -0
- package/dist/src/utility/bounding_volume.js.map +1 -0
- package/dist/src/utility/debug.js +28 -0
- package/dist/src/utility/debug.js.map +1 -0
- package/dist/src/utility/draco/decoder.js +116 -0
- package/dist/src/utility/draco/decoder.js.map +1 -0
- package/dist/src/utility/misc.js +105 -0
- package/dist/src/utility/misc.js.map +1 -0
- package/dist/src/utility/panorama.js +163 -0
- package/dist/src/utility/panorama.js.map +1 -0
- package/dist/src/utility/pmrem.js +354 -0
- package/dist/src/utility/pmrem.js.map +1 -0
- package/dist/src/utility/rendermipmap.js +115 -0
- package/dist/src/utility/rendermipmap.js.map +1 -0
- package/dist/src/utility/serialization/json.js +402 -0
- package/dist/src/utility/serialization/json.js.map +1 -0
- package/dist/src/utility/serialization/manager.js +623 -0
- package/dist/src/utility/serialization/manager.js.map +1 -0
- package/dist/src/utility/serialization/scene/animation.js +248 -0
- package/dist/src/utility/serialization/scene/animation.js.map +1 -0
- package/dist/src/utility/serialization/scene/batch.js +59 -0
- package/dist/src/utility/serialization/scene/batch.js.map +1 -0
- package/dist/src/utility/serialization/scene/camera.js +790 -0
- package/dist/src/utility/serialization/scene/camera.js.map +1 -0
- package/dist/src/utility/serialization/scene/common.js +222 -0
- package/dist/src/utility/serialization/scene/common.js.map +1 -0
- package/dist/src/utility/serialization/scene/light.js +575 -0
- package/dist/src/utility/serialization/scene/light.js.map +1 -0
- package/dist/src/utility/serialization/scene/material.js +1111 -0
- package/dist/src/utility/serialization/scene/material.js.map +1 -0
- package/dist/src/utility/serialization/scene/mesh.js +148 -0
- package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
- package/dist/src/utility/serialization/scene/misc.js +39 -0
- package/dist/src/utility/serialization/scene/misc.js.map +1 -0
- package/dist/src/utility/serialization/scene/node.js +451 -0
- package/dist/src/utility/serialization/scene/node.js.map +1 -0
- package/dist/src/utility/serialization/scene/particle.js +425 -0
- package/dist/src/utility/serialization/scene/particle.js.map +1 -0
- package/dist/src/utility/serialization/scene/primitive.js +692 -0
- package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
- package/dist/src/utility/serialization/scene/scene.js +704 -0
- package/dist/src/utility/serialization/scene/scene.js.map +1 -0
- package/dist/src/utility/serialization/scene/terrain.js +488 -0
- package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
- package/dist/src/utility/serialization/scene/water.js +465 -0
- package/dist/src/utility/serialization/scene/water.js.map +1 -0
- package/dist/src/utility/shprojector.js +297 -0
- package/dist/src/utility/shprojector.js.map +1 -0
- package/dist/src/utility/textures/ggxlut.js +213 -0
- package/dist/src/utility/textures/ggxlut.js.map +1 -0
- package/dist/src/utility/textures/gradientnoise.js +62 -0
- package/dist/src/utility/textures/gradientnoise.js.map +1 -0
- package/dist/src/utility/textures/randomnoise.js +41 -0
- package/dist/src/utility/textures/randomnoise.js.map +1 -0
- package/dist/src/values.js +162 -0
- package/dist/src/values.js.map +1 -0
- package/dist/text/font/font_asset.js +884 -0
- package/dist/text/font/font_asset.js.map +1 -0
- package/dist/text/font/sfnt_reader.js +43 -0
- package/dist/text/font/sfnt_reader.js.map +1 -0
- package/dist/text/msdf/generator.js +417 -0
- package/dist/text/msdf/generator.js.map +1 -0
- package/dist/text/msdf/shape.js +143 -0
- package/dist/text/msdf/shape.js.map +1 -0
- package/dist/text/runtime/msdf_glyph_atlas.js +146 -0
- package/dist/text/runtime/msdf_glyph_atlas.js.map +1 -0
- package/dist/text/runtime/msdf_text_atlas_manager.js +47 -0
- package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -0
- package/dist/text/runtime/text_layout.js +96 -0
- package/dist/text/runtime/text_layout.js.map +1 -0
- package/dist/utility/blueprint/material/common.js +7 -0
- package/dist/utility/blueprint/material/common.js.map +1 -0
- package/dist/utility/blueprint/material/inputs.js +1275 -1091
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +505 -490
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/blueprint/material/pbr.js +32 -0
- package/dist/utility/blueprint/material/pbr.js.map +1 -1
- package/dist/utility/serialization/blueprint/constants.js +255 -0
- package/dist/utility/serialization/blueprint/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/constants.js +203 -0
- package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/texture.js +165 -0
- package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
- package/dist/utility/serialization/manager.js +55 -11
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +2 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +2 -0
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +2 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +2 -0
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +1 -0
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +2 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +2 -0
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +2 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +1 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +2 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +2 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +516 -0
- package/dist/utility/serialization/scene/text.js.map +1 -0
- package/dist/utility/serialization/scene/water.js +2 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js +4 -4
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/values.js +1 -5
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
- package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
- package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone.js +0 -240
- package/dist/animation/spring/spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone_collider.js +0 -198
- package/dist/animation/spring/spring_bone_collider.js.map +0 -1
- package/dist/animation/spring/spring_bone_constraint.js +0 -170
- package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
- package/dist/animation/spring/spring_bone_system.js +0 -328
- package/dist/animation/spring/spring_bone_system.js.map +0 -1
- package/dist/render/sky_motion_vector.js +0 -85
- package/dist/render/sky_motion_vector.js.map +0 -1
package/dist/shapes/torus.js
CHANGED
|
@@ -85,68 +85,100 @@ Triangle(n, m) = (VIndex(n, m), VIndex(n+1, m), VIndex(n+1, m+1), VIndex(n, m),
|
|
|
85
85
|
return isFinite(tMin) ? tMin : null;
|
|
86
86
|
}
|
|
87
87
|
/** @internal Solve quartic a*t^4+b*t^3+c*t^2+d*t+e=0, returns real roots */ static _solveQuartic(a, b, c, d, e) {
|
|
88
|
+
return TorusShape._solvePolynomialReal([
|
|
89
|
+
a,
|
|
90
|
+
b,
|
|
91
|
+
c,
|
|
92
|
+
d,
|
|
93
|
+
e
|
|
94
|
+
]);
|
|
95
|
+
}
|
|
96
|
+
/** @internal Solve a low-degree polynomial and return all real roots */ static _solvePolynomialReal(coeffs) {
|
|
88
97
|
const eps = 1e-8;
|
|
89
|
-
|
|
90
|
-
|
|
98
|
+
while(coeffs.length > 0 && Math.abs(coeffs[0]) < eps){
|
|
99
|
+
coeffs = coeffs.slice(1);
|
|
91
100
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
101
|
+
const degree = coeffs.length - 1;
|
|
102
|
+
if (degree <= 0) {
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
if (degree === 1) {
|
|
106
|
+
return [
|
|
107
|
+
-coeffs[1] / coeffs[0]
|
|
108
|
+
];
|
|
109
|
+
}
|
|
110
|
+
if (degree === 2) {
|
|
111
|
+
return TorusShape._solveQuadratic(coeffs[0], coeffs[1], coeffs[2]);
|
|
112
|
+
}
|
|
113
|
+
if (degree === 3) {
|
|
114
|
+
return TorusShape._solveCubic(coeffs[0], coeffs[1], coeffs[2], coeffs[3]);
|
|
115
|
+
}
|
|
116
|
+
const leading = coeffs[0];
|
|
117
|
+
let bound = 1;
|
|
118
|
+
for(let i = 1; i < coeffs.length; i++){
|
|
119
|
+
bound = Math.max(bound, 1 + Math.abs(coeffs[i] / leading));
|
|
120
|
+
}
|
|
121
|
+
const derivative = coeffs.slice(0, -1).map((coef, index)=>coef * (degree - index));
|
|
122
|
+
const criticalPoints = TorusShape._solvePolynomialReal(derivative).filter((value)=>value > -bound - eps && value < bound + eps).sort((a, b)=>a - b);
|
|
123
|
+
const roots = [];
|
|
124
|
+
for (const value of criticalPoints){
|
|
125
|
+
if (Math.abs(TorusShape._evaluatePolynomial(coeffs, value)) < 1e-7) {
|
|
126
|
+
TorusShape._pushUniqueRoot(roots, value);
|
|
107
127
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
128
|
+
}
|
|
129
|
+
const points = [
|
|
130
|
+
-bound,
|
|
131
|
+
...criticalPoints,
|
|
132
|
+
bound
|
|
133
|
+
];
|
|
134
|
+
for(let i = 0; i < points.length - 1; i++){
|
|
135
|
+
const left = points[i];
|
|
136
|
+
const right = points[i + 1];
|
|
137
|
+
if (right - left < eps) {
|
|
138
|
+
continue;
|
|
119
139
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
// Pick the largest real root
|
|
125
|
-
let m = -Infinity;
|
|
126
|
-
for (const cr of cubicRoots){
|
|
127
|
-
if (cr > m) {
|
|
128
|
-
m = cr;
|
|
129
|
-
}
|
|
140
|
+
const fLeft = TorusShape._evaluatePolynomial(coeffs, left);
|
|
141
|
+
const fRight = TorusShape._evaluatePolynomial(coeffs, right);
|
|
142
|
+
if (Math.abs(fLeft) < 1e-7) {
|
|
143
|
+
TorusShape._pushUniqueRoot(roots, left);
|
|
130
144
|
}
|
|
131
|
-
if (
|
|
132
|
-
|
|
145
|
+
if (Math.abs(fRight) < 1e-7) {
|
|
146
|
+
TorusShape._pushUniqueRoot(roots, right);
|
|
133
147
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
const disc2 = -(p + 2 * m) - q / (sqrtM + eps);
|
|
137
|
-
roots = [];
|
|
138
|
-
if (disc1 >= 0) {
|
|
139
|
-
const s = Math.sqrt(disc1);
|
|
140
|
-
roots.push(sqrtM + s, sqrtM - s);
|
|
148
|
+
if (fLeft * fRight < 0) {
|
|
149
|
+
TorusShape._pushUniqueRoot(roots, TorusShape._bisectPolynomialRoot(coeffs, left, right));
|
|
141
150
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
151
|
+
}
|
|
152
|
+
return roots.sort((a, b)=>a - b);
|
|
153
|
+
}
|
|
154
|
+
/** @internal Evaluate a polynomial with coefficients in descending order */ static _evaluatePolynomial(coeffs, t) {
|
|
155
|
+
let result = 0;
|
|
156
|
+
for(let i = 0; i < coeffs.length; i++){
|
|
157
|
+
result = result * t + coeffs[i];
|
|
158
|
+
}
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
/** @internal Bisect a real root in an interval with opposite signs */ static _bisectPolynomialRoot(coeffs, left, right) {
|
|
162
|
+
let fLeft = TorusShape._evaluatePolynomial(coeffs, left);
|
|
163
|
+
for(let i = 0; i < 64; i++){
|
|
164
|
+
const mid = (left + right) * 0.5;
|
|
165
|
+
const fMid = TorusShape._evaluatePolynomial(coeffs, mid);
|
|
166
|
+
if (Math.abs(fMid) < 1e-12) {
|
|
167
|
+
return mid;
|
|
145
168
|
}
|
|
169
|
+
if (fLeft * fMid <= 0) {
|
|
170
|
+
right = mid;
|
|
171
|
+
} else {
|
|
172
|
+
left = mid;
|
|
173
|
+
fLeft = fMid;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return (left + right) * 0.5;
|
|
177
|
+
}
|
|
178
|
+
/** @internal Add a root if it is not already represented in the list */ static _pushUniqueRoot(roots, value) {
|
|
179
|
+
if (!roots.some((root)=>Math.abs(root - value) < 1e-7)) {
|
|
180
|
+
roots.push(value);
|
|
146
181
|
}
|
|
147
|
-
// Un-depress: t = u - B/4
|
|
148
|
-
const shift = B / 4;
|
|
149
|
-
return roots.map((u)=>u - shift);
|
|
150
182
|
}
|
|
151
183
|
/** @internal Solve cubic a*t^3+b*t^2+c*t+d=0, returns real roots (Cardano) */ static _solveCubic(a, b, c, d) {
|
|
152
184
|
const eps = 1e-8;
|
|
@@ -169,13 +201,12 @@ Triangle(n, m) = (VIndex(n, m), VIndex(n+1, m), VIndex(n+1, m+1), VIndex(n, m),
|
|
|
169
201
|
u + v + shift
|
|
170
202
|
];
|
|
171
203
|
} else if (disc < -1e-8) {
|
|
172
|
-
const
|
|
173
|
-
const
|
|
174
|
-
const rCbrt = Math.cbrt(r);
|
|
204
|
+
const theta = Math.acos(Math.max(-1, Math.min(1, -q / 2 / Math.sqrt(-p * p * p / 27))));
|
|
205
|
+
const rho = 2 * Math.sqrt(-p / 3);
|
|
175
206
|
return [
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
207
|
+
rho * Math.cos(theta / 3) + shift,
|
|
208
|
+
rho * Math.cos((theta + 2 * Math.PI) / 3) + shift,
|
|
209
|
+
rho * Math.cos((theta + 4 * Math.PI) / 3) + shift
|
|
179
210
|
];
|
|
180
211
|
} else {
|
|
181
212
|
const u = Math.cbrt(-q / 2);
|
package/dist/shapes/torus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"torus.js","sources":["../../src/shapes/torus.ts"],"sourcesContent":["import type { AABB, Clonable, Ray } from '@zephyr3d/base';\r\nimport type { ShapeCreationOptions } from './shape';\r\nimport { Shape } from './shape';\r\n\r\n/**\r\n * Creation options for torus shape\r\n * @public\r\n */\r\nexport interface TorusCreationOptions extends ShapeCreationOptions {\r\n /** Slice count, default is 40 **/\r\n numSlices?: number;\r\n /** Segment count, default is 16 */\r\n numSegments?: number;\r\n /** Outer radius, default is 10 */\r\n outerRadius?: number;\r\n /** Inner radius, default is 3 */\r\n innerRadius?: number;\r\n /** Radial detail, default is 20*/\r\n radialDetail?: number;\r\n}\r\n\r\n/*\r\nN slices\r\nM sides\r\nOR outter radius\r\nIR inner radius\r\nUp (0, 1, 0)\r\n\r\nC(n) = (cos((n/N) * TwoPI) * OR, 0, sin((n/N) * twoPI * OR);\r\nTheta = m/M * TwoPI\r\nV(n, m) = C(n) * (1 + IR * cos(Theta) / OR) + Up * IR * sin(Theta)\r\nN(n, m) = normalize(V(n, m) - C(n))\r\nTC(n, m) = (m / M, n / N)\r\n\r\nVIndex(n, m) = n * (M + 1) + m\r\nTriangle(n, m) = (VIndex(n, m), VIndex(n+1, m), VIndex(n+1, m+1), VIndex(n, m), VIndex(n+1, m+1), VIndex(n, m+1))*/\r\n\r\n/**\r\n *\r\n * Torus shape\r\n *\r\n * @public\r\n */\r\nexport class TorusShape extends Shape<TorusCreationOptions> implements Clonable<TorusShape> {\r\n static _defaultOptions = {\r\n ...Shape._defaultOptions,\r\n numSlices: 40,\r\n numSegments: 16,\r\n outerRadius: 1,\r\n innerRadius: 0.3,\r\n radialDetail: 20\r\n };\r\n /**\r\n * Creates an instance of torus shape\r\n * @param options - The creation options\r\n */\r\n constructor(options?: TorusCreationOptions) {\r\n super(options);\r\n }\r\n clone() {\r\n return new TorusShape(this._options) as this;\r\n }\r\n /** type of the shape */\r\n get type() {\r\n return 'Torus' as const;\r\n }\r\n /**\r\n * Analytically intersects a ray with a torus lying in the XZ plane.\r\n * The torus has major radius R (outerRadius) and minor radius r (innerRadius).\r\n *\r\n * Equation of torus: (x²+y²+z²+R²-r²)² = 4R²(x²+z²)\r\n * Substituting ray P(t) = O + t*D leads to a quartic in t which is solved\r\n * with Ferrari's method.\r\n */\r\n raycast(ray: Ray) {\r\n const R = this._options.outerRadius ?? 1; // major radius\r\n const r = this._options.innerRadius ?? 0.3; // minor radius\r\n\r\n const ox = ray.origin.x,\r\n oy = ray.origin.y,\r\n oz = ray.origin.z;\r\n const dx = ray.direction.x,\r\n dy = ray.direction.y,\r\n dz = ray.direction.z;\r\n\r\n // Let f = |O|^2 + R^2 - r^2\r\n // g = dot(O, D)\r\n // h = |D|^2 (normally 1 for a normalized direction, kept general here)\r\n // Quartic: (h*t^2 + 2g*t + f)^2 = 4R^2*((dx*t+ox)^2 + (dz*t+oz)^2)\r\n // Expand into c4*t^4 + c3*t^3 + c2*t^2 + c1*t + c0 = 0\r\n\r\n const OO = ox * ox + oy * oy + oz * oz;\r\n const OD = ox * dx + oy * dy + oz * dz;\r\n const DD = dx * dx + dy * dy + dz * dz;\r\n\r\n const f = OO + R * R - r * r;\r\n const g = OD;\r\n const h = DD;\r\n\r\n // XZ components only (for the 4R²(x²+z²) term)\r\n const oxz2 = ox * ox + oz * oz; // ox² + oz²\r\n const odxz = ox * dx + oz * dz; // ox*dx + oz*dz\r\n const dxz2 = dx * dx + dz * dz; // dx² + dz²\r\n\r\n // Quartic coefficients (from expanding both sides)\r\n const R2 = 4 * R * R;\r\n const c4 = h * h;\r\n const c3 = 4 * h * g;\r\n const c2 = 2 * h * f + 4 * g * g - R2 * dxz2;\r\n const c1 = 4 * g * f - 2 * R2 * odxz;\r\n const c0 = f * f - R2 * oxz2;\r\n\r\n // Solve quartic c4*t^4 + c3*t^3 + c2*t^2 + c1*t + c0 = 0\r\n const roots = TorusShape._solveQuartic(c4, c3, c2, c1, c0);\r\n let tMin = Infinity;\r\n for (const t of roots) {\r\n if (t >= 0 && t < tMin) {\r\n tMin = t;\r\n }\r\n }\r\n return isFinite(tMin) ? tMin : null;\r\n }\r\n\r\n /** @internal Solve quartic a*t^4+b*t^3+c*t^2+d*t+e=0, returns real roots */\r\n private static _solveQuartic(a: number, b: number, c: number, d: number, e: number): number[] {\r\n const eps = 1e-8;\r\n if (Math.abs(a) < eps) {\r\n return TorusShape._solveCubic(b, c, d, e);\r\n }\r\n // Depress quartic: divide by a and substitute t = u - b/(4a)\r\n const inv_a = 1 / a;\r\n const B = b * inv_a;\r\n const C = c * inv_a;\r\n const D = d * inv_a;\r\n const E = e * inv_a;\r\n const p = C - (3 / 8) * B * B;\r\n const q = (B * B * B) / 8 - (B * C) / 2 + D;\r\n const r2 = -(3 / 256) * B * B * B * B + (B * B * C) / 16 - (B * D) / 4 + E;\r\n\r\n let roots: number[];\r\n if (Math.abs(q) < eps) {\r\n // Biquadratic: u^4 + p*u^2 + r2 = 0\r\n const disc = p * p - 4 * r2;\r\n if (disc < 0) {\r\n return [];\r\n }\r\n const sqrtDisc = Math.sqrt(disc);\r\n roots = [];\r\n for (const sign of [-1, 1]) {\r\n const w2 = (-p + sign * sqrtDisc) / 2;\r\n if (w2 >= 0) {\r\n const w = Math.sqrt(w2);\r\n roots.push(w, -w);\r\n }\r\n }\r\n } else {\r\n // Ferrari: find a real root of the resolvent cubic\r\n // 8m^3 + 8p*m^2 + (2p^2-8r2)*m - q^2 = 0\r\n const cubicRoots = TorusShape._solveCubic(8, 8 * p, 2 * p * p - 8 * r2, -q * q);\r\n // Pick the largest real root\r\n let m = -Infinity;\r\n for (const cr of cubicRoots) {\r\n if (cr > m) {\r\n m = cr;\r\n }\r\n }\r\n if (!isFinite(m)) {\r\n return [];\r\n }\r\n\r\n const sqrtM = m >= 0 ? Math.sqrt(m) : 0;\r\n const disc1 = -(p + 2 * m) + q / (sqrtM + eps);\r\n const disc2 = -(p + 2 * m) - q / (sqrtM + eps);\r\n roots = [];\r\n if (disc1 >= 0) {\r\n const s = Math.sqrt(disc1);\r\n roots.push(sqrtM + s, sqrtM - s);\r\n }\r\n if (disc2 >= 0) {\r\n const s = Math.sqrt(disc2);\r\n roots.push(-sqrtM + s, -sqrtM - s);\r\n }\r\n }\r\n // Un-depress: t = u - B/4\r\n const shift = B / 4;\r\n return roots.map((u) => u - shift);\r\n }\r\n\r\n /** @internal Solve cubic a*t^3+b*t^2+c*t+d=0, returns real roots (Cardano) */\r\n private static _solveCubic(a: number, b: number, c: number, d: number): number[] {\r\n const eps = 1e-8;\r\n if (Math.abs(a) < eps) {\r\n return TorusShape._solveQuadratic(b, c, d);\r\n }\r\n const inv_a = 1 / a;\r\n const B = b * inv_a;\r\n const C = c * inv_a;\r\n const D = d * inv_a;\r\n const p = C - (B * B) / 3;\r\n const q = (2 * B * B * B) / 27 - (B * C) / 3 + D;\r\n const disc = (q * q) / 4 + (p * p * p) / 27;\r\n const shift = -B / 3;\r\n if (disc > eps) {\r\n const sqrtDisc = Math.sqrt(disc);\r\n const u = Math.cbrt(-q / 2 + sqrtDisc);\r\n const v = Math.cbrt(-q / 2 - sqrtDisc);\r\n return [u + v + shift];\r\n } else if (disc < -eps) {\r\n const r = Math.sqrt((-p * p * p) / 27);\r\n const theta = Math.acos(Math.max(-1, Math.min(1, -q / (2 * r))));\r\n const rCbrt = Math.cbrt(r);\r\n return [\r\n 2 * rCbrt * Math.cos(theta / 3) + shift,\r\n 2 * rCbrt * Math.cos((theta + 2 * Math.PI) / 3) + shift,\r\n 2 * rCbrt * Math.cos((theta + 4 * Math.PI) / 3) + shift\r\n ];\r\n } else {\r\n const u = Math.cbrt(-q / 2);\r\n return [2 * u + shift, -u + shift];\r\n }\r\n }\r\n\r\n /** @internal Solve quadratic a*t^2+b*t+c=0 */\r\n private static _solveQuadratic(a: number, b: number, c: number): number[] {\r\n const eps = 1e-8;\r\n if (Math.abs(a) < eps) {\r\n if (Math.abs(b) < eps) {\r\n return [];\r\n }\r\n return [-c / b];\r\n }\r\n const disc = b * b - 4 * a * c;\r\n if (disc < 0) {\r\n return [];\r\n }\r\n if (disc < eps) {\r\n return [-b / (2 * a)];\r\n }\r\n const s = Math.sqrt(disc);\r\n return [(-b - s) / (2 * a), (-b + s) / (2 * a)];\r\n }\r\n /**\r\n * Generates the data for the torus shape\r\n * @param vertices - vertex positions\r\n * @param normals - vertex normals\r\n * @param uvs - vertex uvs\r\n * @param indices - vertex indices\r\n */\r\n static generateData(\r\n opt: TorusCreationOptions,\r\n vertices: number[],\r\n normals: number[],\r\n tangents: number[],\r\n uvs: number[],\r\n indices: number[],\r\n bbox?: AABB,\r\n indexOffset?: number,\r\n vertexCallback?: (index: number, x: number, y: number, z: number) => void\r\n ) {\r\n const options = Object.assign({}, this._defaultOptions, opt ?? {});\r\n indexOffset = indexOffset ?? 0;\r\n const start = vertices.length;\r\n const N = options.numSlices;\r\n const M = options.numSegments;\r\n const OR = options.outerRadius;\r\n const IR = options.innerRadius;\r\n for (let n = 0; n <= N; n++) {\r\n const alpha = ((n % N) / N) * Math.PI * 2;\r\n const cosA = Math.cos(alpha);\r\n const sinA = Math.sin(alpha);\r\n const cx = OR * cosA;\r\n const cy = 0;\r\n const cz = OR * sinA;\r\n for (let m = 0; m <= M; m++) {\r\n const theta = ((m % M) / M) * Math.PI * 2;\r\n const cosT = Math.cos(theta);\r\n const sinT = Math.sin(theta);\r\n const t = 1 + (IR * cosT) / OR;\r\n const s = IR * sinT;\r\n const x = cx * t;\r\n const y = cy * t + s;\r\n const z = cz * t;\r\n vertices.push(x, y, z);\r\n if (normals) {\r\n const nx = x - cx;\r\n const ny = y - cy;\r\n const nz = z - cz;\r\n const mag = Math.hypot(nx, ny, nz);\r\n normals.push(nx / mag, ny / mag, nz / mag);\r\n }\r\n if (uvs) {\r\n uvs.push(m / M, n / N);\r\n }\r\n if (tangents) {\r\n const tx = -sinT * cosA;\r\n const ty = cosT;\r\n const tz = -sinT * sinA;\r\n tangents.push(tx, ty, tz, 1.0);\r\n }\r\n }\r\n }\r\n for (let n = 0; n < N; n++) {\r\n for (let m = 0; m < M; m++) {\r\n indices.push(n * (M + 1) + m + indexOffset);\r\n indices.push((n + 1) * (M + 1) + m + 1 + indexOffset);\r\n indices.push((n + 1) * (M + 1) + m + indexOffset);\r\n indices.push(n * (M + 1) + m + indexOffset);\r\n indices.push(n * (M + 1) + m + 1 + indexOffset);\r\n indices.push((n + 1) * (M + 1) + m + 1 + indexOffset);\r\n }\r\n }\r\n Shape._transform(options.transform, vertices, normals, start);\r\n if (bbox || vertexCallback) {\r\n for (let i = start; i < vertices.length - 2; i += 3) {\r\n if (bbox) {\r\n bbox.minPoint.x = Math.min(bbox.minPoint.x, vertices[i]);\r\n bbox.minPoint.y = Math.min(bbox.minPoint.y, vertices[i + 1]);\r\n bbox.minPoint.z = Math.min(bbox.minPoint.z, vertices[i + 2]);\r\n bbox.maxPoint.x = Math.max(bbox.maxPoint.x, vertices[i]);\r\n bbox.maxPoint.y = Math.max(bbox.maxPoint.y, vertices[i + 1]);\r\n bbox.maxPoint.z = Math.max(bbox.maxPoint.z, vertices[i + 2]);\r\n }\r\n vertexCallback?.((i - start) / 3, vertices[i], vertices[i + 1], vertices[i + 2]);\r\n }\r\n }\r\n return 'triangle-list' as const;\r\n }\r\n}\r\n"],"names":["TorusShape","Shape","_defaultOptions","numSlices","numSegments","outerRadius","innerRadius","radialDetail","options","clone","_options","type","raycast","ray","R","r","ox","origin","x","oy","y","oz","z","dx","direction","dy","dz","OO","OD","DD","f","g","h","oxz2","odxz","dxz2","R2","c4","c3","c2","c1","c0","roots","_solveQuartic","tMin","Infinity","t","isFinite","a","b","c","d","e","eps","Math","abs","_solveCubic","inv_a","B","C","D","E","p","q","r2","disc","sqrtDisc","sqrt","sign","w2","w","push","cubicRoots","m","cr","sqrtM","disc1","disc2","s","shift","map","u","_solveQuadratic","cbrt","v","theta","acos","max","min","rCbrt","cos","PI","generateData","opt","vertices","normals","tangents","uvs","indices","bbox","indexOffset","vertexCallback","Object","assign","start","length","N","M","OR","IR","n","alpha","cosA","sinA","sin","cx","cy","cz","cosT","sinT","nx","ny","nz","mag","hypot","tx","ty","tz","_transform","transform","i","minPoint","maxPoint"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"torus.js","sources":["../../src/shapes/torus.ts"],"sourcesContent":["import type { AABB, Clonable, Ray } from '@zephyr3d/base';\r\nimport type { ShapeCreationOptions } from './shape';\r\nimport { Shape } from './shape';\r\n\r\n/**\r\n * Creation options for torus shape\r\n * @public\r\n */\r\nexport interface TorusCreationOptions extends ShapeCreationOptions {\r\n /** Slice count, default is 40 **/\r\n numSlices?: number;\r\n /** Segment count, default is 16 */\r\n numSegments?: number;\r\n /** Outer radius, default is 10 */\r\n outerRadius?: number;\r\n /** Inner radius, default is 3 */\r\n innerRadius?: number;\r\n /** Radial detail, default is 20*/\r\n radialDetail?: number;\r\n}\r\n\r\n/*\r\nN slices\r\nM sides\r\nOR outter radius\r\nIR inner radius\r\nUp (0, 1, 0)\r\n\r\nC(n) = (cos((n/N) * TwoPI) * OR, 0, sin((n/N) * twoPI * OR);\r\nTheta = m/M * TwoPI\r\nV(n, m) = C(n) * (1 + IR * cos(Theta) / OR) + Up * IR * sin(Theta)\r\nN(n, m) = normalize(V(n, m) - C(n))\r\nTC(n, m) = (m / M, n / N)\r\n\r\nVIndex(n, m) = n * (M + 1) + m\r\nTriangle(n, m) = (VIndex(n, m), VIndex(n+1, m), VIndex(n+1, m+1), VIndex(n, m), VIndex(n+1, m+1), VIndex(n, m+1))*/\r\n\r\n/**\r\n *\r\n * Torus shape\r\n *\r\n * @public\r\n */\r\nexport class TorusShape extends Shape<TorusCreationOptions> implements Clonable<TorusShape> {\r\n static _defaultOptions = {\r\n ...Shape._defaultOptions,\r\n numSlices: 40,\r\n numSegments: 16,\r\n outerRadius: 1,\r\n innerRadius: 0.3,\r\n radialDetail: 20\r\n };\r\n /**\r\n * Creates an instance of torus shape\r\n * @param options - The creation options\r\n */\r\n constructor(options?: TorusCreationOptions) {\r\n super(options);\r\n }\r\n clone() {\r\n return new TorusShape(this._options) as this;\r\n }\r\n /** type of the shape */\r\n get type() {\r\n return 'Torus' as const;\r\n }\r\n /**\r\n * Analytically intersects a ray with a torus lying in the XZ plane.\r\n * The torus has major radius R (outerRadius) and minor radius r (innerRadius).\r\n *\r\n * Equation of torus: (x²+y²+z²+R²-r²)² = 4R²(x²+z²)\r\n * Substituting ray P(t) = O + t*D leads to a quartic in t which is solved\r\n * with Ferrari's method.\r\n */\r\n raycast(ray: Ray) {\r\n const R = this._options.outerRadius ?? 1; // major radius\r\n const r = this._options.innerRadius ?? 0.3; // minor radius\r\n\r\n const ox = ray.origin.x,\r\n oy = ray.origin.y,\r\n oz = ray.origin.z;\r\n const dx = ray.direction.x,\r\n dy = ray.direction.y,\r\n dz = ray.direction.z;\r\n\r\n // Let f = |O|^2 + R^2 - r^2\r\n // g = dot(O, D)\r\n // h = |D|^2 (normally 1 for a normalized direction, kept general here)\r\n // Quartic: (h*t^2 + 2g*t + f)^2 = 4R^2*((dx*t+ox)^2 + (dz*t+oz)^2)\r\n // Expand into c4*t^4 + c3*t^3 + c2*t^2 + c1*t + c0 = 0\r\n\r\n const OO = ox * ox + oy * oy + oz * oz;\r\n const OD = ox * dx + oy * dy + oz * dz;\r\n const DD = dx * dx + dy * dy + dz * dz;\r\n\r\n const f = OO + R * R - r * r;\r\n const g = OD;\r\n const h = DD;\r\n\r\n // XZ components only (for the 4R²(x²+z²) term)\r\n const oxz2 = ox * ox + oz * oz; // ox² + oz²\r\n const odxz = ox * dx + oz * dz; // ox*dx + oz*dz\r\n const dxz2 = dx * dx + dz * dz; // dx² + dz²\r\n\r\n // Quartic coefficients (from expanding both sides)\r\n const R2 = 4 * R * R;\r\n const c4 = h * h;\r\n const c3 = 4 * h * g;\r\n const c2 = 2 * h * f + 4 * g * g - R2 * dxz2;\r\n const c1 = 4 * g * f - 2 * R2 * odxz;\r\n const c0 = f * f - R2 * oxz2;\r\n\r\n // Solve quartic c4*t^4 + c3*t^3 + c2*t^2 + c1*t + c0 = 0\r\n const roots = TorusShape._solveQuartic(c4, c3, c2, c1, c0);\r\n let tMin = Infinity;\r\n for (const t of roots) {\r\n if (t >= 0 && t < tMin) {\r\n tMin = t;\r\n }\r\n }\r\n return isFinite(tMin) ? tMin : null;\r\n }\r\n\r\n /** @internal Solve quartic a*t^4+b*t^3+c*t^2+d*t+e=0, returns real roots */\r\n private static _solveQuartic(a: number, b: number, c: number, d: number, e: number): number[] {\r\n return TorusShape._solvePolynomialReal([a, b, c, d, e]);\r\n }\r\n\r\n /** @internal Solve a low-degree polynomial and return all real roots */\r\n private static _solvePolynomialReal(coeffs: number[]): number[] {\r\n const eps = 1e-8;\r\n while (coeffs.length > 0 && Math.abs(coeffs[0]) < eps) {\r\n coeffs = coeffs.slice(1);\r\n }\r\n const degree = coeffs.length - 1;\r\n if (degree <= 0) {\r\n return [];\r\n }\r\n if (degree === 1) {\r\n return [-coeffs[1] / coeffs[0]];\r\n }\r\n if (degree === 2) {\r\n return TorusShape._solveQuadratic(coeffs[0], coeffs[1], coeffs[2]);\r\n }\r\n if (degree === 3) {\r\n return TorusShape._solveCubic(coeffs[0], coeffs[1], coeffs[2], coeffs[3]);\r\n }\r\n\r\n const leading = coeffs[0];\r\n let bound = 1;\r\n for (let i = 1; i < coeffs.length; i++) {\r\n bound = Math.max(bound, 1 + Math.abs(coeffs[i] / leading));\r\n }\r\n\r\n const derivative = coeffs.slice(0, -1).map((coef, index) => coef * (degree - index));\r\n const criticalPoints = TorusShape._solvePolynomialReal(derivative)\r\n .filter((value) => value > -bound - eps && value < bound + eps)\r\n .sort((a, b) => a - b);\r\n const roots: number[] = [];\r\n for (const value of criticalPoints) {\r\n if (Math.abs(TorusShape._evaluatePolynomial(coeffs, value)) < 1e-7) {\r\n TorusShape._pushUniqueRoot(roots, value);\r\n }\r\n }\r\n\r\n const points = [-bound, ...criticalPoints, bound];\r\n for (let i = 0; i < points.length - 1; i++) {\r\n const left = points[i];\r\n const right = points[i + 1];\r\n if (right - left < eps) {\r\n continue;\r\n }\r\n const fLeft = TorusShape._evaluatePolynomial(coeffs, left);\r\n const fRight = TorusShape._evaluatePolynomial(coeffs, right);\r\n if (Math.abs(fLeft) < 1e-7) {\r\n TorusShape._pushUniqueRoot(roots, left);\r\n }\r\n if (Math.abs(fRight) < 1e-7) {\r\n TorusShape._pushUniqueRoot(roots, right);\r\n }\r\n if (fLeft * fRight < 0) {\r\n TorusShape._pushUniqueRoot(roots, TorusShape._bisectPolynomialRoot(coeffs, left, right));\r\n }\r\n }\r\n return roots.sort((a, b) => a - b);\r\n }\r\n\r\n /** @internal Evaluate a polynomial with coefficients in descending order */\r\n private static _evaluatePolynomial(coeffs: number[], t: number) {\r\n let result = 0;\r\n for (let i = 0; i < coeffs.length; i++) {\r\n result = result * t + coeffs[i];\r\n }\r\n return result;\r\n }\r\n\r\n /** @internal Bisect a real root in an interval with opposite signs */\r\n private static _bisectPolynomialRoot(coeffs: number[], left: number, right: number) {\r\n let fLeft = TorusShape._evaluatePolynomial(coeffs, left);\r\n for (let i = 0; i < 64; i++) {\r\n const mid = (left + right) * 0.5;\r\n const fMid = TorusShape._evaluatePolynomial(coeffs, mid);\r\n if (Math.abs(fMid) < 1e-12) {\r\n return mid;\r\n }\r\n if (fLeft * fMid <= 0) {\r\n right = mid;\r\n } else {\r\n left = mid;\r\n fLeft = fMid;\r\n }\r\n }\r\n return (left + right) * 0.5;\r\n }\r\n\r\n /** @internal Add a root if it is not already represented in the list */\r\n private static _pushUniqueRoot(roots: number[], value: number) {\r\n if (!roots.some((root) => Math.abs(root - value) < 1e-7)) {\r\n roots.push(value);\r\n }\r\n }\r\n\r\n /** @internal Solve cubic a*t^3+b*t^2+c*t+d=0, returns real roots (Cardano) */\r\n private static _solveCubic(a: number, b: number, c: number, d: number): number[] {\r\n const eps = 1e-8;\r\n if (Math.abs(a) < eps) {\r\n return TorusShape._solveQuadratic(b, c, d);\r\n }\r\n const inv_a = 1 / a;\r\n const B = b * inv_a;\r\n const C = c * inv_a;\r\n const D = d * inv_a;\r\n const p = C - (B * B) / 3;\r\n const q = (2 * B * B * B) / 27 - (B * C) / 3 + D;\r\n const disc = (q * q) / 4 + (p * p * p) / 27;\r\n const shift = -B / 3;\r\n if (disc > eps) {\r\n const sqrtDisc = Math.sqrt(disc);\r\n const u = Math.cbrt(-q / 2 + sqrtDisc);\r\n const v = Math.cbrt(-q / 2 - sqrtDisc);\r\n return [u + v + shift];\r\n } else if (disc < -eps) {\r\n const theta = Math.acos(Math.max(-1, Math.min(1, -q / 2 / Math.sqrt((-p * p * p) / 27))));\r\n const rho = 2 * Math.sqrt(-p / 3);\r\n return [\r\n rho * Math.cos(theta / 3) + shift,\r\n rho * Math.cos((theta + 2 * Math.PI) / 3) + shift,\r\n rho * Math.cos((theta + 4 * Math.PI) / 3) + shift\r\n ];\r\n } else {\r\n const u = Math.cbrt(-q / 2);\r\n return [2 * u + shift, -u + shift];\r\n }\r\n }\r\n\r\n /** @internal Solve quadratic a*t^2+b*t+c=0 */\r\n private static _solveQuadratic(a: number, b: number, c: number): number[] {\r\n const eps = 1e-8;\r\n if (Math.abs(a) < eps) {\r\n if (Math.abs(b) < eps) {\r\n return [];\r\n }\r\n return [-c / b];\r\n }\r\n const disc = b * b - 4 * a * c;\r\n if (disc < 0) {\r\n return [];\r\n }\r\n if (disc < eps) {\r\n return [-b / (2 * a)];\r\n }\r\n const s = Math.sqrt(disc);\r\n return [(-b - s) / (2 * a), (-b + s) / (2 * a)];\r\n }\r\n /**\r\n * Generates the data for the torus shape\r\n * @param vertices - vertex positions\r\n * @param normals - vertex normals\r\n * @param uvs - vertex uvs\r\n * @param indices - vertex indices\r\n */\r\n static generateData(\r\n opt: TorusCreationOptions,\r\n vertices: number[],\r\n normals: number[],\r\n tangents: number[],\r\n uvs: number[],\r\n indices: number[],\r\n bbox?: AABB,\r\n indexOffset?: number,\r\n vertexCallback?: (index: number, x: number, y: number, z: number) => void\r\n ) {\r\n const options = Object.assign({}, this._defaultOptions, opt ?? {});\r\n indexOffset = indexOffset ?? 0;\r\n const start = vertices.length;\r\n const N = options.numSlices;\r\n const M = options.numSegments;\r\n const OR = options.outerRadius;\r\n const IR = options.innerRadius;\r\n for (let n = 0; n <= N; n++) {\r\n const alpha = ((n % N) / N) * Math.PI * 2;\r\n const cosA = Math.cos(alpha);\r\n const sinA = Math.sin(alpha);\r\n const cx = OR * cosA;\r\n const cy = 0;\r\n const cz = OR * sinA;\r\n for (let m = 0; m <= M; m++) {\r\n const theta = ((m % M) / M) * Math.PI * 2;\r\n const cosT = Math.cos(theta);\r\n const sinT = Math.sin(theta);\r\n const t = 1 + (IR * cosT) / OR;\r\n const s = IR * sinT;\r\n const x = cx * t;\r\n const y = cy * t + s;\r\n const z = cz * t;\r\n vertices.push(x, y, z);\r\n if (normals) {\r\n const nx = x - cx;\r\n const ny = y - cy;\r\n const nz = z - cz;\r\n const mag = Math.hypot(nx, ny, nz);\r\n normals.push(nx / mag, ny / mag, nz / mag);\r\n }\r\n if (uvs) {\r\n uvs.push(m / M, n / N);\r\n }\r\n if (tangents) {\r\n const tx = -sinT * cosA;\r\n const ty = cosT;\r\n const tz = -sinT * sinA;\r\n tangents.push(tx, ty, tz, 1.0);\r\n }\r\n }\r\n }\r\n for (let n = 0; n < N; n++) {\r\n for (let m = 0; m < M; m++) {\r\n indices.push(n * (M + 1) + m + indexOffset);\r\n indices.push((n + 1) * (M + 1) + m + 1 + indexOffset);\r\n indices.push((n + 1) * (M + 1) + m + indexOffset);\r\n indices.push(n * (M + 1) + m + indexOffset);\r\n indices.push(n * (M + 1) + m + 1 + indexOffset);\r\n indices.push((n + 1) * (M + 1) + m + 1 + indexOffset);\r\n }\r\n }\r\n Shape._transform(options.transform, vertices, normals, start);\r\n if (bbox || vertexCallback) {\r\n for (let i = start; i < vertices.length - 2; i += 3) {\r\n if (bbox) {\r\n bbox.minPoint.x = Math.min(bbox.minPoint.x, vertices[i]);\r\n bbox.minPoint.y = Math.min(bbox.minPoint.y, vertices[i + 1]);\r\n bbox.minPoint.z = Math.min(bbox.minPoint.z, vertices[i + 2]);\r\n bbox.maxPoint.x = Math.max(bbox.maxPoint.x, vertices[i]);\r\n bbox.maxPoint.y = Math.max(bbox.maxPoint.y, vertices[i + 1]);\r\n bbox.maxPoint.z = Math.max(bbox.maxPoint.z, vertices[i + 2]);\r\n }\r\n vertexCallback?.((i - start) / 3, vertices[i], vertices[i + 1], vertices[i + 2]);\r\n }\r\n }\r\n return 'triangle-list' as const;\r\n }\r\n}\r\n"],"names":["TorusShape","Shape","_defaultOptions","numSlices","numSegments","outerRadius","innerRadius","radialDetail","options","clone","_options","type","raycast","ray","R","r","ox","origin","x","oy","y","oz","z","dx","direction","dy","dz","OO","OD","DD","f","g","h","oxz2","odxz","dxz2","R2","c4","c3","c2","c1","c0","roots","_solveQuartic","tMin","Infinity","t","isFinite","a","b","c","d","e","_solvePolynomialReal","coeffs","eps","length","Math","abs","slice","degree","_solveQuadratic","_solveCubic","leading","bound","i","max","derivative","map","coef","index","criticalPoints","filter","value","sort","_evaluatePolynomial","_pushUniqueRoot","points","left","right","fLeft","fRight","_bisectPolynomialRoot","result","mid","fMid","some","root","push","inv_a","B","C","D","p","q","disc","shift","sqrtDisc","sqrt","u","cbrt","v","theta","acos","min","rho","cos","PI","s","generateData","opt","vertices","normals","tangents","uvs","indices","bbox","indexOffset","vertexCallback","Object","assign","start","N","M","OR","IR","n","alpha","cosA","sinA","sin","cx","cy","cz","m","cosT","sinT","nx","ny","nz","mag","hypot","tx","ty","tz","_transform","transform","minPoint","maxPoint"],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Animation that contains multiple tracks
|
|
3
|
+
* @public
|
|
4
|
+
*/ class AnimationClip {
|
|
5
|
+
/** @internal */ _name;
|
|
6
|
+
/** @internal */ _animationSet;
|
|
7
|
+
/** @internal */ _embedded;
|
|
8
|
+
/** @internal */ _duration;
|
|
9
|
+
/** @internal */ _autoPlay;
|
|
10
|
+
/** @internal */ _tracks;
|
|
11
|
+
_weight;
|
|
12
|
+
/** @internal */ _skeletons;
|
|
13
|
+
/**
|
|
14
|
+
* Creates an animation instance
|
|
15
|
+
* @param name - Name of the animation
|
|
16
|
+
* @param model - Parent node if this is a skeleton animation
|
|
17
|
+
*/ constructor(name, animationSet, embedded = false){
|
|
18
|
+
this._name = name;
|
|
19
|
+
this._animationSet = animationSet;
|
|
20
|
+
this._embedded = embedded;
|
|
21
|
+
this._tracks = new Map();
|
|
22
|
+
this._duration = 0;
|
|
23
|
+
this._weight = 1;
|
|
24
|
+
this._autoPlay = false;
|
|
25
|
+
this._skeletons = new Set();
|
|
26
|
+
}
|
|
27
|
+
/** Whether this is an embedded animation */ get embedded() {
|
|
28
|
+
return this._embedded;
|
|
29
|
+
}
|
|
30
|
+
/** AnimationSet this animation belongs to */ get animationSet() {
|
|
31
|
+
return this._animationSet;
|
|
32
|
+
}
|
|
33
|
+
/** Animatoin weight */ get weight() {
|
|
34
|
+
return this._weight;
|
|
35
|
+
}
|
|
36
|
+
set weight(val) {
|
|
37
|
+
this._weight = val;
|
|
38
|
+
}
|
|
39
|
+
/** Whether animation should play automatically when loaded */ get autoPlay() {
|
|
40
|
+
return this._autoPlay;
|
|
41
|
+
}
|
|
42
|
+
set autoPlay(val) {
|
|
43
|
+
this._autoPlay = val;
|
|
44
|
+
}
|
|
45
|
+
/** Disposes self */ dispose() {
|
|
46
|
+
this._tracks = null;
|
|
47
|
+
this._skeletons?.forEach((val, key)=>key.dispose());
|
|
48
|
+
this._skeletons = null;
|
|
49
|
+
}
|
|
50
|
+
/** Gets the name of the animation */ get name() {
|
|
51
|
+
return this._name;
|
|
52
|
+
}
|
|
53
|
+
/** Gets all the tracks of this animation */ get tracks() {
|
|
54
|
+
return this._tracks;
|
|
55
|
+
}
|
|
56
|
+
/** Gets all skeletons */ get skeletons() {
|
|
57
|
+
return this._skeletons;
|
|
58
|
+
}
|
|
59
|
+
/** The duration of the animation */ get timeDuration() {
|
|
60
|
+
return this._duration;
|
|
61
|
+
}
|
|
62
|
+
set timeDuration(val) {
|
|
63
|
+
this._duration = val;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Adds a skeleton to the animation
|
|
67
|
+
* @param skeleton - The skeleton to be added
|
|
68
|
+
* @param meshList - The meshes controlled by the skeleton
|
|
69
|
+
* @param boundingBoxInfo - Bounding box information for the skeleton
|
|
70
|
+
*/ addSkeleton(skeleton) {
|
|
71
|
+
this._skeletons.add(skeleton);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Deletes an animation track from this animation
|
|
75
|
+
* @param track - The track to delete
|
|
76
|
+
* @returns self
|
|
77
|
+
*/ deleteTrack(track) {
|
|
78
|
+
if (track?.animation !== this) {
|
|
79
|
+
console.error('Cannot delete animation track which is not belongs to THIS animation');
|
|
80
|
+
}
|
|
81
|
+
for (const k of this._tracks.keys()){
|
|
82
|
+
const tracks = this._tracks.get(k);
|
|
83
|
+
const index = tracks.indexOf(track);
|
|
84
|
+
if (index >= 0) {
|
|
85
|
+
tracks.splice(index, 1);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return this;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Adds an animation track to this animation
|
|
92
|
+
* @param target - The node that will be controlled by the track
|
|
93
|
+
* @param track - The track to be added
|
|
94
|
+
* @returns self
|
|
95
|
+
*/ addTrack(target, track) {
|
|
96
|
+
if (!track) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (track.animation) {
|
|
100
|
+
if (track.animation === this) {
|
|
101
|
+
return;
|
|
102
|
+
} else {
|
|
103
|
+
console.error('Track is already in another animation');
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const blendId = track.getBlendId();
|
|
108
|
+
const tracks = this._tracks.get(target);
|
|
109
|
+
if (tracks && tracks.findIndex((track)=>track.getBlendId() === blendId) >= 0) {
|
|
110
|
+
console.error('Tracks with same BlendId could not be added to same animation');
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
track.animation = this;
|
|
114
|
+
let trackInfo = this._tracks.get(target);
|
|
115
|
+
if (!trackInfo) {
|
|
116
|
+
trackInfo = [];
|
|
117
|
+
this._tracks.set(target, trackInfo);
|
|
118
|
+
}
|
|
119
|
+
trackInfo.push(track);
|
|
120
|
+
this._duration = Math.max(this._duration, track.getDuration() ?? 0);
|
|
121
|
+
track.reset(target);
|
|
122
|
+
return this;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export { AnimationClip };
|
|
127
|
+
//# sourceMappingURL=animation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation.js","sources":["../../../src/animation/animation.ts"],"sourcesContent":["import type { AnimationSet } from './animationset';\r\nimport type { AnimationTrack } from './animationtrack';\r\nimport type { Skeleton } from './skeleton';\r\n\r\n/**\r\n * Animation that contains multiple tracks\r\n * @public\r\n */\r\nexport class AnimationClip {\r\n /** @internal */\r\n protected _name: string;\r\n /** @internal */\r\n protected _animationSet: AnimationSet;\r\n /** @internal */\r\n protected _embedded: boolean;\r\n /** @internal */\r\n protected _duration: number;\r\n /** @internal */\r\n protected _autoPlay: boolean;\r\n /** @internal */\r\n protected _tracks: Map<object, AnimationTrack[]>;\r\n protected _weight: number;\r\n /** @internal */\r\n protected _skeletons: Set<Skeleton>;\r\n /**\r\n * Creates an animation instance\r\n * @param name - Name of the animation\r\n * @param model - Parent node if this is a skeleton animation\r\n */\r\n constructor(name: string, animationSet: AnimationSet, embedded = false) {\r\n this._name = name;\r\n this._animationSet = animationSet;\r\n this._embedded = embedded;\r\n this._tracks = new Map();\r\n this._duration = 0;\r\n this._weight = 1;\r\n this._autoPlay = false;\r\n this._skeletons = new Set();\r\n }\r\n /** Whether this is an embedded animation */\r\n get embedded(): boolean {\r\n return this._embedded;\r\n }\r\n /** AnimationSet this animation belongs to */\r\n get animationSet() {\r\n return this._animationSet;\r\n }\r\n /** Animatoin weight */\r\n get weight() {\r\n return this._weight;\r\n }\r\n set weight(val: number) {\r\n this._weight = val;\r\n }\r\n /** Whether animation should play automatically when loaded */\r\n get autoPlay() {\r\n return this._autoPlay;\r\n }\r\n set autoPlay(val: boolean) {\r\n this._autoPlay = val;\r\n }\r\n /** Disposes self */\r\n dispose() {\r\n this._tracks = null;\r\n this._skeletons?.forEach((val, key) => key.dispose());\r\n this._skeletons = null;\r\n }\r\n /** Gets the name of the animation */\r\n get name(): string {\r\n return this._name;\r\n }\r\n /** Gets all the tracks of this animation */\r\n get tracks() {\r\n return this._tracks;\r\n }\r\n /** Gets all skeletons */\r\n get skeletons() {\r\n return this._skeletons;\r\n }\r\n /** The duration of the animation */\r\n get timeDuration(): number {\r\n return this._duration;\r\n }\r\n set timeDuration(val: number) {\r\n this._duration = val;\r\n }\r\n /**\r\n * Adds a skeleton to the animation\r\n * @param skeleton - The skeleton to be added\r\n * @param meshList - The meshes controlled by the skeleton\r\n * @param boundingBoxInfo - Bounding box information for the skeleton\r\n */\r\n addSkeleton(skeleton: Skeleton) {\r\n this._skeletons.add(skeleton);\r\n }\r\n /**\r\n * Deletes an animation track from this animation\r\n * @param track - The track to delete\r\n * @returns self\r\n */\r\n deleteTrack(track: AnimationTrack): this {\r\n if (track?.animation !== this) {\r\n console.error('Cannot delete animation track which is not belongs to THIS animation');\r\n }\r\n for (const k of this._tracks.keys()) {\r\n const tracks = this._tracks.get(k);\r\n const index = tracks.indexOf(track);\r\n if (index >= 0) {\r\n tracks.splice(index, 1);\r\n }\r\n }\r\n return this;\r\n }\r\n /**\r\n * Adds an animation track to this animation\r\n * @param target - The node that will be controlled by the track\r\n * @param track - The track to be added\r\n * @returns self\r\n */\r\n addTrack(target: object, track: AnimationTrack): this {\r\n if (!track) {\r\n return;\r\n }\r\n if (track.animation) {\r\n if (track.animation === this) {\r\n return;\r\n } else {\r\n console.error('Track is already in another animation');\r\n return;\r\n }\r\n }\r\n const blendId = track.getBlendId();\r\n const tracks = this._tracks.get(target);\r\n if (tracks && tracks.findIndex((track) => track.getBlendId() === blendId) >= 0) {\r\n console.error('Tracks with same BlendId could not be added to same animation');\r\n return;\r\n }\r\n track.animation = this;\r\n let trackInfo = this._tracks.get(target);\r\n if (!trackInfo) {\r\n trackInfo = [];\r\n this._tracks.set(target, trackInfo);\r\n }\r\n trackInfo.push(track);\r\n this._duration = Math.max(this._duration, track.getDuration() ?? 0);\r\n track.reset(target);\r\n return this;\r\n }\r\n}\r\n"],"names":["AnimationClip","_weight","name","animationSet","embedded","_name","_animationSet","_embedded","_tracks","Map","_duration","_autoPlay","_skeletons","Set","weight","val","autoPlay","dispose","forEach","key","tracks","skeletons","timeDuration","addSkeleton","skeleton","add","deleteTrack","track","animation","console","error","k","keys","get","index","indexOf","splice","addTrack","target","blendId","getBlendId","findIndex","trackInfo","set","push","Math","max","getDuration","reset"],"mappings":"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"}
|