@zephyr3d/scene 0.7.0 → 0.8.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/dist/animation/animation.js +4 -33
- package/dist/animation/animation.js.map +1 -1
- package/dist/animation/animationset.js +24 -11
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/animationtrack.js +1 -0
- package/dist/animation/animationtrack.js.map +1 -1
- package/dist/animation/eulerrotationtrack.js +0 -1
- package/dist/animation/eulerrotationtrack.js.map +1 -1
- package/dist/animation/ik/ccd_solver.js +372 -0
- package/dist/animation/ik/ccd_solver.js.map +1 -0
- package/dist/animation/ik/fabrik_solver.js +399 -0
- package/dist/animation/ik/fabrik_solver.js.map +1 -0
- package/dist/animation/ik/ik_angle_constraint.js +181 -0
- package/dist/animation/ik/ik_angle_constraint.js.map +1 -0
- package/dist/animation/ik/ik_chain.js +163 -0
- package/dist/animation/ik/ik_chain.js.map +1 -0
- 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_constraint.js +25 -0
- package/dist/animation/ik/ik_constraint.js.map +1 -0
- package/dist/animation/ik/ik_pole_constraint.js +123 -0
- package/dist/animation/ik/ik_pole_constraint.js.map +1 -0
- package/dist/animation/ik/ik_solver.js +48 -0
- package/dist/animation/ik/ik_solver.js.map +1 -0
- package/dist/animation/ik/ik_track.js +96 -0
- package/dist/animation/ik/ik_track.js.map +1 -0
- package/dist/animation/ik/ik_utils.js +270 -0
- package/dist/animation/ik/ik_utils.js.map +1 -0
- package/dist/animation/ik/two_bone_ik_solver.js +332 -0
- package/dist/animation/ik/two_bone_ik_solver.js.map +1 -0
- package/dist/animation/ik_modifier.js +61 -0
- package/dist/animation/ik_modifier.js.map +1 -0
- package/dist/animation/ik_postprocessor.js +71 -0
- package/dist/animation/ik_postprocessor.js.map +1 -0
- package/dist/animation/manual_transform_processor.js +156 -0
- package/dist/animation/manual_transform_processor.js.map +1 -0
- package/dist/animation/morphtarget.js +7 -1
- package/dist/animation/morphtarget.js.map +1 -1
- package/dist/animation/morphtrack.js +3 -3
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/proptrack.js +37 -41
- package/dist/animation/proptrack.js.map +1 -1
- package/dist/animation/rotationtrack.js +0 -1
- package/dist/animation/rotationtrack.js.map +1 -1
- package/dist/animation/scaletrack.js +0 -1
- package/dist/animation/scaletrack.js.map +1 -1
- package/dist/animation/skeleton.js +57 -60
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js +38 -0
- package/dist/animation/skeleton_modifier.js.map +1 -0
- package/dist/animation/skeleton_postprocessor.js +50 -0
- package/dist/animation/skeleton_postprocessor.js.map +1 -0
- package/dist/animation/spring/multi_chain_spring_system.js +503 -0
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -0
- package/dist/animation/spring/spring_chain.js +103 -0
- package/dist/animation/spring/spring_chain.js.map +1 -0
- package/dist/animation/spring/spring_collider.js +247 -0
- package/dist/animation/spring/spring_collider.js.map +1 -0
- package/dist/animation/spring/spring_constraint.js +21 -0
- package/dist/animation/spring/spring_constraint.js.map +1 -0
- package/dist/animation/spring/spring_particle.js +20 -0
- package/dist/animation/spring/spring_particle.js.map +1 -0
- package/dist/animation/spring/spring_system.js +526 -0
- package/dist/animation/spring/spring_system.js.map +1 -0
- package/dist/animation/spring_modifier.js +45 -0
- package/dist/animation/spring_modifier.js.map +1 -0
- package/dist/animation/spring_postprocessor.js +54 -0
- package/dist/animation/spring_postprocessor.js.map +1 -0
- package/dist/animation/translationtrack.js +0 -1
- package/dist/animation/translationtrack.js.map +1 -1
- package/dist/app/api.js +13 -4
- package/dist/app/api.js.map +1 -1
- package/dist/app/app.js +13 -1
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +33 -45
- package/dist/app/engine.js.map +1 -1
- package/dist/app/inputmgr.js.map +1 -1
- package/dist/app/runtimescript.js.map +1 -1
- package/dist/app/screen.js +318 -0
- package/dist/app/screen.js.map +1 -0
- package/dist/app/scriptingsystem.js +10 -6
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +11 -22
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +79 -58
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/builtin.js +5 -5
- package/dist/asset/builtin.js.map +1 -1
- package/dist/asset/loaders/dds/dds.js +6 -2
- package/dist/asset/loaders/dds/dds.js.map +1 -1
- package/dist/asset/loaders/dds/dds_loader.js +1 -1
- package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +14 -6
- package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/helpers.js +6 -2
- package/dist/asset/loaders/gltf/helpers.js.map +1 -1
- package/dist/asset/loaders/hdr/hdr.js +22 -15
- package/dist/asset/loaders/hdr/hdr.js.map +1 -1
- package/dist/asset/loaders/image/tga_Loader.js +2 -1
- package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
- package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
- package/dist/asset/loaders/loader.js +2 -2
- package/dist/asset/loaders/loader.js.map +1 -1
- package/dist/asset/model.js +9 -5
- package/dist/asset/model.js.map +1 -1
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/blitter.js +9 -11
- package/dist/blitter/blitter.js.map +1 -1
- package/dist/blitter/box.js +0 -1
- package/dist/blitter/box.js.map +1 -1
- package/dist/blitter/copy.js.map +1 -1
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +1 -3
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +121 -37
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/fps.js +19 -17
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +45 -43
- package/dist/camera/orbit.js.map +1 -1
- package/dist/camera/orthocamera.js +27 -21
- package/dist/camera/orthocamera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +28 -19
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +15802 -15577
- package/dist/index.js +33 -11
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/grassmaterial.js.map +1 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +11 -5
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +10 -9
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/foliage.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +66 -4
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +7 -0
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +3 -3
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/brdf.js.map +1 -1
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +3 -0
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mixins/vertexcolor.js.map +1 -1
- package/dist/material/particle.js.map +1 -1
- package/dist/material/pbrblueprint.js +180 -22
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/shader/helper.js +41 -56
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/sprite.js +301 -0
- package/dist/material/sprite.js.map +1 -0
- package/dist/material/sprite3d.js +301 -0
- package/dist/material/sprite3d.js.map +1 -0
- package/dist/material/sprite3d_std.js +116 -0
- package/dist/material/sprite3d_std.js.map +1 -0
- package/dist/material/sprite3dblueprint.js +235 -0
- package/dist/material/sprite3dblueprint.js.map +1 -0
- package/dist/material/sprite_std.js +116 -0
- package/dist/material/sprite_std.js.map +1 -0
- package/dist/material/spriteblueprint.js +235 -0
- package/dist/material/spriteblueprint.js.map +1 -0
- package/dist/material/terrain-cm.js +0 -1
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/fxaa.js.map +1 -1
- package/dist/posteffect/grayscale.js.map +1 -1
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/ssr.js +7 -5
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +8 -6
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +0 -10
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +4 -4
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +15 -17
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/depthpass.js +3 -4
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable.js +15 -0
- package/dist/render/drawable.js.map +1 -0
- package/dist/render/drawable_mixin.js +8 -4
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +3 -1
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +67 -64
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/fullscreenquad.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +3 -1
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +3 -1
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/hzb.js +1 -2
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +13 -13
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/objectcolorpass.js +4 -7
- package/dist/render/objectcolorpass.js.map +1 -1
- package/dist/render/primitive.js +4 -5
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/render_queue.js +10 -5
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +16 -22
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/renderpass.js +27 -52
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/rendertarget.js +5 -0
- package/dist/render/rendertarget.js.map +1 -0
- package/dist/render/screenrendertarget.js +56 -0
- package/dist/render/screenrendertarget.js.map +1 -0
- package/dist/render/shadowmap_pass.js +4 -5
- package/dist/render/shadowmap_pass.js.map +1 -1
- package/dist/render/sky.js +16 -14
- package/dist/render/sky.js.map +1 -1
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +296 -0
- package/dist/scene/basesprite.js.map +1 -0
- package/dist/scene/batchgroup.js +4 -2
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +9 -10
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/light.js +22 -4
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +96 -26
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/octree.js.map +1 -1
- package/dist/scene/particlesys.js +25 -22
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/raycast_visitor.js +0 -16
- package/dist/scene/raycast_visitor.js.map +1 -1
- package/dist/scene/scene.js +7 -4
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +20 -35
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/sprite.js +18 -0
- package/dist/scene/sprite.js.map +1 -0
- package/dist/scene/sprite3d.js +18 -0
- package/dist/scene/sprite3d.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +5 -4
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +3 -1
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +65 -48
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/water.js +35 -30
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/atmosphere.js +17 -29
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/fog.js.map +1 -1
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/pbr.js.map +1 -1
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js.map +1 -1
- package/dist/shadow/esm.js +1 -1
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/shader.js +3 -1
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadowmapper.js +6 -18
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/box.js +9 -3
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/cylinder.js +2 -2
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +2 -2
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/shape.js +2 -1
- package/dist/shapes/shape.js.map +1 -1
- package/dist/shapes/sphere.js +2 -2
- package/dist/shapes/sphere.js.map +1 -1
- package/dist/shapes/tetrahedron.js +5 -6
- package/dist/shapes/tetrahedron.js.map +1 -1
- package/dist/shapes/torus.js +2 -2
- package/dist/shapes/torus.js.map +1 -1
- package/dist/utility/aabbtree.js +1 -1
- package/dist/utility/aabbtree.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +578 -104
- package/dist/utility/blueprint/common/constants.js.map +1 -1
- package/dist/utility/blueprint/common/math.js +471 -9
- package/dist/utility/blueprint/common/math.js.map +1 -1
- package/dist/utility/blueprint/common.js +1 -1
- package/dist/utility/blueprint/common.js.map +1 -1
- package/dist/utility/blueprint/material/func.js +9 -5
- package/dist/utility/blueprint/material/func.js.map +1 -1
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +288 -80
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/blueprint/material/pbr.js +92 -4
- package/dist/utility/blueprint/material/pbr.js.map +1 -1
- package/dist/utility/blueprint/material/texture.js +62 -45
- package/dist/utility/blueprint/material/texture.js.map +1 -1
- package/dist/utility/blueprint/node.js +28 -1
- package/dist/utility/blueprint/node.js.map +1 -1
- package/dist/utility/bounding_volume.js.map +1 -1
- package/dist/utility/debug.js.map +1 -1
- package/dist/utility/draco/decoder.js.map +1 -1
- package/dist/utility/misc.js +1 -1
- package/dist/utility/misc.js.map +1 -1
- package/dist/utility/panorama.js.map +1 -1
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/rendermipmap.js.map +1 -1
- package/dist/utility/serialization/json.js +19 -15
- package/dist/utility/serialization/json.js.map +1 -1
- package/dist/utility/serialization/manager.js +89 -22
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +44 -41
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +4 -3
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +97 -9
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +102 -28
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +14 -12
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +216 -26
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +71 -100
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/misc.js +3 -2
- package/dist/utility/serialization/scene/misc.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +42 -9
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +7 -5
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +18 -15
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +3 -2
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +164 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -0
- package/dist/utility/serialization/scene/terrain.js +8 -6
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +11 -9
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js +6 -0
- package/dist/utility/serialization/types.js.map +1 -0
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/gradientnoise.js.map +1 -1
- package/dist/utility/textures/randomnoise.js.map +1 -1
- package/dist/values.js +14 -14
- package/dist/values.js.map +1 -1
- package/package.json +80 -80
package/dist/blitter/box.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"box.js","sources":["../../src/blitter/box.ts"],"sourcesContent":["import type { BindGroup, PBShaderExp, PBInsideFunctionScope, PBGlobalScope } from '@zephyr3d/device';\r\nimport type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\n\r\n/**\r\n * Box-filter blitter\r\n * @public\r\n */\r\nexport class BoxFilterBlitter extends Blitter {\r\n /** @internal */\r\n protected _phase: 'horizonal' | 'vertical';\r\n /** @internal */\r\n protected _kernelSize: number;\r\n /** @internal */\r\n protected _sigma: number;\r\n /** @internal */\r\n protected _blurSize: number;\r\n /** @internal */\r\n protected _logSpace: boolean;\r\n /** @internal */\r\n protected _logSpaceMultiplier: number;\r\n /**\r\n * Creates an instance of BoxFilterBlitter\r\n * @param phase - phase of the blit operation\r\n * @param kernelSize - kernel size\r\n * @param blurSize - blur size\r\n */\r\n constructor(phase: 'horizonal' | 'vertical', kernelSize: number, blurSize: number) {\r\n super();\r\n this._phase = phase;\r\n this._kernelSize = kernelSize;\r\n this._blurSize = blurSize;\r\n this._logSpace = false;\r\n this._logSpaceMultiplier = 1;\r\n }\r\n /**\r\n * true if the box filter will be applied in logarithmic space\r\n */\r\n get logSpace(): boolean {\r\n return this._logSpace;\r\n }\r\n set logSpace(val: boolean) {\r\n this._logSpace = !!val;\r\n }\r\n /**\r\n * Multiplier for logarithmic space blur\r\n */\r\n get logSpaceMultiplier(): number {\r\n return this._logSpaceMultiplier;\r\n }\r\n set logSpaceMultiplier(val: number) {\r\n this._logSpaceMultiplier = val;\r\n }\r\n /**\r\n * {@inheritDoc Blitter.setup}\r\n * @override\r\n */\r\n setup(scope: PBGlobalScope, type: BlitType) {\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment') {\r\n scope.blurSize = pb.float().uniform(0);\r\n if (this._logSpace && this._phase === 'horizonal') {\r\n scope.multiplier = pb.float().uniform(0);\r\n }\r\n if (this._phase !== 'horizonal' && this._phase !== 'vertical') {\r\n throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid phase: ${this._phase}`);\r\n }\r\n if (!Number.isInteger(this._kernelSize) || this._kernelSize < 0 || (this._kernelSize & 1) === 0) {\r\n throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid kernel size: ${this._kernelSize}`);\r\n }\r\n scope.blurMultiplyVec =\r\n type === 'cube'\r\n ? this._phase === 'horizonal'\r\n ? pb.vec3(1, 0, 0)\r\n : pb.vec3(0, 1, 0)\r\n : this._phase === 'horizonal'\r\n ? pb.vec2(1, 0)\r\n : pb.vec2(0, 1);\r\n scope.numBlurPixelsPerSide = pb.float((this._kernelSize + 1) / 2);\r\n scope.weight = pb.float(1 / this._kernelSize);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Blitter.setUniforms}\r\n * @override\r\n */\r\n setUniforms(bindGroup: BindGroup) {\r\n bindGroup.setValue('blurSize', this._blurSize);\r\n if (this._logSpace && this._phase === 'horizonal') {\r\n bindGroup.setValue('multiplier', this._logSpaceMultiplier);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Blitter.filter}\r\n * @override\r\n */\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ): PBShaderExp {\r\n const that = this;\r\n const pb = scope.$builder;\r\n scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n if (that._logSpace) {\r\n scope.avgValue = pb.vec4(scope.weight);\r\n } else {\r\n scope.avgValue = pb.mul(that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType), scope.weight);\r\n }\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.d1 = that.readTexel(\r\n this,\r\n type,\r\n srcTex,\r\n pb.sub(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.d2 = that.readTexel(\r\n this,\r\n type,\r\n srcTex,\r\n pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)),\r\n srcLayer,\r\n sampleType\r\n );\r\n if (that._logSpace) {\r\n if (that._phase === 'horizonal') {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(pb.exp(pb.mul(pb.sub(this.d1, this.d0), this.multiplier)), this.weight)\r\n );\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(pb.exp(pb.mul(pb.sub(this.d2, this.d0), this.multiplier)), this.weight)\r\n );\r\n } else {\r\n this.avgValue = pb.add(this.avgValue, pb.mul(pb.exp(pb.sub(this.d1, this.d0)), this.weight));\r\n this.avgValue = pb.add(this.avgValue, pb.mul(pb.exp(pb.sub(this.d2, this.d0)), this.weight));\r\n }\r\n } else {\r\n this.avgValue = pb.add(this.avgValue, pb.mul(this.d1, this.weight));\r\n this.avgValue = pb.add(this.avgValue, pb.mul(this.d2, this.weight));\r\n }\r\n });\r\n if (that._logSpace) {\r\n if (that._phase === 'horizonal') {\r\n scope.avgValue = pb.add(pb.mul(scope.multiplier, scope.d0), pb.log(scope.avgValue));\r\n } else {\r\n scope.avgValue = pb.add(scope.d0, pb.log(scope.avgValue));\r\n }\r\n }\r\n return scope.avgValue;\r\n }\r\n /**\r\n * {@inheritDoc Blitter.calcHash}\r\n * @override\r\n */\r\n protected calcHash(): string {\r\n return `${this._phase}-${this._kernelSize}-${Number(!!this._logSpace)}`;\r\n }\r\n}\r\n"],"names":["BoxFilterBlitter","Blitter","phase","kernelSize","blurSize","_phase","_kernelSize","_blurSize","_logSpace","_logSpaceMultiplier","logSpace","val","logSpaceMultiplier","setup","scope","type","pb","$builder","shaderKind","float","uniform","multiplier","Error","Number","isInteger","blurMultiplyVec","vec3","vec2","numBlurPixelsPerSide","weight","setUniforms","bindGroup","setValue","filter","srcTex","srcUV","srcLayer","sampleType","that","d0","readTexel","avgValue","vec4","mul","$for","d1","sub","i","d2","add","exp","log"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"box.js","sources":["../../src/blitter/box.ts"],"sourcesContent":["import type { BindGroup, PBShaderExp, PBInsideFunctionScope, PBGlobalScope } from '@zephyr3d/device';\r\nimport type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\n\r\n/**\r\n * Box-filter blitter\r\n * @public\r\n */\r\nexport class BoxFilterBlitter extends Blitter {\r\n /** @internal */\r\n protected _phase: 'horizonal' | 'vertical';\r\n /** @internal */\r\n protected _kernelSize: number;\r\n /** @internal */\r\n protected _blurSize: number;\r\n /** @internal */\r\n protected _logSpace: boolean;\r\n /** @internal */\r\n protected _logSpaceMultiplier: number;\r\n /**\r\n * Creates an instance of BoxFilterBlitter\r\n * @param phase - phase of the blit operation\r\n * @param kernelSize - kernel size\r\n * @param blurSize - blur size\r\n */\r\n constructor(phase: 'horizonal' | 'vertical', kernelSize: number, blurSize: number) {\r\n super();\r\n this._phase = phase;\r\n this._kernelSize = kernelSize;\r\n this._blurSize = blurSize;\r\n this._logSpace = false;\r\n this._logSpaceMultiplier = 1;\r\n }\r\n /**\r\n * true if the box filter will be applied in logarithmic space\r\n */\r\n get logSpace() {\r\n return this._logSpace;\r\n }\r\n set logSpace(val) {\r\n this._logSpace = !!val;\r\n }\r\n /**\r\n * Multiplier for logarithmic space blur\r\n */\r\n get logSpaceMultiplier() {\r\n return this._logSpaceMultiplier;\r\n }\r\n set logSpaceMultiplier(val) {\r\n this._logSpaceMultiplier = val;\r\n }\r\n /**\r\n * {@inheritDoc Blitter.setup}\r\n * @override\r\n */\r\n setup(scope: PBGlobalScope, type: BlitType) {\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment') {\r\n scope.blurSize = pb.float().uniform(0);\r\n if (this._logSpace && this._phase === 'horizonal') {\r\n scope.multiplier = pb.float().uniform(0);\r\n }\r\n if (this._phase !== 'horizonal' && this._phase !== 'vertical') {\r\n throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid phase: ${this._phase}`);\r\n }\r\n if (!Number.isInteger(this._kernelSize) || this._kernelSize < 0 || (this._kernelSize & 1) === 0) {\r\n throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid kernel size: ${this._kernelSize}`);\r\n }\r\n scope.blurMultiplyVec =\r\n type === 'cube'\r\n ? this._phase === 'horizonal'\r\n ? pb.vec3(1, 0, 0)\r\n : pb.vec3(0, 1, 0)\r\n : this._phase === 'horizonal'\r\n ? pb.vec2(1, 0)\r\n : pb.vec2(0, 1);\r\n scope.numBlurPixelsPerSide = pb.float((this._kernelSize + 1) / 2);\r\n scope.weight = pb.float(1 / this._kernelSize);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Blitter.setUniforms}\r\n * @override\r\n */\r\n setUniforms(bindGroup: BindGroup) {\r\n bindGroup.setValue('blurSize', this._blurSize);\r\n if (this._logSpace && this._phase === 'horizonal') {\r\n bindGroup.setValue('multiplier', this._logSpaceMultiplier);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Blitter.filter}\r\n * @override\r\n */\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n if (that._logSpace) {\r\n scope.avgValue = pb.vec4(scope.weight);\r\n } else {\r\n scope.avgValue = pb.mul(that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType), scope.weight);\r\n }\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.d1 = that.readTexel(\r\n this,\r\n type,\r\n srcTex,\r\n pb.sub(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)),\r\n srcLayer,\r\n sampleType\r\n );\r\n this.d2 = that.readTexel(\r\n this,\r\n type,\r\n srcTex,\r\n pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)),\r\n srcLayer,\r\n sampleType\r\n );\r\n if (that._logSpace) {\r\n if (that._phase === 'horizonal') {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(pb.exp(pb.mul(pb.sub(this.d1, this.d0), this.multiplier)), this.weight)\r\n );\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(pb.exp(pb.mul(pb.sub(this.d2, this.d0), this.multiplier)), this.weight)\r\n );\r\n } else {\r\n this.avgValue = pb.add(this.avgValue, pb.mul(pb.exp(pb.sub(this.d1, this.d0)), this.weight));\r\n this.avgValue = pb.add(this.avgValue, pb.mul(pb.exp(pb.sub(this.d2, this.d0)), this.weight));\r\n }\r\n } else {\r\n this.avgValue = pb.add(this.avgValue, pb.mul(this.d1, this.weight));\r\n this.avgValue = pb.add(this.avgValue, pb.mul(this.d2, this.weight));\r\n }\r\n });\r\n if (that._logSpace) {\r\n if (that._phase === 'horizonal') {\r\n scope.avgValue = pb.add(pb.mul(scope.multiplier, scope.d0), pb.log(scope.avgValue));\r\n } else {\r\n scope.avgValue = pb.add(scope.d0, pb.log(scope.avgValue));\r\n }\r\n }\r\n return scope.avgValue as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc Blitter.calcHash}\r\n * @override\r\n */\r\n protected calcHash() {\r\n return `${this._phase}-${this._kernelSize}-${Number(!!this._logSpace)}`;\r\n }\r\n}\r\n"],"names":["BoxFilterBlitter","Blitter","phase","kernelSize","blurSize","_phase","_kernelSize","_blurSize","_logSpace","_logSpaceMultiplier","logSpace","val","logSpaceMultiplier","setup","scope","type","pb","$builder","shaderKind","float","uniform","multiplier","Error","Number","isInteger","blurMultiplyVec","vec3","vec2","numBlurPixelsPerSide","weight","setUniforms","bindGroup","setValue","filter","srcTex","srcUV","srcLayer","sampleType","that","d0","readTexel","avgValue","vec4","mul","$for","d1","sub","i","d2","add","exp","log"],"mappings":"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"}
|
package/dist/blitter/copy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy.js","sources":["../../src/blitter/copy.ts"],"sourcesContent":["import type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\nimport type { PBShaderExp, PBInsideFunctionScope } from '@zephyr3d/device';\r\n\r\n/**\r\n * Copy blitter\r\n * @public\r\n */\r\nexport class CopyBlitter extends Blitter {\r\n /**\r\n * {@inheritDoc Blitter.filter}\r\n * @override\r\n */\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n )
|
|
1
|
+
{"version":3,"file":"copy.js","sources":["../../src/blitter/copy.ts"],"sourcesContent":["import type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\nimport type { PBShaderExp, PBInsideFunctionScope } from '@zephyr3d/device';\r\n\r\n/**\r\n * Copy blitter\r\n * @public\r\n */\r\nexport class CopyBlitter extends Blitter {\r\n /**\r\n * {@inheritDoc Blitter.filter}\r\n * @override\r\n */\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n return this.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n }\r\n /**\r\n * {@inheritDoc Blitter.calcHash}\r\n * @override\r\n */\r\n protected calcHash() {\r\n return '';\r\n }\r\n}\r\n"],"names":["CopyBlitter","Blitter","filter","scope","type","srcTex","srcUV","srcLayer","sampleType","readTexel"],"mappings":";;AAIA;;;IAIO,MAAMA,WAAoBC,SAAAA,OAAAA,CAAAA;AAC/B;;;AAGC,MACDC,MACEC,CAAAA,KAA4B,EAC5BC,IAAc,EACdC,MAAmB,EACnBC,KAAkB,EAClBC,QAAqB,EACrBC,UAAoC,EACpC;QACA,OAAO,IAAI,CAACC,SAAS,CAACN,OAAOC,IAAMC,EAAAA,MAAAA,EAAQC,OAAOC,QAAUC,EAAAA,UAAAA,CAAAA;AAC9D;AACA;;;AAGC,MACD,QAAqB,GAAA;QACnB,OAAO,EAAA;AACT;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gaussianblur.js","sources":["../../src/blitter/gaussianblur.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n PBShaderExp,\r\n PBInsideFunctionScope,\r\n PBGlobalScope,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\n\r\n/**\r\n * Gaussian blur blitter\r\n * @public\r\n */\r\nexport class GaussianBlurBlitter extends Blitter {\r\n /** @internal */\r\n protected _phase: 'horizonal' | 'vertical';\r\n /** @internal */\r\n protected _kernelSize: number;\r\n /** @internal */\r\n protected _sigma: number;\r\n /** @internal */\r\n protected _blurSize: number;\r\n /** @internal */\r\n protected _logSpace: boolean;\r\n /** @internal */\r\n protected _logSpaceMultiplier: number;\r\n /** @internal */\r\n protected _depthTex: Texture2D;\r\n /** @internal */\r\n protected _depthCutoff: number;\r\n /**\r\n * Creates an instance of GaussianBlurBlitter\r\n * @param phase - Blitter phase\r\n * @param kernalSize - kernel size\r\n * @param sigma - Gaussian standard deviation\r\n * @param blurSize - Blur radius\r\n */\r\n constructor(phase: 'horizonal' | 'vertical', kernalSize: number, sigma: number, blurSize: number) {\r\n super();\r\n this._phase = phase;\r\n this._kernelSize = kernalSize;\r\n this._sigma = sigma;\r\n this._blurSize = blurSize;\r\n this._logSpace = false;\r\n this._logSpaceMultiplier = 1;\r\n this._depthTex = null;\r\n this._depthCutoff = 0.7;\r\n }\r\n /** Blur radius */\r\n get blurSize(): number {\r\n return this._blurSize;\r\n }\r\n set blurSize(val: number) {\r\n this._blurSize = val;\r\n }\r\n /** Kernel size */\r\n get kernelSize(): number {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val: number) {\r\n if (this._kernelSize !== val) {\r\n this._kernelSize = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n /** true if the box filter will be applied in logarithmic space */\r\n get logSpace(): boolean {\r\n return this._logSpace;\r\n }\r\n set logSpace(val: boolean) {\r\n if (this._logSpace !== !!val) {\r\n this._logSpace = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n /** Multiplier for logarithmic space blur */\r\n get logSpaceMultiplier(): number {\r\n return this._logSpaceMultiplier;\r\n }\r\n set logSpaceMultiplier(val: number) {\r\n this._logSpaceMultiplier = val;\r\n }\r\n /** Linear depth texture */\r\n get depthTexture(): Texture2D {\r\n return this._depthTex;\r\n }\r\n set depthTexture(tex: Texture2D) {\r\n if (this._depthTex !== tex) {\r\n if (!tex || !this._depthTex) {\r\n this.invalidateHash();\r\n }\r\n this._depthTex = tex;\r\n }\r\n }\r\n /** Depth cutoff */\r\n get depthCutoff(): number {\r\n return this._depthCutoff;\r\n }\r\n set depthCutoff(val: number) {\r\n this._depthCutoff = val;\r\n }\r\n /**\r\n * {@inheritDoc Blitter.setup}\r\n * @override\r\n */\r\n setup(scope: PBGlobalScope, type: BlitType) {\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment') {\r\n if (this._depthTex) {\r\n scope.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n scope.depthCutoff = pb.float().uniform(0);\r\n }\r\n scope.sigma = pb.float().uniform(0);\r\n scope.blurSize = pb.float().uniform(0);\r\n if (this._logSpace && this._phase === 'horizonal') {\r\n scope.multiplier = pb.float().uniform(0);\r\n }\r\n if (this._phase !== 'horizonal' && this._phase !== 'vertical') {\r\n throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid phase: ${this._phase}`);\r\n }\r\n if (!Number.isInteger(this._kernelSize) || this._kernelSize < 0 || (this._kernelSize & 1) === 0) {\r\n throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid kernel size: ${this._kernelSize}`);\r\n }\r\n scope.blurMultiplyVec =\r\n type === 'cube'\r\n ? this._phase === 'horizonal'\r\n ? pb.vec3(1, 0, 0)\r\n : pb.vec3(0, 1, 0)\r\n : this._phase === 'horizonal'\r\n ? pb.vec2(1, 0)\r\n : pb.vec2(0, 1);\r\n scope.numBlurPixelsPerSide = pb.float((this._kernelSize + 1) / 2);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Blitter.setUniforms}\r\n * @override\r\n */\r\n setUniforms(bindGroup: BindGroup) {\r\n bindGroup.setValue('sigma', this._sigma);\r\n bindGroup.setValue('blurSize', this._blurSize);\r\n if (this._logSpace && this._phase === 'horizonal') {\r\n bindGroup.setValue('multiplier', this._logSpaceMultiplier);\r\n }\r\n if (this._depthTex) {\r\n bindGroup.setTexture('depthTex', this._depthTex);\r\n bindGroup.setValue('depthCutoff', this._depthCutoff);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Blitter.filter}\r\n * @override\r\n */\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ): PBShaderExp {\r\n const that = this;\r\n const pb = scope.$builder;\r\n if (that._depthTex) {\r\n pb.func('getLinearDepth', [pb.vec2('uv')], function () {\r\n this.$l.depthValue = pb.textureSample(this.depthTex, this.uv);\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$return(decodeNormalizedFloatFromRGBA(this, this.depthValue));\r\n } else {\r\n this.$return(this.depthValue.r);\r\n }\r\n });\r\n }\r\n scope.incrementalGaussian = pb.vec3();\r\n scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));\r\n scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));\r\n scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);\r\n scope.coefficientSum = pb.float(0);\r\n scope.minExpValue = pb.vec4(87, 87, 87, 87);\r\n scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n if (that._logSpace) {\r\n scope.avgValue = pb.vec4(scope.incrementalGaussian.x);\r\n } else {\r\n scope.avgValue = pb.mul(\r\n that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType),\r\n scope.incrementalGaussian.x\r\n );\r\n }\r\n if (that._depthTex) {\r\n scope.centerDepth = scope.getLinearDepth(srcUV);\r\n }\r\n scope.coefficientSum = pb.add(scope.coefficientSum, scope.incrementalGaussian.x);\r\n scope.incrementalGaussian = pb.vec3(\r\n pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz),\r\n scope.incrementalGaussian.z\r\n );\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.$l.uv1 = pb.sub(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i));\r\n this.$l.d1 = pb.vec4();\r\n if (that._depthTex) {\r\n this.$l.depth1 = this.getLinearDepth(this.uv1);\r\n this.$l.test1 = pb.lessThan(pb.abs(pb.sub(this.depth1, this.centerDepth)), this.depthCutoff);\r\n } else {\r\n this.$l.test1 = true;\r\n }\r\n this.$if(this.test1, function () {\r\n this.d1 = that.readTexel(scope, type, srcTex, this.uv1, srcLayer, sampleType);\r\n });\r\n this.$l.uv2 = pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i));\r\n this.$l.d2 = pb.vec4();\r\n if (that._depthTex) {\r\n this.$l.depth2 = this.getLinearDepth(this.uv2);\r\n this.$l.test2 = pb.lessThan(pb.abs(pb.sub(this.depth2, this.centerDepth)), this.depthCutoff);\r\n } else {\r\n this.$l.test2 = true;\r\n }\r\n this.$if(this.test2, function () {\r\n this.d2 = that.readTexel(\r\n scope,\r\n type,\r\n srcTex,\r\n pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)),\r\n srcLayer,\r\n sampleType\r\n );\r\n });\r\n if (that._logSpace) {\r\n if (that._phase === 'horizonal') {\r\n this.$if(this.test1, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(\r\n pb.exp(pb.min(this.minExpValue, pb.mul(pb.sub(this.d1, this.d0), this.multiplier))),\r\n this.incrementalGaussian.x\r\n )\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n this.$if(this.test2, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(\r\n pb.exp(pb.min(this.minExpValue, pb.mul(pb.sub(this.d2, this.d0), this.multiplier))),\r\n this.incrementalGaussian.x\r\n )\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n } else {\r\n this.$if(this.test1, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(pb.exp(pb.min(this.minExpValue, pb.sub(this.d1, this.d0))), this.incrementalGaussian.x)\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n this.$if(this.test2, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(pb.exp(pb.min(this.minExpValue, pb.sub(this.d2, this.d0))), this.incrementalGaussian.x)\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n }\r\n } else {\r\n this.$if(this.test1, function () {\r\n this.avgValue = pb.add(this.avgValue, pb.mul(this.d1, this.incrementalGaussian.x));\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n this.$if(this.test2, function () {\r\n this.avgValue = pb.add(this.avgValue, pb.mul(this.d2, this.incrementalGaussian.x));\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n }\r\n this.incrementalGaussian = pb.vec3(\r\n pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz),\r\n this.incrementalGaussian.z\r\n );\r\n });\r\n scope.$l.outColor = pb.div(scope.avgValue, scope.coefficientSum);\r\n if (that._logSpace) {\r\n if (that._phase === 'horizonal') {\r\n scope.outColor = pb.add(pb.mul(scope.multiplier, scope.d0), pb.log(scope.outColor));\r\n } else {\r\n scope.outColor = pb.add(scope.d0, pb.log(scope.outColor));\r\n }\r\n }\r\n return scope.outColor;\r\n }\r\n /**\r\n * {@inheritDoc Blitter.calcHash}\r\n * @override\r\n */\r\n protected calcHash(): string {\r\n return `${this._depthTex ? 1 : 0}-${this._phase}-${this._kernelSize}-${Number(!!this._logSpace)}`;\r\n }\r\n}\r\n"],"names":["GaussianBlurBlitter","Blitter","phase","kernalSize","sigma","blurSize","_phase","_kernelSize","_sigma","_blurSize","_logSpace","_logSpaceMultiplier","_depthTex","_depthCutoff","val","kernelSize","invalidateHash","logSpace","logSpaceMultiplier","depthTexture","tex","depthCutoff","setup","scope","type","pb","$builder","shaderKind","depthTex","tex2D","sampleType","uniform","float","multiplier","Error","Number","isInteger","blurMultiplyVec","vec3","vec2","numBlurPixelsPerSide","setUniforms","bindGroup","setValue","setTexture","filter","srcTex","srcUV","srcLayer","that","func","$l","depthValue","textureSample","uv","getDevice","$return","decodeNormalizedFloatFromRGBA","r","incrementalGaussian","x","div","mul","Math","sqrt","PI","y","exp","z","coefficientSum","minExpValue","vec4","d0","readTexel","avgValue","centerDepth","getLinearDepth","add","xy","yz","$for","uv1","sub","i","d1","depth1","test1","lessThan","abs","$if","uv2","d2","depth2","test2","min","outColor","log"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gaussianblur.js","sources":["../../src/blitter/gaussianblur.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n PBShaderExp,\r\n PBInsideFunctionScope,\r\n PBGlobalScope,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\n/**\r\n * Gaussian blur blitter\r\n * @public\r\n */\r\nexport class GaussianBlurBlitter extends Blitter {\r\n /** @internal */\r\n protected _phase: 'horizonal' | 'vertical';\r\n /** @internal */\r\n protected _kernelSize: number;\r\n /** @internal */\r\n protected _sigma: number;\r\n /** @internal */\r\n protected _blurSize: number;\r\n /** @internal */\r\n protected _logSpace: boolean;\r\n /** @internal */\r\n protected _logSpaceMultiplier: number;\r\n /** @internal */\r\n protected _depthTex: Nullable<Texture2D>;\r\n /** @internal */\r\n protected _depthCutoff: number;\r\n /**\r\n * Creates an instance of GaussianBlurBlitter\r\n * @param phase - Blitter phase\r\n * @param kernalSize - kernel size\r\n * @param sigma - Gaussian standard deviation\r\n * @param blurSize - Blur radius\r\n */\r\n constructor(phase: 'horizonal' | 'vertical', kernalSize: number, sigma: number, blurSize: number) {\r\n super();\r\n this._phase = phase;\r\n this._kernelSize = kernalSize;\r\n this._sigma = sigma;\r\n this._blurSize = blurSize;\r\n this._logSpace = false;\r\n this._logSpaceMultiplier = 1;\r\n this._depthTex = null;\r\n this._depthCutoff = 0.7;\r\n }\r\n /** Blur radius */\r\n get blurSize() {\r\n return this._blurSize;\r\n }\r\n set blurSize(val) {\r\n this._blurSize = val;\r\n }\r\n /** Kernel size */\r\n get kernelSize() {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val) {\r\n if (this._kernelSize !== val) {\r\n this._kernelSize = val;\r\n this.invalidateHash();\r\n }\r\n }\r\n /** true if the box filter will be applied in logarithmic space */\r\n get logSpace() {\r\n return this._logSpace;\r\n }\r\n set logSpace(val) {\r\n if (this._logSpace !== !!val) {\r\n this._logSpace = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n /** Multiplier for logarithmic space blur */\r\n get logSpaceMultiplier() {\r\n return this._logSpaceMultiplier;\r\n }\r\n set logSpaceMultiplier(val) {\r\n this._logSpaceMultiplier = val;\r\n }\r\n /** Linear depth texture */\r\n get depthTexture() {\r\n return this._depthTex;\r\n }\r\n set depthTexture(tex) {\r\n if (this._depthTex !== tex) {\r\n if (!tex || !this._depthTex) {\r\n this.invalidateHash();\r\n }\r\n this._depthTex = tex;\r\n }\r\n }\r\n /** Depth cutoff */\r\n get depthCutoff() {\r\n return this._depthCutoff;\r\n }\r\n set depthCutoff(val) {\r\n this._depthCutoff = val;\r\n }\r\n /**\r\n * {@inheritDoc Blitter.setup}\r\n * @override\r\n */\r\n setup(scope: PBGlobalScope, type: BlitType) {\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment') {\r\n if (this._depthTex) {\r\n scope.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n scope.depthCutoff = pb.float().uniform(0);\r\n }\r\n scope.sigma = pb.float().uniform(0);\r\n scope.blurSize = pb.float().uniform(0);\r\n if (this._logSpace && this._phase === 'horizonal') {\r\n scope.multiplier = pb.float().uniform(0);\r\n }\r\n if (this._phase !== 'horizonal' && this._phase !== 'vertical') {\r\n throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid phase: ${this._phase}`);\r\n }\r\n if (!Number.isInteger(this._kernelSize) || this._kernelSize < 0 || (this._kernelSize & 1) === 0) {\r\n throw new Error(`GaussianBlurFilter.setupFilter() failed: invalid kernel size: ${this._kernelSize}`);\r\n }\r\n scope.blurMultiplyVec =\r\n type === 'cube'\r\n ? this._phase === 'horizonal'\r\n ? pb.vec3(1, 0, 0)\r\n : pb.vec3(0, 1, 0)\r\n : this._phase === 'horizonal'\r\n ? pb.vec2(1, 0)\r\n : pb.vec2(0, 1);\r\n scope.numBlurPixelsPerSide = pb.float((this._kernelSize + 1) / 2);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Blitter.setUniforms}\r\n * @override\r\n */\r\n setUniforms(bindGroup: BindGroup) {\r\n bindGroup.setValue('sigma', this._sigma);\r\n bindGroup.setValue('blurSize', this._blurSize);\r\n if (this._logSpace && this._phase === 'horizonal') {\r\n bindGroup.setValue('multiplier', this._logSpaceMultiplier);\r\n }\r\n if (this._depthTex) {\r\n bindGroup.setTexture('depthTex', this._depthTex);\r\n bindGroup.setValue('depthCutoff', this._depthCutoff);\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Blitter.filter}\r\n * @override\r\n */\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n if (that._depthTex) {\r\n pb.func('getLinearDepth', [pb.vec2('uv')], function () {\r\n this.$l.depthValue = pb.textureSample(this.depthTex, this.uv);\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$return(decodeNormalizedFloatFromRGBA(this, this.depthValue));\r\n } else {\r\n this.$return(this.depthValue.r);\r\n }\r\n });\r\n }\r\n scope.incrementalGaussian = pb.vec3();\r\n scope.incrementalGaussian.x = pb.div(1, pb.mul(scope.sigma, Math.sqrt(2 * Math.PI)));\r\n scope.incrementalGaussian.y = pb.exp(pb.div(-0.5, pb.mul(scope.sigma, scope.sigma)));\r\n scope.incrementalGaussian.z = pb.mul(scope.incrementalGaussian.y, scope.incrementalGaussian.y);\r\n scope.coefficientSum = pb.float(0);\r\n scope.minExpValue = pb.vec4(87, 87, 87, 87);\r\n scope.d0 = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n if (that._logSpace) {\r\n scope.avgValue = pb.vec4(scope.incrementalGaussian.x);\r\n } else {\r\n scope.avgValue = pb.mul(\r\n that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType),\r\n scope.incrementalGaussian.x\r\n );\r\n }\r\n if (that._depthTex) {\r\n scope.centerDepth = scope.getLinearDepth(srcUV);\r\n }\r\n scope.coefficientSum = pb.add(scope.coefficientSum, scope.incrementalGaussian.x);\r\n scope.incrementalGaussian = pb.vec3(\r\n pb.mul(scope.incrementalGaussian.xy, scope.incrementalGaussian.yz),\r\n scope.incrementalGaussian.z\r\n );\r\n scope.$for(pb.float('i'), 1, scope.numBlurPixelsPerSide, function () {\r\n this.$l.uv1 = pb.sub(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i));\r\n this.$l.d1 = pb.vec4();\r\n if (that._depthTex) {\r\n this.$l.depth1 = this.getLinearDepth(this.uv1);\r\n this.$l.test1 = pb.lessThan(pb.abs(pb.sub(this.depth1, this.centerDepth)), this.depthCutoff);\r\n } else {\r\n this.$l.test1 = true;\r\n }\r\n this.$if(this.test1, function () {\r\n this.d1 = that.readTexel(scope, type, srcTex, this.uv1, srcLayer, sampleType);\r\n });\r\n this.$l.uv2 = pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i));\r\n this.$l.d2 = pb.vec4();\r\n if (that._depthTex) {\r\n this.$l.depth2 = this.getLinearDepth(this.uv2);\r\n this.$l.test2 = pb.lessThan(pb.abs(pb.sub(this.depth2, this.centerDepth)), this.depthCutoff);\r\n } else {\r\n this.$l.test2 = true;\r\n }\r\n this.$if(this.test2, function () {\r\n this.d2 = that.readTexel(\r\n scope,\r\n type,\r\n srcTex,\r\n pb.add(srcUV, pb.mul(this.blurMultiplyVec, this.blurSize, this.i)),\r\n srcLayer,\r\n sampleType\r\n );\r\n });\r\n if (that._logSpace) {\r\n if (that._phase === 'horizonal') {\r\n this.$if(this.test1, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(\r\n pb.exp(pb.min(this.minExpValue, pb.mul(pb.sub(this.d1, this.d0), this.multiplier))),\r\n this.incrementalGaussian.x\r\n )\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n this.$if(this.test2, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(\r\n pb.exp(pb.min(this.minExpValue, pb.mul(pb.sub(this.d2, this.d0), this.multiplier))),\r\n this.incrementalGaussian.x\r\n )\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n } else {\r\n this.$if(this.test1, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(pb.exp(pb.min(this.minExpValue, pb.sub(this.d1, this.d0))), this.incrementalGaussian.x)\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n this.$if(this.test2, function () {\r\n this.avgValue = pb.add(\r\n this.avgValue,\r\n pb.mul(pb.exp(pb.min(this.minExpValue, pb.sub(this.d2, this.d0))), this.incrementalGaussian.x)\r\n );\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n }\r\n } else {\r\n this.$if(this.test1, function () {\r\n this.avgValue = pb.add(this.avgValue, pb.mul(this.d1, this.incrementalGaussian.x));\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n this.$if(this.test2, function () {\r\n this.avgValue = pb.add(this.avgValue, pb.mul(this.d2, this.incrementalGaussian.x));\r\n this.coefficientSum = pb.add(this.coefficientSum, this.incrementalGaussian.x);\r\n });\r\n }\r\n this.incrementalGaussian = pb.vec3(\r\n pb.mul(this.incrementalGaussian.xy, this.incrementalGaussian.yz),\r\n this.incrementalGaussian.z\r\n );\r\n });\r\n scope.$l.outColor = pb.div(scope.avgValue, scope.coefficientSum);\r\n if (that._logSpace) {\r\n if (that._phase === 'horizonal') {\r\n scope.outColor = pb.add(pb.mul(scope.multiplier, scope.d0), pb.log(scope.outColor));\r\n } else {\r\n scope.outColor = pb.add(scope.d0, pb.log(scope.outColor));\r\n }\r\n }\r\n return scope.outColor as PBShaderExp;\r\n }\r\n /**\r\n * {@inheritDoc Blitter.calcHash}\r\n * @override\r\n */\r\n protected calcHash() {\r\n return `${this._depthTex ? 1 : 0}-${this._phase}-${this._kernelSize}-${Number(!!this._logSpace)}`;\r\n }\r\n}\r\n"],"names":["GaussianBlurBlitter","Blitter","phase","kernalSize","sigma","blurSize","_phase","_kernelSize","_sigma","_blurSize","_logSpace","_logSpaceMultiplier","_depthTex","_depthCutoff","val","kernelSize","invalidateHash","logSpace","logSpaceMultiplier","depthTexture","tex","depthCutoff","setup","scope","type","pb","$builder","shaderKind","depthTex","tex2D","sampleType","uniform","float","multiplier","Error","Number","isInteger","blurMultiplyVec","vec3","vec2","numBlurPixelsPerSide","setUniforms","bindGroup","setValue","setTexture","filter","srcTex","srcUV","srcLayer","that","func","$l","depthValue","textureSample","uv","getDevice","$return","decodeNormalizedFloatFromRGBA","r","incrementalGaussian","x","div","mul","Math","sqrt","PI","y","exp","z","coefficientSum","minExpValue","vec4","d0","readTexel","avgValue","centerDepth","getLinearDepth","add","xy","yz","$for","uv1","sub","i","d1","depth1","test1","lessThan","abs","$if","uv2","d2","depth2","test2","min","outColor","log"],"mappings":";;;AAYA;;;IAIO,MAAMA,mBAA4BC,SAAAA,OAAAA,CAAAA;qBAEvC,MAA2C;qBAE3C,WAA8B;qBAE9B,MAAyB;qBAEzB,SAA4B;qBAE5B,SAA6B;qBAE7B,mBAAsC;qBAEtC,SAAyC;qBAEzC,YAA+B;AAC/B;;;;;;MAOA,WAAA,CAAYC,KAA+B,EAAEC,UAAkB,EAAEC,KAAa,EAAEC,QAAgB,CAAE;QAChG,KAAK,EAAA;QACL,IAAI,CAACC,MAAM,GAAGJ,KAAAA;QACd,IAAI,CAACK,WAAW,GAAGJ,UAAAA;QACnB,IAAI,CAACK,MAAM,GAAGJ,KAAAA;QACd,IAAI,CAACK,SAAS,GAAGJ,QAAAA;QACjB,IAAI,CAACK,SAAS,GAAG,KAAA;QACjB,IAAI,CAACC,mBAAmB,GAAG,CAAA;QAC3B,IAAI,CAACC,SAAS,GAAG,IAAA;QACjB,IAAI,CAACC,YAAY,GAAG,GAAA;AACtB;uBAEA,IAAIR,QAAW,GAAA;QACb,OAAO,IAAI,CAACI,SAAS;AACvB;IACA,IAAIJ,QAAAA,CAASS,GAAG,EAAE;QAChB,IAAI,CAACL,SAAS,GAAGK,GAAAA;AACnB;uBAEA,IAAIC,UAAa,GAAA;QACf,OAAO,IAAI,CAACR,WAAW;AACzB;IACA,IAAIQ,UAAAA,CAAWD,GAAG,EAAE;AAClB,QAAA,IAAI,IAAI,CAACP,WAAW,KAAKO,GAAK,EAAA;YAC5B,IAAI,CAACP,WAAW,GAAGO,GAAAA;AACnB,YAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACF;uEAEA,IAAIC,QAAW,GAAA;QACb,OAAO,IAAI,CAACP,SAAS;AACvB;IACA,IAAIO,QAAAA,CAASH,GAAG,EAAE;AAChB,QAAA,IAAI,IAAI,CAACJ,SAAS,KAAK,CAAC,CAACI,GAAK,EAAA;AAC5B,YAAA,IAAI,CAACJ,SAAS,GAAG,CAAC,CAACI,GAAAA;AACnB,YAAA,IAAI,CAACE,cAAc,EAAA;AACrB;AACF;iDAEA,IAAIE,kBAAqB,GAAA;QACvB,OAAO,IAAI,CAACP,mBAAmB;AACjC;IACA,IAAIO,kBAAAA,CAAmBJ,GAAG,EAAE;QAC1B,IAAI,CAACH,mBAAmB,GAAGG,GAAAA;AAC7B;gCAEA,IAAIK,YAAe,GAAA;QACjB,OAAO,IAAI,CAACP,SAAS;AACvB;IACA,IAAIO,YAAAA,CAAaC,GAAG,EAAE;AACpB,QAAA,IAAI,IAAI,CAACR,SAAS,KAAKQ,GAAK,EAAA;AAC1B,YAAA,IAAI,CAACA,GAAO,IAAA,CAAC,IAAI,CAACR,SAAS,EAAE;AAC3B,gBAAA,IAAI,CAACI,cAAc,EAAA;AACrB;YACA,IAAI,CAACJ,SAAS,GAAGQ,GAAAA;AACnB;AACF;wBAEA,IAAIC,WAAc,GAAA;QAChB,OAAO,IAAI,CAACR,YAAY;AAC1B;IACA,IAAIQ,WAAAA,CAAYP,GAAG,EAAE;QACnB,IAAI,CAACD,YAAY,GAAGC,GAAAA;AACtB;AACA;;;AAGC,MACDQ,KAAMC,CAAAA,KAAoB,EAAEC,IAAc,EAAE;QAC1C,MAAMC,EAAAA,GAAKF,MAAMG,QAAQ;QACzB,IAAID,EAAAA,CAAGE,UAAU,KAAK,UAAY,EAAA;YAChC,IAAI,IAAI,CAACf,SAAS,EAAE;gBAClBW,KAAMK,CAAAA,QAAQ,GAAGH,EAAGI,CAAAA,KAAK,GAAGC,UAAU,CAAC,oBAAsBC,CAAAA,CAAAA,OAAO,CAAC,CAAA,CAAA;AACrER,gBAAAA,KAAAA,CAAMF,WAAW,GAAGI,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AACzC;AACAR,YAAAA,KAAAA,CAAMnB,KAAK,GAAGqB,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AACjCR,YAAAA,KAAAA,CAAMlB,QAAQ,GAAGoB,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;YACpC,IAAI,IAAI,CAACrB,SAAS,IAAI,IAAI,CAACJ,MAAM,KAAK,WAAa,EAAA;AACjDiB,gBAAAA,KAAAA,CAAMU,UAAU,GAAGR,EAAAA,CAAGO,KAAK,EAAA,CAAGD,OAAO,CAAC,CAAA,CAAA;AACxC;YACA,IAAI,IAAI,CAACzB,MAAM,KAAK,eAAe,IAAI,CAACA,MAAM,KAAK,UAAY,EAAA;gBAC7D,MAAM,IAAI4B,MAAM,CAAC,wDAAwD,EAAE,IAAI,CAAC5B,MAAM,CAAE,CAAA,CAAA;AAC1F;YACA,IAAI,CAAC6B,OAAOC,SAAS,CAAC,IAAI,CAAC7B,WAAW,KAAK,IAAI,CAACA,WAAW,GAAG,CAAA,IAAK,CAAC,IAAI,CAACA,WAAW,GAAG,CAAA,MAAO,CAAG,EAAA;gBAC/F,MAAM,IAAI2B,MAAM,CAAC,8DAA8D,EAAE,IAAI,CAAC3B,WAAW,CAAE,CAAA,CAAA;AACrG;AACAgB,YAAAA,KAAAA,CAAMc,eAAe,GACnBb,IAAS,KAAA,MAAA,GACL,IAAI,CAAClB,MAAM,KAAK,WAAA,GACdmB,GAAGa,IAAI,CAAC,CAAG,EAAA,CAAA,EAAG,KACdb,EAAGa,CAAAA,IAAI,CAAC,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA,GAChB,IAAI,CAAChC,MAAM,KAAK,WAAA,GACdmB,EAAGc,CAAAA,IAAI,CAAC,CAAG,EAAA,CAAA,CAAA,GACXd,EAAGc,CAAAA,IAAI,CAAC,CAAG,EAAA,CAAA,CAAA;AACnBhB,YAAAA,KAAAA,CAAMiB,oBAAoB,GAAGf,EAAGO,CAAAA,KAAK,CAAE,CAAA,IAAI,CAACzB,WAAW,GAAG,CAAA,IAAK,CAAA,CAAA;AACjE;AACF;AACA;;;MAIAkC,WAAAA,CAAYC,SAAoB,EAAE;AAChCA,QAAAA,SAAAA,CAAUC,QAAQ,CAAC,OAAS,EAAA,IAAI,CAACnC,MAAM,CAAA;AACvCkC,QAAAA,SAAAA,CAAUC,QAAQ,CAAC,UAAY,EAAA,IAAI,CAAClC,SAAS,CAAA;QAC7C,IAAI,IAAI,CAACC,SAAS,IAAI,IAAI,CAACJ,MAAM,KAAK,WAAa,EAAA;AACjDoC,YAAAA,SAAAA,CAAUC,QAAQ,CAAC,YAAc,EAAA,IAAI,CAAChC,mBAAmB,CAAA;AAC3D;QACA,IAAI,IAAI,CAACC,SAAS,EAAE;AAClB8B,YAAAA,SAAAA,CAAUE,UAAU,CAAC,UAAY,EAAA,IAAI,CAAChC,SAAS,CAAA;AAC/C8B,YAAAA,SAAAA,CAAUC,QAAQ,CAAC,aAAe,EAAA,IAAI,CAAC9B,YAAY,CAAA;AACrD;AACF;AACA;;;AAGC,MACDgC,MACEtB,CAAAA,KAA4B,EAC5BC,IAAc,EACdsB,MAAmB,EACnBC,KAAkB,EAClBC,QAAqB,EACrBlB,UAAoC,EACpC;AACA,QAAA,MAAMmB,OAAO,IAAI;QACjB,MAAMxB,EAAAA,GAAKF,MAAMG,QAAQ;QACzB,IAAIuB,IAAAA,CAAKrC,SAAS,EAAE;YAClBa,EAAGyB,CAAAA,IAAI,CAAC,gBAAkB,EAAA;AAACzB,gBAAAA,EAAAA,CAAGc,IAAI,CAAC,IAAA;aAAM,EAAE,WAAA;AACzC,gBAAA,IAAI,CAACY,EAAE,CAACC,UAAU,GAAG3B,EAAG4B,CAAAA,aAAa,CAAC,IAAI,CAACzB,QAAQ,EAAE,IAAI,CAAC0B,EAAE,CAAA;AAC5D,gBAAA,IAAI7B,EAAG8B,CAAAA,SAAS,EAAG/B,CAAAA,IAAI,KAAK,OAAS,EAAA;oBACnC,IAAI,CAACgC,OAAO,CAACC,6BAAAA,CAA8B,IAAI,EAAE,IAAI,CAACL,UAAU,CAAA,CAAA;iBAC3D,MAAA;AACL,oBAAA,IAAI,CAACI,OAAO,CAAC,IAAI,CAACJ,UAAU,CAACM,CAAC,CAAA;AAChC;AACF,aAAA,CAAA;AACF;QACAnC,KAAMoC,CAAAA,mBAAmB,GAAGlC,EAAAA,CAAGa,IAAI,EAAA;AACnCf,QAAAA,KAAAA,CAAMoC,mBAAmB,CAACC,CAAC,GAAGnC,EAAGoC,CAAAA,GAAG,CAAC,CAAGpC,EAAAA,EAAAA,CAAGqC,GAAG,CAACvC,KAAAA,CAAMnB,KAAK,EAAE2D,IAAAA,CAAKC,IAAI,CAAC,CAAA,GAAID,KAAKE,EAAE,CAAA,CAAA,CAAA;AACjF1C,QAAAA,KAAAA,CAAMoC,mBAAmB,CAACO,CAAC,GAAGzC,EAAG0C,CAAAA,GAAG,CAAC1C,EAAGoC,CAAAA,GAAG,CAAC,IAAC,EAAKpC,GAAGqC,GAAG,CAACvC,MAAMnB,KAAK,EAAEmB,MAAMnB,KAAK,CAAA,CAAA,CAAA;AACjFmB,QAAAA,KAAAA,CAAMoC,mBAAmB,CAACS,CAAC,GAAG3C,GAAGqC,GAAG,CAACvC,KAAMoC,CAAAA,mBAAmB,CAACO,CAAC,EAAE3C,KAAMoC,CAAAA,mBAAmB,CAACO,CAAC,CAAA;AAC7F3C,QAAAA,KAAAA,CAAM8C,cAAc,GAAG5C,EAAGO,CAAAA,KAAK,CAAC,CAAA,CAAA;AAChCT,QAAAA,KAAAA,CAAM+C,WAAW,GAAG7C,EAAAA,CAAG8C,IAAI,CAAC,EAAA,EAAI,IAAI,EAAI,EAAA,EAAA,CAAA;QACxChD,KAAMiD,CAAAA,EAAE,GAAGvB,IAAKwB,CAAAA,SAAS,CAAClD,KAAOC,EAAAA,IAAAA,EAAMsB,MAAQC,EAAAA,KAAAA,EAAOC,QAAUlB,EAAAA,UAAAA,CAAAA;QAChE,IAAImB,IAAAA,CAAKvC,SAAS,EAAE;YAClBa,KAAMmD,CAAAA,QAAQ,GAAGjD,EAAG8C,CAAAA,IAAI,CAAChD,KAAMoC,CAAAA,mBAAmB,CAACC,CAAC,CAAA;SAC/C,MAAA;AACLrC,YAAAA,KAAAA,CAAMmD,QAAQ,GAAGjD,EAAAA,CAAGqC,GAAG,CACrBb,KAAKwB,SAAS,CAAClD,KAAOC,EAAAA,IAAAA,EAAMsB,QAAQC,KAAOC,EAAAA,QAAAA,EAAUlB,aACrDP,KAAMoC,CAAAA,mBAAmB,CAACC,CAAC,CAAA;AAE/B;QACA,IAAIX,IAAAA,CAAKrC,SAAS,EAAE;AAClBW,YAAAA,KAAAA,CAAMoD,WAAW,GAAGpD,KAAMqD,CAAAA,cAAc,CAAC7B,KAAAA,CAAAA;AAC3C;QACAxB,KAAM8C,CAAAA,cAAc,GAAG5C,EAAAA,CAAGoD,GAAG,CAACtD,KAAM8C,CAAAA,cAAc,EAAE9C,KAAAA,CAAMoC,mBAAmB,CAACC,CAAC,CAAA;QAC/ErC,KAAMoC,CAAAA,mBAAmB,GAAGlC,EAAGa,CAAAA,IAAI,CACjCb,EAAGqC,CAAAA,GAAG,CAACvC,KAAMoC,CAAAA,mBAAmB,CAACmB,EAAE,EAAEvD,MAAMoC,mBAAmB,CAACoB,EAAE,CACjExD,EAAAA,KAAAA,CAAMoC,mBAAmB,CAACS,CAAC,CAAA;QAE7B7C,KAAMyD,CAAAA,IAAI,CAACvD,EAAGO,CAAAA,KAAK,CAAC,GAAM,CAAA,EAAA,CAAA,EAAGT,KAAMiB,CAAAA,oBAAoB,EAAE,WAAA;YACvD,IAAI,CAACW,EAAE,CAAC8B,GAAG,GAAGxD,EAAGyD,CAAAA,GAAG,CAACnC,KAAAA,EAAOtB,EAAGqC,CAAAA,GAAG,CAAC,IAAI,CAACzB,eAAe,EAAE,IAAI,CAAChC,QAAQ,EAAE,IAAI,CAAC8E,CAAC,CAAA,CAAA;AAC9E,YAAA,IAAI,CAAChC,EAAE,CAACiC,EAAE,GAAG3D,GAAG8C,IAAI,EAAA;YACpB,IAAItB,IAAAA,CAAKrC,SAAS,EAAE;gBAClB,IAAI,CAACuC,EAAE,CAACkC,MAAM,GAAG,IAAI,CAACT,cAAc,CAAC,IAAI,CAACK,GAAG,CAAA;gBAC7C,IAAI,CAAC9B,EAAE,CAACmC,KAAK,GAAG7D,GAAG8D,QAAQ,CAAC9D,EAAG+D,CAAAA,GAAG,CAAC/D,EAAAA,CAAGyD,GAAG,CAAC,IAAI,CAACG,MAAM,EAAE,IAAI,CAACV,WAAW,CAAA,CAAA,EAAI,IAAI,CAACtD,WAAW,CAAA;aACtF,MAAA;AACL,gBAAA,IAAI,CAAC8B,EAAE,CAACmC,KAAK,GAAG,IAAA;AAClB;AACA,YAAA,IAAI,CAACG,GAAG,CAAC,IAAI,CAACH,KAAK,EAAE,WAAA;AACnB,gBAAA,IAAI,CAACF,EAAE,GAAGnC,IAAAA,CAAKwB,SAAS,CAAClD,KAAOC,EAAAA,IAAAA,EAAMsB,MAAQ,EAAA,IAAI,CAACmC,GAAG,EAAEjC,QAAUlB,EAAAA,UAAAA,CAAAA;AACpE,aAAA,CAAA;YACA,IAAI,CAACqB,EAAE,CAACuC,GAAG,GAAGjE,EAAGoD,CAAAA,GAAG,CAAC9B,KAAAA,EAAOtB,EAAGqC,CAAAA,GAAG,CAAC,IAAI,CAACzB,eAAe,EAAE,IAAI,CAAChC,QAAQ,EAAE,IAAI,CAAC8E,CAAC,CAAA,CAAA;AAC9E,YAAA,IAAI,CAAChC,EAAE,CAACwC,EAAE,GAAGlE,GAAG8C,IAAI,EAAA;YACpB,IAAItB,IAAAA,CAAKrC,SAAS,EAAE;gBAClB,IAAI,CAACuC,EAAE,CAACyC,MAAM,GAAG,IAAI,CAAChB,cAAc,CAAC,IAAI,CAACc,GAAG,CAAA;gBAC7C,IAAI,CAACvC,EAAE,CAAC0C,KAAK,GAAGpE,GAAG8D,QAAQ,CAAC9D,EAAG+D,CAAAA,GAAG,CAAC/D,EAAAA,CAAGyD,GAAG,CAAC,IAAI,CAACU,MAAM,EAAE,IAAI,CAACjB,WAAW,CAAA,CAAA,EAAI,IAAI,CAACtD,WAAW,CAAA;aACtF,MAAA;AACL,gBAAA,IAAI,CAAC8B,EAAE,CAAC0C,KAAK,GAAG,IAAA;AAClB;AACA,YAAA,IAAI,CAACJ,GAAG,CAAC,IAAI,CAACI,KAAK,EAAE,WAAA;AACnB,gBAAA,IAAI,CAACF,EAAE,GAAG1C,IAAAA,CAAKwB,SAAS,CACtBlD,KACAC,EAAAA,IAAAA,EACAsB,MACArB,EAAAA,EAAAA,CAAGoD,GAAG,CAAC9B,KAAOtB,EAAAA,EAAAA,CAAGqC,GAAG,CAAC,IAAI,CAACzB,eAAe,EAAE,IAAI,CAAChC,QAAQ,EAAE,IAAI,CAAC8E,CAAC,CAAA,CAAA,EAChEnC,QACAlB,EAAAA,UAAAA,CAAAA;AAEJ,aAAA,CAAA;YACA,IAAImB,IAAAA,CAAKvC,SAAS,EAAE;gBAClB,IAAIuC,IAAAA,CAAK3C,MAAM,KAAK,WAAa,EAAA;AAC/B,oBAAA,IAAI,CAACmF,GAAG,CAAC,IAAI,CAACH,KAAK,EAAE,WAAA;wBACnB,IAAI,CAACZ,QAAQ,GAAGjD,EAAAA,CAAGoD,GAAG,CACpB,IAAI,CAACH,QAAQ,EACbjD,GAAGqC,GAAG,CACJrC,GAAG0C,GAAG,CAAC1C,GAAGqE,GAAG,CAAC,IAAI,CAACxB,WAAW,EAAE7C,EAAGqC,CAAAA,GAAG,CAACrC,EAAGyD,CAAAA,GAAG,CAAC,IAAI,CAACE,EAAE,EAAE,IAAI,CAACZ,EAAE,CAAA,EAAG,IAAI,CAACvC,UAAU,KAChF,IAAI,CAAC0B,mBAAmB,CAACC,CAAC,CAAA,CAAA;AAG9B,wBAAA,IAAI,CAACS,cAAc,GAAG5C,EAAAA,CAAGoD,GAAG,CAAC,IAAI,CAACR,cAAc,EAAE,IAAI,CAACV,mBAAmB,CAACC,CAAC,CAAA;AAC9E,qBAAA,CAAA;AACA,oBAAA,IAAI,CAAC6B,GAAG,CAAC,IAAI,CAACI,KAAK,EAAE,WAAA;wBACnB,IAAI,CAACnB,QAAQ,GAAGjD,EAAAA,CAAGoD,GAAG,CACpB,IAAI,CAACH,QAAQ,EACbjD,GAAGqC,GAAG,CACJrC,GAAG0C,GAAG,CAAC1C,GAAGqE,GAAG,CAAC,IAAI,CAACxB,WAAW,EAAE7C,EAAGqC,CAAAA,GAAG,CAACrC,EAAGyD,CAAAA,GAAG,CAAC,IAAI,CAACS,EAAE,EAAE,IAAI,CAACnB,EAAE,CAAA,EAAG,IAAI,CAACvC,UAAU,KAChF,IAAI,CAAC0B,mBAAmB,CAACC,CAAC,CAAA,CAAA;AAG9B,wBAAA,IAAI,CAACS,cAAc,GAAG5C,EAAAA,CAAGoD,GAAG,CAAC,IAAI,CAACR,cAAc,EAAE,IAAI,CAACV,mBAAmB,CAACC,CAAC,CAAA;AAC9E,qBAAA,CAAA;iBACK,MAAA;AACL,oBAAA,IAAI,CAAC6B,GAAG,CAAC,IAAI,CAACH,KAAK,EAAE,WAAA;AACnB,wBAAA,IAAI,CAACZ,QAAQ,GAAGjD,EAAGoD,CAAAA,GAAG,CACpB,IAAI,CAACH,QAAQ,EACbjD,GAAGqC,GAAG,CAACrC,GAAG0C,GAAG,CAAC1C,GAAGqE,GAAG,CAAC,IAAI,CAACxB,WAAW,EAAE7C,EAAAA,CAAGyD,GAAG,CAAC,IAAI,CAACE,EAAE,EAAE,IAAI,CAACZ,EAAE,CAAA,CAAA,CAAA,EAAK,IAAI,CAACb,mBAAmB,CAACC,CAAC,CAAA,CAAA;AAE/F,wBAAA,IAAI,CAACS,cAAc,GAAG5C,EAAAA,CAAGoD,GAAG,CAAC,IAAI,CAACR,cAAc,EAAE,IAAI,CAACV,mBAAmB,CAACC,CAAC,CAAA;AAC9E,qBAAA,CAAA;AACA,oBAAA,IAAI,CAAC6B,GAAG,CAAC,IAAI,CAACI,KAAK,EAAE,WAAA;AACnB,wBAAA,IAAI,CAACnB,QAAQ,GAAGjD,EAAGoD,CAAAA,GAAG,CACpB,IAAI,CAACH,QAAQ,EACbjD,GAAGqC,GAAG,CAACrC,GAAG0C,GAAG,CAAC1C,GAAGqE,GAAG,CAAC,IAAI,CAACxB,WAAW,EAAE7C,EAAAA,CAAGyD,GAAG,CAAC,IAAI,CAACS,EAAE,EAAE,IAAI,CAACnB,EAAE,CAAA,CAAA,CAAA,EAAK,IAAI,CAACb,mBAAmB,CAACC,CAAC,CAAA,CAAA;AAE/F,wBAAA,IAAI,CAACS,cAAc,GAAG5C,EAAAA,CAAGoD,GAAG,CAAC,IAAI,CAACR,cAAc,EAAE,IAAI,CAACV,mBAAmB,CAACC,CAAC,CAAA;AAC9E,qBAAA,CAAA;AACF;aACK,MAAA;AACL,gBAAA,IAAI,CAAC6B,GAAG,CAAC,IAAI,CAACH,KAAK,EAAE,WAAA;oBACnB,IAAI,CAACZ,QAAQ,GAAGjD,EAAAA,CAAGoD,GAAG,CAAC,IAAI,CAACH,QAAQ,EAAEjD,GAAGqC,GAAG,CAAC,IAAI,CAACsB,EAAE,EAAE,IAAI,CAACzB,mBAAmB,CAACC,CAAC,CAAA,CAAA;AAChF,oBAAA,IAAI,CAACS,cAAc,GAAG5C,EAAAA,CAAGoD,GAAG,CAAC,IAAI,CAACR,cAAc,EAAE,IAAI,CAACV,mBAAmB,CAACC,CAAC,CAAA;AAC9E,iBAAA,CAAA;AACA,gBAAA,IAAI,CAAC6B,GAAG,CAAC,IAAI,CAACI,KAAK,EAAE,WAAA;oBACnB,IAAI,CAACnB,QAAQ,GAAGjD,EAAAA,CAAGoD,GAAG,CAAC,IAAI,CAACH,QAAQ,EAAEjD,GAAGqC,GAAG,CAAC,IAAI,CAAC6B,EAAE,EAAE,IAAI,CAAChC,mBAAmB,CAACC,CAAC,CAAA,CAAA;AAChF,oBAAA,IAAI,CAACS,cAAc,GAAG5C,EAAAA,CAAGoD,GAAG,CAAC,IAAI,CAACR,cAAc,EAAE,IAAI,CAACV,mBAAmB,CAACC,CAAC,CAAA;AAC9E,iBAAA,CAAA;AACF;YACA,IAAI,CAACD,mBAAmB,GAAGlC,EAAGa,CAAAA,IAAI,CAChCb,EAAGqC,CAAAA,GAAG,CAAC,IAAI,CAACH,mBAAmB,CAACmB,EAAE,EAAE,IAAI,CAACnB,mBAAmB,CAACoB,EAAE,CAAA,EAC/D,IAAI,CAACpB,mBAAmB,CAACS,CAAC,CAAA;AAE9B,SAAA,CAAA;QACA7C,KAAM4B,CAAAA,EAAE,CAAC4C,QAAQ,GAAGtE,EAAAA,CAAGoC,GAAG,CAACtC,KAAMmD,CAAAA,QAAQ,EAAEnD,KAAAA,CAAM8C,cAAc,CAAA;QAC/D,IAAIpB,IAAAA,CAAKvC,SAAS,EAAE;YAClB,IAAIuC,IAAAA,CAAK3C,MAAM,KAAK,WAAa,EAAA;AAC/BiB,gBAAAA,KAAAA,CAAMwE,QAAQ,GAAGtE,EAAAA,CAAGoD,GAAG,CAACpD,EAAAA,CAAGqC,GAAG,CAACvC,KAAAA,CAAMU,UAAU,EAAEV,MAAMiD,EAAE,CAAA,EAAG/C,GAAGuE,GAAG,CAACzE,MAAMwE,QAAQ,CAAA,CAAA;aAC5E,MAAA;AACLxE,gBAAAA,KAAAA,CAAMwE,QAAQ,GAAGtE,EAAGoD,CAAAA,GAAG,CAACtD,KAAAA,CAAMiD,EAAE,EAAE/C,EAAGuE,CAAAA,GAAG,CAACzE,KAAAA,CAAMwE,QAAQ,CAAA,CAAA;AACzD;AACF;AACA,QAAA,OAAOxE,MAAMwE,QAAQ;AACvB;AACA;;;AAGC,MACD,QAAqB,GAAA;QACnB,OAAO,CAAA,EAAG,IAAI,CAACnF,SAAS,GAAG,CAAI,GAAA,CAAA,CAAE,CAAC,EAAE,IAAI,CAACN,MAAM,CAAC,CAAC,EAAE,IAAI,CAACC,WAAW,CAAC,CAAC,EAAE4B,MAAO,CAAA,CAAC,CAAC,IAAI,CAACzB,SAAS,CAAG,CAAA,CAAA;AACnG;AACF;;;;"}
|
package/dist/camera/base.js
CHANGED
|
@@ -47,7 +47,6 @@
|
|
|
47
47
|
* Get the attached camera.
|
|
48
48
|
*
|
|
49
49
|
* @returns The current camera or `null` if none is attached.
|
|
50
|
-
* @internal
|
|
51
50
|
*/ _getCamera() {
|
|
52
51
|
return this._camera;
|
|
53
52
|
}
|
|
@@ -58,7 +57,6 @@
|
|
|
58
57
|
* reinitialize state that depends on the camera.
|
|
59
58
|
*
|
|
60
59
|
* @param camera - The camera to attach.
|
|
61
|
-
* @internal
|
|
62
60
|
*/ _setCamera(camera) {
|
|
63
61
|
if (this._camera !== camera) {
|
|
64
62
|
this._camera = camera;
|
|
@@ -72,7 +70,7 @@
|
|
|
72
70
|
* @param to - Look-at target.
|
|
73
71
|
* @param up - Up direction.
|
|
74
72
|
*/ lookAt(from, to, up) {
|
|
75
|
-
this._camera
|
|
73
|
+
this._camera?.lookAt(from, to, up);
|
|
76
74
|
}
|
|
77
75
|
/**
|
|
78
76
|
* Reset the controller's internal state.
|
package/dist/camera/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sources":["../../src/camera/base.ts"],"sourcesContent":["import type { Vector3 } from '@zephyr3d/base';\r\nimport type { Camera } from './camera';\r\n\r\n/**\r\n * Base structure for all controller events.\r\n *\r\n * Represents a typed event emitted or handled by a camera controller.\r\n *\r\n * @public\r\n */\r\nexport interface IBaseEvent<T extends string> {\r\n /** Event type identifier. */\r\n type: T;\r\n /**\r\n * Optional method to cancel the default event behavior.\r\n * May be provided by the event source.\r\n */\r\n preventDefault?: () => void;\r\n}\r\n\r\n/**\r\n * Standard modifier key set for mouse/keyboard events.\r\n *\r\n * Encapsulates common modifier keys such as Ctrl, Alt, Shift, and Meta.\r\n *\r\n * @public\r\n */\r\nexport interface IModKey {\r\n /** Whether the Control key is pressed. */\r\n readonly ctrlKey: boolean;\r\n /** Whether the Meta (Command on macOS) key is pressed. */\r\n readonly metaKey: boolean;\r\n /** Whether the Shift key is pressed. */\r\n readonly shiftKey: boolean;\r\n /** Whether the Alt/Option key is pressed. */\r\n readonly altKey: boolean;\r\n}\r\n\r\n/**\r\n * Base interface for all controller mouse and pointer events.\r\n *\r\n * Extends the base event with positional and button information, as well as modifier keys.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerMouseEvent<T extends string> extends IBaseEvent<T>, IModKey {\r\n /** Pointer offset along the X-axis, typically relative to the event target. */\r\n readonly offsetX: number;\r\n /** Pointer offset along the Y-axis, typically relative to the event target. */\r\n readonly offsetY: number;\r\n /** Mouse button index: `0` for left, `1` for middle, `2` for right, etc. */\r\n readonly button: number;\r\n}\r\n\r\n/**\r\n * Pointer down event for camera controllers.\r\n *\r\n * Triggered when a mouse, pen, or touch pointer is pressed down.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerPointerDownEvent extends IControllerMouseEvent<'pointerdown'> {}\r\n\r\n/**\r\n * Pointer up event for camera controllers.\r\n *\r\n * Triggered when a mouse, pen, or touch pointer is released.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerPointerUpEvent extends IControllerMouseEvent<'pointerup'> {}\r\n\r\n/**\r\n * Pointer move event for camera controllers.\r\n *\r\n * Triggered when the pointer (mouse, pen, or touch) moves across the viewport.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerPointerMoveEvent extends IControllerMouseEvent<'pointermove'> {}\r\n\r\n/**\r\n * Pointer cancel event for camera controllers.\r\n *\r\n * Triggered when the pointer operation is canceled (e.g., touch canceled, system interruption).\r\n *\r\n * @public\r\n */\r\nexport interface IControllerPointerCancelEvent extends IControllerMouseEvent<'pointercancel'> {}\r\n\r\n/**\r\n * Wheel (scroll) event for camera controllers.\r\n *\r\n * Extends a mouse event with wheel delta values for scroll-based input (e.g., zoom).\r\n *\r\n * @public\r\n */\r\nexport interface IControllerWheelEvent extends IControllerMouseEvent<'wheel'> {\r\n /** Horizontal wheel scroll delta. */\r\n readonly deltaX: number;\r\n /** Vertical wheel scroll delta. */\r\n readonly deltaY: number;\r\n}\r\n\r\n/**\r\n * Base interface for all controller keyboard events.\r\n *\r\n * Provides key identification along with standard modifier flags.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerKeyboardEvent<T extends string> extends IBaseEvent<T>, IModKey {\r\n /** key code */\r\n readonly code: string;\r\n /** Character value */\r\n readonly key: string;\r\n}\r\n\r\n/**\r\n * Key down event for camera controllers.\r\n *\r\n * Triggered when a keyboard key is pressed down.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerKeydownEvent extends IControllerKeyboardEvent<'keydown'> {}\r\n\r\n/**\r\n * Key up event for camera controllers.\r\n *\r\n * Triggered when a keyboard key is released.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerKeyupEvent extends IControllerKeyboardEvent<'keyup'> {}\r\n\r\n/**\r\n * Key press event for camera controllers.\r\n *\r\n * Triggered when a key is pressed and generates a character value (legacy usage).\r\n *\r\n * @public\r\n */\r\nexport interface IControllerKeypressEvent extends IControllerKeyboardEvent<'keypress'> {}\r\n\r\n/**\r\n * Base class for camera controllers.\r\n *\r\n * Provides a common lifecycle and event-handling surface for concrete camera controllers\r\n * (e.g., orbit, fly, FPS). Subclasses implement protected handler methods to react to\r\n * mouse/keyboard input, and update camera transforms in `update()`.\r\n *\r\n * Responsibilities:\r\n * - Holds a reference to a `Camera` and resets internal state when the camera changes.\r\n * - Offers a `lookAt(from, to, up)` helper that delegates to the camera.\r\n * - Exposes public event entry points (`onMouseDown`, `onMouseUp`, `onMouseMove`,\r\n * `onMouseWheel`, `onKeyDown`, `onKeyUp`) that forward to protected handlers which\r\n * subclasses can override.\r\n * - Defines `reset()` and `update()` lifecycle methods for state initialization and per-frame updates.\r\n *\r\n * Event handling contract:\r\n * - Each public `onXxx` method returns a boolean that indicates whether the event\r\n * was handled by the controller. Returning `true` allows upstream dispatchers to\r\n * stop propagation if desired.\r\n *\r\n * Subclassing guidelines:\r\n * - Override the protected `_onXxx` handlers rather than the public `onXxx` methods.\r\n * - Override `reset()` to reinitialize controller state when a new camera is attached.\r\n * - Override `update()` to advance state each frame (e.g., apply accumulated deltas with damping).\r\n *\r\n * Lifecycle:\r\n * 1. A camera is attached via internal `_setCamera(camera)`, which calls `reset()`.\r\n * 2. Input events are passed in through the public `onXxx` methods.\r\n * 3. Per-frame, `update()` is called to apply state changes to the camera.\r\n *\r\n * Thread-safety/assumptions:\r\n * - Designed for use on the main thread in a browser environment.\r\n * - Pointer events are used for mouse input; keyboard events for key input.\r\n *\r\n * @public\r\n */\r\nexport class BaseCameraController {\r\n /** @internal */\r\n private _camera: Camera;\r\n /**\r\n * Create a base camera controller.\r\n *\r\n * The controller starts without an attached camera. Call the internal `_setCamera`\r\n * to attach a camera (performed by the owning system), which triggers `reset()`.\r\n */\r\n constructor() {\r\n this._camera = null;\r\n }\r\n /**\r\n * Get the attached camera.\r\n *\r\n * @returns The current camera or `null` if none is attached.\r\n * @internal\r\n */\r\n _getCamera() {\r\n return this._camera;\r\n }\r\n /**\r\n * Attach a camera to the controller.\r\n *\r\n * If the camera changes, the controller will call `reset()` so subclasses can\r\n * reinitialize state that depends on the camera.\r\n *\r\n * @param camera - The camera to attach.\r\n * @internal\r\n */\r\n _setCamera(camera: Camera) {\r\n if (this._camera !== camera) {\r\n this._camera = camera;\r\n this.reset();\r\n }\r\n }\r\n /**\r\n * Convenience method that delegates to `camera.lookAt`.\r\n *\r\n * @param from - Camera position.\r\n * @param to - Look-at target.\r\n * @param up - Up direction.\r\n */\r\n lookAt(from: Vector3, to: Vector3, up: Vector3) {\r\n this._camera.lookAt(from, to, up);\r\n }\r\n /**\r\n * Reset the controller's internal state.\r\n *\r\n * Called automatically when a camera is attached via `_setCamera`. Subclasses\r\n * should override this to reset accumulators, velocities, targets, etc.\r\n */\r\n reset(): void {}\r\n /**\r\n * Handle pointer down (mouse/touch/pen) events.\r\n *\r\n * @param evt - The pointer event.\r\n * @returns `true` if handled and should stop further processing; otherwise `false`.\r\n */\r\n onMouseDown(evt: IControllerPointerDownEvent): boolean {\r\n return this._onMouseDown(evt);\r\n }\r\n /**\r\n * Handle pointer up events.\r\n *\r\n * @param evt - The pointer event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onMouseUp(evt: IControllerPointerUpEvent): boolean {\r\n return this._onMouseUp(evt);\r\n }\r\n /**\r\n * Handle mouse wheel (scroll) events.\r\n *\r\n * Typical usage: zoom/dolly control, FOV adjustments.\r\n *\r\n * @param evt - The wheel event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onMouseWheel(evt: IControllerWheelEvent): boolean {\r\n return this._onMouseWheel(evt);\r\n }\r\n /**\r\n * Handle pointer move events.\r\n *\r\n * Typical usage: orbit, pan, or look controls based on button/modifier state.\r\n *\r\n * @param evt - The pointer event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onMouseMove(evt: IControllerPointerMoveEvent): boolean {\r\n return this._onMouseMove(evt);\r\n }\r\n /**\r\n * Handle key down events.\r\n *\r\n * Typical usage: WASD navigation, modifiers for speed, toggling modes.\r\n *\r\n * @param evt - The keyboard event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onKeyDown(evt: IControllerKeydownEvent): boolean {\r\n return this._onKeyDown(evt);\r\n }\r\n /**\r\n * Handle key up events.\r\n *\r\n * @param evt - The keyboard event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onKeyUp(evt: IControllerKeyupEvent): boolean {\r\n return this._onKeyUp(evt);\r\n }\r\n /**\r\n * Per-frame update.\r\n *\r\n * Subclasses should override this to:\r\n * - Integrate velocities/accelerations and apply damping.\r\n * - Smoothly interpolate camera transforms.\r\n * - Clamp angles/distances/FOV, etc.\r\n *\r\n * Called once per frame by the owning system.\r\n */\r\n update(): void {}\r\n /**\r\n * Mouse down event handler\r\n * @param evt - Mouse event\r\n * @returns Boolean value indices whether this event was handled\r\n */\r\n protected _onMouseDown(_evt: IControllerPointerDownEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Pointer up handler for subclasses to override.\r\n *\r\n * @param _evt - Pointer event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onMouseUp(_evt: IControllerPointerUpEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Mouse wheel handler for subclasses to override.\r\n *\r\n * @param _evt - Wheel event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onMouseWheel(_evt: IControllerWheelEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Pointer move handler for subclasses to override.\r\n *\r\n * @param _evt - Pointer event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onMouseMove(_evt: IControllerPointerMoveEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Key down handler for subclasses to override.\r\n *\r\n * @param _evt - Keyboard event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onKeyDown(_evt: IControllerKeydownEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Key up handler for subclasses to override.\r\n *\r\n * @param _evt - Keyboard event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onKeyUp(_evt: IControllerKeyupEvent): boolean {\r\n return false;\r\n }\r\n}\r\n"],"names":["BaseCameraController","_camera","_getCamera","_setCamera","camera","reset","lookAt","from","to","up","onMouseDown","evt","_onMouseDown","onMouseUp","_onMouseUp","onMouseWheel","_onMouseWheel","onMouseMove","_onMouseMove","onKeyDown","_onKeyDown","onKeyUp","_onKeyUp","update","_evt"],"mappings":"AAiJA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCC,IACM,MAAMA,oBAAAA,CAAAA;qBAEX,OAAwB;AACxB;;;;;AAKC,MACD,WAAc,EAAA;QACZ,IAAI,CAACC,OAAO,GAAG,IAAA;AACjB;AACA;;;;;AAKC,MACDC,UAAa,GAAA;QACX,OAAO,IAAI,CAACD,OAAO;AACrB;AACA;;;;;;;;MASAE,UAAAA,CAAWC,MAAc,EAAE;AACzB,QAAA,IAAI,IAAI,CAACH,OAAO,KAAKG,MAAQ,EAAA;YAC3B,IAAI,CAACH,OAAO,GAAGG,MAAAA;AACf,YAAA,IAAI,CAACC,KAAK,EAAA;AACZ;AACF;AACA;;;;;;AAMC,MACDC,OAAOC,IAAa,EAAEC,EAAW,EAAEC,EAAW,EAAE;AAC9C,QAAA,IAAI,CAACR,OAAO,CAACK,MAAM,CAACC,MAAMC,EAAIC,EAAAA,EAAAA,CAAAA;AAChC;AACA;;;;;AAKC,MACDJ,QAAc;AACd;;;;;MAMAK,WAAAA,CAAYC,GAAgC,EAAW;QACrD,OAAO,IAAI,CAACC,YAAY,CAACD,GAAAA,CAAAA;AAC3B;AACA;;;;;MAMAE,SAAAA,CAAUF,GAA8B,EAAW;QACjD,OAAO,IAAI,CAACG,UAAU,CAACH,GAAAA,CAAAA;AACzB;AACA;;;;;;;MAQAI,YAAAA,CAAaJ,GAA0B,EAAW;QAChD,OAAO,IAAI,CAACK,aAAa,CAACL,GAAAA,CAAAA;AAC5B;AACA;;;;;;;MAQAM,WAAAA,CAAYN,GAAgC,EAAW;QACrD,OAAO,IAAI,CAACO,YAAY,CAACP,GAAAA,CAAAA;AAC3B;AACA;;;;;;;MAQAQ,SAAAA,CAAUR,GAA4B,EAAW;QAC/C,OAAO,IAAI,CAACS,UAAU,CAACT,GAAAA,CAAAA;AACzB;AACA;;;;;MAMAU,OAAAA,CAAQV,GAA0B,EAAW;QAC3C,OAAO,IAAI,CAACW,QAAQ,CAACX,GAAAA,CAAAA;AACvB;AACA;;;;;;;;;AASC,MACDY,SAAe;AACf;;;;MAKUX,YAAaY,CAAAA,IAAiC,EAAW;QACjE,OAAO,KAAA;AACT;AACA;;;;;MAMUV,UAAWU,CAAAA,IAA+B,EAAW;QAC7D,OAAO,KAAA;AACT;AACA;;;;;MAMUR,aAAcQ,CAAAA,IAA2B,EAAW;QAC5D,OAAO,KAAA;AACT;AACA;;;;;MAMUN,YAAaM,CAAAA,IAAiC,EAAW;QACjE,OAAO,KAAA;AACT;AACA;;;;;MAMUJ,UAAWI,CAAAA,IAA6B,EAAW;QAC3D,OAAO,KAAA;AACT;AACA;;;;;MAMUF,QAASE,CAAAA,IAA2B,EAAW;QACvD,OAAO,KAAA;AACT;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"base.js","sources":["../../src/camera/base.ts"],"sourcesContent":["import type { Nullable, Vector3 } from '@zephyr3d/base';\r\nimport type { Camera } from './camera';\r\n\r\n/**\r\n * Base structure for all controller events.\r\n *\r\n * Represents a typed event emitted or handled by a camera controller.\r\n *\r\n * @public\r\n */\r\nexport interface IBaseEvent<T extends string> {\r\n /** Event type identifier. */\r\n type: T;\r\n /**\r\n * Optional method to cancel the default event behavior.\r\n * May be provided by the event source.\r\n */\r\n preventDefault?: () => void;\r\n}\r\n\r\n/**\r\n * Standard modifier key set for mouse/keyboard events.\r\n *\r\n * Encapsulates common modifier keys such as Ctrl, Alt, Shift, and Meta.\r\n *\r\n * @public\r\n */\r\nexport interface IModKey {\r\n /** Whether the Control key is pressed. */\r\n readonly ctrlKey: boolean;\r\n /** Whether the Meta (Command on macOS) key is pressed. */\r\n readonly metaKey: boolean;\r\n /** Whether the Shift key is pressed. */\r\n readonly shiftKey: boolean;\r\n /** Whether the Alt/Option key is pressed. */\r\n readonly altKey: boolean;\r\n}\r\n\r\n/**\r\n * Base interface for all controller mouse and pointer events.\r\n *\r\n * Extends the base event with positional and button information, as well as modifier keys.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerMouseEvent<T extends string> extends IBaseEvent<T>, IModKey {\r\n /** Pointer offset along the X-axis, typically relative to the event target. */\r\n readonly offsetX: number;\r\n /** Pointer offset along the Y-axis, typically relative to the event target. */\r\n readonly offsetY: number;\r\n /** Mouse button index: `0` for left, `1` for middle, `2` for right, etc. */\r\n readonly button: number;\r\n}\r\n\r\n/**\r\n * Pointer down event for camera controllers.\r\n *\r\n * Triggered when a mouse, pen, or touch pointer is pressed down.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerPointerDownEvent extends IControllerMouseEvent<'pointerdown'> {}\r\n\r\n/**\r\n * Pointer up event for camera controllers.\r\n *\r\n * Triggered when a mouse, pen, or touch pointer is released.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerPointerUpEvent extends IControllerMouseEvent<'pointerup'> {}\r\n\r\n/**\r\n * Pointer move event for camera controllers.\r\n *\r\n * Triggered when the pointer (mouse, pen, or touch) moves across the viewport.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerPointerMoveEvent extends IControllerMouseEvent<'pointermove'> {}\r\n\r\n/**\r\n * Pointer cancel event for camera controllers.\r\n *\r\n * Triggered when the pointer operation is canceled (e.g., touch canceled, system interruption).\r\n *\r\n * @public\r\n */\r\nexport interface IControllerPointerCancelEvent extends IControllerMouseEvent<'pointercancel'> {}\r\n\r\n/**\r\n * Wheel (scroll) event for camera controllers.\r\n *\r\n * Extends a mouse event with wheel delta values for scroll-based input (e.g., zoom).\r\n *\r\n * @public\r\n */\r\nexport interface IControllerWheelEvent extends IControllerMouseEvent<'wheel'> {\r\n /** Horizontal wheel scroll delta. */\r\n readonly deltaX: number;\r\n /** Vertical wheel scroll delta. */\r\n readonly deltaY: number;\r\n /** Delta mode */\r\n readonly deltaMode: number;\r\n}\r\n\r\n/**\r\n * Base interface for all controller keyboard events.\r\n *\r\n * Provides key identification along with standard modifier flags.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerKeyboardEvent<T extends string> extends IBaseEvent<T>, IModKey {\r\n /** key code */\r\n readonly code: string;\r\n /** Character value */\r\n readonly key: string;\r\n}\r\n\r\n/**\r\n * Key down event for camera controllers.\r\n *\r\n * Triggered when a keyboard key is pressed down.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerKeydownEvent extends IControllerKeyboardEvent<'keydown'> {}\r\n\r\n/**\r\n * Key up event for camera controllers.\r\n *\r\n * Triggered when a keyboard key is released.\r\n *\r\n * @public\r\n */\r\nexport interface IControllerKeyupEvent extends IControllerKeyboardEvent<'keyup'> {}\r\n\r\n/**\r\n * Key press event for camera controllers.\r\n *\r\n * Triggered when a key is pressed and generates a character value (legacy usage).\r\n *\r\n * @public\r\n */\r\nexport interface IControllerKeypressEvent extends IControllerKeyboardEvent<'keypress'> {}\r\n\r\n/**\r\n * Base class for camera controllers.\r\n *\r\n * Provides a common lifecycle and event-handling surface for concrete camera controllers\r\n * (e.g., orbit, fly, FPS). Subclasses implement protected handler methods to react to\r\n * mouse/keyboard input, and update camera transforms in `update()`.\r\n *\r\n * Responsibilities:\r\n * - Holds a reference to a `Camera` and resets internal state when the camera changes.\r\n * - Offers a `lookAt(from, to, up)` helper that delegates to the camera.\r\n * - Exposes public event entry points (`onMouseDown`, `onMouseUp`, `onMouseMove`,\r\n * `onMouseWheel`, `onKeyDown`, `onKeyUp`) that forward to protected handlers which\r\n * subclasses can override.\r\n * - Defines `reset()` and `update()` lifecycle methods for state initialization and per-frame updates.\r\n *\r\n * Event handling contract:\r\n * - Each public `onXxx` method returns a boolean that indicates whether the event\r\n * was handled by the controller. Returning `true` allows upstream dispatchers to\r\n * stop propagation if desired.\r\n *\r\n * Subclassing guidelines:\r\n * - Override the protected `_onXxx` handlers rather than the public `onXxx` methods.\r\n * - Override `reset()` to reinitialize controller state when a new camera is attached.\r\n * - Override `update()` to advance state each frame (e.g., apply accumulated deltas with damping).\r\n *\r\n * Lifecycle:\r\n * 1. A camera is attached via internal `_setCamera(camera)`, which calls `reset()`.\r\n * 2. Input events are passed in through the public `onXxx` methods.\r\n * 3. Per-frame, `update()` is called to apply state changes to the camera.\r\n *\r\n * Thread-safety/assumptions:\r\n * - Designed for use on the main thread in a browser environment.\r\n * - Pointer events are used for mouse input; keyboard events for key input.\r\n *\r\n * @public\r\n */\r\nexport class BaseCameraController {\r\n /** @internal */\r\n private _camera: Nullable<Camera>;\r\n /**\r\n * Create a base camera controller.\r\n *\r\n * The controller starts without an attached camera. Call the internal `_setCamera`\r\n * to attach a camera (performed by the owning system), which triggers `reset()`.\r\n */\r\n constructor() {\r\n this._camera = null;\r\n }\r\n /**\r\n * Get the attached camera.\r\n *\r\n * @returns The current camera or `null` if none is attached.\r\n */\r\n _getCamera() {\r\n return this._camera;\r\n }\r\n /**\r\n * Attach a camera to the controller.\r\n *\r\n * If the camera changes, the controller will call `reset()` so subclasses can\r\n * reinitialize state that depends on the camera.\r\n *\r\n * @param camera - The camera to attach.\r\n */\r\n _setCamera(camera: Nullable<Camera>) {\r\n if (this._camera !== camera) {\r\n this._camera = camera;\r\n this.reset();\r\n }\r\n }\r\n /**\r\n * Convenience method that delegates to `camera.lookAt`.\r\n *\r\n * @param from - Camera position.\r\n * @param to - Look-at target.\r\n * @param up - Up direction.\r\n */\r\n lookAt(from: Vector3, to: Vector3, up: Vector3) {\r\n this._camera?.lookAt(from, to, up);\r\n }\r\n /**\r\n * Reset the controller's internal state.\r\n *\r\n * Called automatically when a camera is attached via `_setCamera`. Subclasses\r\n * should override this to reset accumulators, velocities, targets, etc.\r\n */\r\n reset() {}\r\n /**\r\n * Handle pointer down (mouse/touch/pen) events.\r\n *\r\n * @param evt - The pointer event.\r\n * @returns `true` if handled and should stop further processing; otherwise `false`.\r\n */\r\n onMouseDown(evt: IControllerPointerDownEvent) {\r\n return this._onMouseDown(evt);\r\n }\r\n /**\r\n * Handle pointer up events.\r\n *\r\n * @param evt - The pointer event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onMouseUp(evt: IControllerPointerUpEvent) {\r\n return this._onMouseUp(evt);\r\n }\r\n /**\r\n * Handle mouse wheel (scroll) events.\r\n *\r\n * Typical usage: zoom/dolly control, FOV adjustments.\r\n *\r\n * @param evt - The wheel event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onMouseWheel(evt: IControllerWheelEvent) {\r\n return this._onMouseWheel(evt);\r\n }\r\n /**\r\n * Handle pointer move events.\r\n *\r\n * Typical usage: orbit, pan, or look controls based on button/modifier state.\r\n *\r\n * @param evt - The pointer event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onMouseMove(evt: IControllerPointerMoveEvent) {\r\n return this._onMouseMove(evt);\r\n }\r\n /**\r\n * Handle key down events.\r\n *\r\n * Typical usage: WASD navigation, modifiers for speed, toggling modes.\r\n *\r\n * @param evt - The keyboard event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onKeyDown(evt: IControllerKeydownEvent) {\r\n return this._onKeyDown(evt);\r\n }\r\n /**\r\n * Handle key up events.\r\n *\r\n * @param evt - The keyboard event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n onKeyUp(evt: IControllerKeyupEvent) {\r\n return this._onKeyUp(evt);\r\n }\r\n /**\r\n * Per-frame update.\r\n *\r\n * Subclasses should override this to:\r\n * - Integrate velocities/accelerations and apply damping.\r\n * - Smoothly interpolate camera transforms.\r\n * - Clamp angles/distances/FOV, etc.\r\n *\r\n * Called once per frame by the owning system.\r\n */\r\n update() {}\r\n /**\r\n * Mouse down event handler\r\n * @param evt - Mouse event\r\n * @returns Boolean value indices whether this event was handled\r\n */\r\n protected _onMouseDown(_evt: IControllerPointerDownEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Pointer up handler for subclasses to override.\r\n *\r\n * @param _evt - Pointer event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onMouseUp(_evt: IControllerPointerUpEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Mouse wheel handler for subclasses to override.\r\n *\r\n * @param _evt - Wheel event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onMouseWheel(_evt: IControllerWheelEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Pointer move handler for subclasses to override.\r\n *\r\n * @param _evt - Pointer event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onMouseMove(_evt: IControllerPointerMoveEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Key down handler for subclasses to override.\r\n *\r\n * @param _evt - Keyboard event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onKeyDown(_evt: IControllerKeydownEvent): boolean {\r\n return false;\r\n }\r\n /**\r\n * Key up handler for subclasses to override.\r\n *\r\n * @param _evt - Keyboard event.\r\n * @returns `true` if handled; otherwise `false`.\r\n */\r\n protected _onKeyUp(_evt: IControllerKeyupEvent): boolean {\r\n return false;\r\n }\r\n}\r\n"],"names":["BaseCameraController","_camera","_getCamera","_setCamera","camera","reset","lookAt","from","to","up","onMouseDown","evt","_onMouseDown","onMouseUp","_onMouseUp","onMouseWheel","_onMouseWheel","onMouseMove","_onMouseMove","onKeyDown","_onKeyDown","onKeyUp","_onKeyUp","update","_evt"],"mappings":"AAmJA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCC,IACM,MAAMA,oBAAAA,CAAAA;qBAEX,OAAkC;AAClC;;;;;AAKC,MACD,WAAc,EAAA;QACZ,IAAI,CAACC,OAAO,GAAG,IAAA;AACjB;AACA;;;;AAIC,MACDC,UAAa,GAAA;QACX,OAAO,IAAI,CAACD,OAAO;AACrB;AACA;;;;;;;MAQAE,UAAAA,CAAWC,MAAwB,EAAE;AACnC,QAAA,IAAI,IAAI,CAACH,OAAO,KAAKG,MAAQ,EAAA;YAC3B,IAAI,CAACH,OAAO,GAAGG,MAAAA;AACf,YAAA,IAAI,CAACC,KAAK,EAAA;AACZ;AACF;AACA;;;;;;AAMC,MACDC,OAAOC,IAAa,EAAEC,EAAW,EAAEC,EAAW,EAAE;AAC9C,QAAA,IAAI,CAACR,OAAO,EAAEK,MAAAA,CAAOC,MAAMC,EAAIC,EAAAA,EAAAA,CAAAA;AACjC;AACA;;;;;AAKC,MACDJ,QAAQ;AACR;;;;;MAMAK,WAAAA,CAAYC,GAAgC,EAAE;QAC5C,OAAO,IAAI,CAACC,YAAY,CAACD,GAAAA,CAAAA;AAC3B;AACA;;;;;MAMAE,SAAAA,CAAUF,GAA8B,EAAE;QACxC,OAAO,IAAI,CAACG,UAAU,CAACH,GAAAA,CAAAA;AACzB;AACA;;;;;;;MAQAI,YAAAA,CAAaJ,GAA0B,EAAE;QACvC,OAAO,IAAI,CAACK,aAAa,CAACL,GAAAA,CAAAA;AAC5B;AACA;;;;;;;MAQAM,WAAAA,CAAYN,GAAgC,EAAE;QAC5C,OAAO,IAAI,CAACO,YAAY,CAACP,GAAAA,CAAAA;AAC3B;AACA;;;;;;;MAQAQ,SAAAA,CAAUR,GAA4B,EAAE;QACtC,OAAO,IAAI,CAACS,UAAU,CAACT,GAAAA,CAAAA;AACzB;AACA;;;;;MAMAU,OAAAA,CAAQV,GAA0B,EAAE;QAClC,OAAO,IAAI,CAACW,QAAQ,CAACX,GAAAA,CAAAA;AACvB;AACA;;;;;;;;;AASC,MACDY,SAAS;AACT;;;;MAKUX,YAAaY,CAAAA,IAAiC,EAAW;QACjE,OAAO,KAAA;AACT;AACA;;;;;MAMUV,UAAWU,CAAAA,IAA+B,EAAW;QAC7D,OAAO,KAAA;AACT;AACA;;;;;MAMUR,aAAcQ,CAAAA,IAA2B,EAAW;QAC5D,OAAO,KAAA;AACT;AACA;;;;;MAMUN,YAAaM,CAAAA,IAAiC,EAAW;QACjE,OAAO,KAAA;AACT;AACA;;;;;MAMUJ,UAAWI,CAAAA,IAA6B,EAAW;QAC3D,OAAO,KAAA;AACT;AACA;;;;;MAMUF,QAASE,CAAAA,IAA2B,EAAW;QACvD,OAAO,KAAA;AACT;AACF;;;;"}
|
package/dist/camera/camera.js
CHANGED
|
@@ -9,6 +9,7 @@ import { Bloom } from '../posteffect/bloom.js';
|
|
|
9
9
|
import { SAO } from '../posteffect/sao.js';
|
|
10
10
|
import { MotionBlur } from '../posteffect/motionblur.js';
|
|
11
11
|
import { getDevice } from '../app/api.js';
|
|
12
|
+
import { ScreenAdapter } from '../app/screen.js';
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* A renderable camera node that manages view/projection math, frusta,
|
|
@@ -31,11 +32,15 @@ import { getDevice } from '../app/api.js';
|
|
|
31
32
|
*/ class Camera extends SceneNode {
|
|
32
33
|
/** @internal Halton 2-3 sequence used for TAA jittering. */ static _halton23 = halton23(16);
|
|
33
34
|
/** @internal Per-camera history resources. */ static _historyData = new WeakMap();
|
|
35
|
+
/** @internal Screen adapter for this camera */ _screenAdapter;
|
|
36
|
+
/** @internal Whether the camera is adapted */ _adapted;
|
|
37
|
+
/** @internal Adapted viewport */ _adaptedViewport;
|
|
38
|
+
/** @internal Adapted relative viewport */ _adaptedRelativeViewport;
|
|
39
|
+
/** @internal RenderTarget version */ _adaptedVersion;
|
|
34
40
|
/** @internal Projection matrix. */ _projMatrix;
|
|
35
41
|
/** @internal Inverse projection matrix. */ _invProjMatrix;
|
|
36
42
|
/** @internal View matrix (world -\> camera). */ _viewMatrix;
|
|
37
43
|
/** @internal View-projection matrix. */ _viewProjMatrix;
|
|
38
|
-
/** @internal Rotation matrix derived from world transform (camera conventions). */ _rotationMatrix;
|
|
39
44
|
/** @internal Inverse view-projection matrix. */ _invViewProjMatrix;
|
|
40
45
|
/** @internal Framebuffer clear color, disabled when null. Default is null */ _clearColor;
|
|
41
46
|
/** @internal Framebuffer depth clear value, disabled when null. Default is 1 */ _clearDepth;
|
|
@@ -126,12 +131,17 @@ import { getDevice } from '../app/api.js';
|
|
|
126
131
|
this._dirty = true;
|
|
127
132
|
this._controller = null;
|
|
128
133
|
this._viewport = null;
|
|
134
|
+
this._adaptedViewport = null;
|
|
135
|
+
this._adaptedRelativeViewport = null;
|
|
136
|
+
this._adaptedVersion = 0;
|
|
129
137
|
this._scissor = null;
|
|
130
138
|
this._clipMask = 0;
|
|
131
139
|
this._frustum = null;
|
|
132
140
|
this._frustumV = null;
|
|
133
141
|
this._oit = new DRef();
|
|
134
142
|
this._depthPrePass = false;
|
|
143
|
+
this._screenAdapter = new ScreenAdapter();
|
|
144
|
+
this._adapted = false;
|
|
135
145
|
this._HiZ = false;
|
|
136
146
|
this._HDR = true;
|
|
137
147
|
this._toneMap = true;
|
|
@@ -205,17 +215,6 @@ import { getDevice } from '../app/api.js';
|
|
|
205
215
|
this._interactionRect = rect;
|
|
206
216
|
}
|
|
207
217
|
/**
|
|
208
|
-
* Clip plane in camera space.
|
|
209
|
-
*
|
|
210
|
-
* Setting this invalidates derived data. Shaders should respect `clipMask` and plane.
|
|
211
|
-
*/ get clipPlane() {
|
|
212
|
-
return this._clipPlane;
|
|
213
|
-
}
|
|
214
|
-
set clipPlane(plane) {
|
|
215
|
-
this._clipPlane = plane;
|
|
216
|
-
this._invalidate(false);
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
218
|
* Framebuffer clear color, or `null` to disable.
|
|
220
219
|
*/ get clearColor() {
|
|
221
220
|
return this._clearColor;
|
|
@@ -557,6 +556,17 @@ import { getDevice } from '../app/api.js';
|
|
|
557
556
|
set commandBufferReuse(val) {
|
|
558
557
|
this._commandBufferReuse = !!val;
|
|
559
558
|
}
|
|
559
|
+
/** Whether this camera is adapted to screen settins */ get adapted() {
|
|
560
|
+
return this._adapted;
|
|
561
|
+
}
|
|
562
|
+
set adapted(val) {
|
|
563
|
+
if (val !== this._adapted) {
|
|
564
|
+
this._adapted = !!val;
|
|
565
|
+
this._adaptedViewport = null;
|
|
566
|
+
this._adaptedRelativeViewport = null;
|
|
567
|
+
this._invalidate(true);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
560
570
|
/** OIT */ get oit() {
|
|
561
571
|
return this._oit.get();
|
|
562
572
|
}
|
|
@@ -570,21 +580,48 @@ import { getDevice } from '../app/api.js';
|
|
|
570
580
|
this._clipMask = val;
|
|
571
581
|
}
|
|
572
582
|
/** Viewport used for rendering, if null, use full framebuffer size */ get viewport() {
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
583
|
+
if (this._adapted) {
|
|
584
|
+
if (!this._adaptedViewport) {
|
|
585
|
+
this._adaptedViewport = this.calcAdaptedViewport(this._adaptedViewport);
|
|
586
|
+
}
|
|
587
|
+
return this._adaptedViewport;
|
|
588
|
+
}
|
|
589
|
+
return this._viewport;
|
|
576
590
|
}
|
|
577
591
|
set viewport(rect) {
|
|
578
592
|
this._viewport = rect?.slice() ?? null;
|
|
579
593
|
}
|
|
580
594
|
/** Scissor rectangle used for rendering, if null, use viewport value */ get scissor() {
|
|
581
|
-
return this.
|
|
582
|
-
...this._scissor
|
|
583
|
-
] : null;
|
|
595
|
+
return this._adapted ? this.viewport : this._scissor;
|
|
584
596
|
}
|
|
585
597
|
set scissor(rect) {
|
|
586
598
|
this._scissor = rect?.slice() ?? null;
|
|
587
599
|
}
|
|
600
|
+
get relativeViewport() {
|
|
601
|
+
if (this._adapted) {
|
|
602
|
+
if (!this._adaptedRelativeViewport) {
|
|
603
|
+
this._adaptedRelativeViewport = this.calcRelativeAdaptedViewport(this._adaptedRelativeViewport);
|
|
604
|
+
}
|
|
605
|
+
return this._adaptedRelativeViewport;
|
|
606
|
+
}
|
|
607
|
+
return this._viewport;
|
|
608
|
+
}
|
|
609
|
+
/**
|
|
610
|
+
* Screen configuration used for adapting the camera viewport
|
|
611
|
+
*/ get screenConfig() {
|
|
612
|
+
return this._screenAdapter.config;
|
|
613
|
+
}
|
|
614
|
+
set screenConfig(config) {
|
|
615
|
+
this._screenAdapter.config = config;
|
|
616
|
+
}
|
|
617
|
+
/**
|
|
618
|
+
* Screen viewport used for adapting the camera viewport
|
|
619
|
+
*/ get screenViewport() {
|
|
620
|
+
return this._screenAdapter.viewport;
|
|
621
|
+
}
|
|
622
|
+
set screenViewport(viewport) {
|
|
623
|
+
this._screenAdapter.viewport = viewport;
|
|
624
|
+
}
|
|
588
625
|
/**
|
|
589
626
|
* Handle input events
|
|
590
627
|
* @param ev - input event object
|
|
@@ -633,7 +670,7 @@ import { getDevice } from '../app/api.js';
|
|
|
633
670
|
const height = this.viewport ? this.viewport[3] : getDevice().getViewport().height;
|
|
634
671
|
const ndcX = 2 * x / width - 1;
|
|
635
672
|
const ndcY = 1 - 2 * y / height;
|
|
636
|
-
const nearClip = new Vector4(ndcX, ndcY,
|
|
673
|
+
const nearClip = new Vector4(ndcX, ndcY, -1, 1);
|
|
637
674
|
const farClip = new Vector4(ndcX, ndcY, 1, 1);
|
|
638
675
|
const nearWorld = this.invViewProjectionMatrix.transform(nearClip);
|
|
639
676
|
const farWorld = this.invViewProjectionMatrix.transform(farClip);
|
|
@@ -704,8 +741,7 @@ import { getDevice } from '../app/api.js';
|
|
|
704
741
|
* Gets the projection matrix of the camera
|
|
705
742
|
* @returns The projection matrix
|
|
706
743
|
*/ getProjectionMatrix() {
|
|
707
|
-
if (this.
|
|
708
|
-
this._dirty = false;
|
|
744
|
+
if (this.dirtyCheck()) {
|
|
709
745
|
this._compute();
|
|
710
746
|
}
|
|
711
747
|
return this._projMatrix;
|
|
@@ -714,8 +750,7 @@ import { getDevice } from '../app/api.js';
|
|
|
714
750
|
* Gets the inverse projection matrix of the camera
|
|
715
751
|
* @returns The projection matrix
|
|
716
752
|
*/ getInvProjectionMatrix() {
|
|
717
|
-
if (this.
|
|
718
|
-
this._dirty = false;
|
|
753
|
+
if (this.dirtyCheck()) {
|
|
719
754
|
this._compute();
|
|
720
755
|
}
|
|
721
756
|
return this._invProjMatrix;
|
|
@@ -737,15 +772,13 @@ import { getDevice } from '../app/api.js';
|
|
|
737
772
|
* @remarks
|
|
738
773
|
* Camera's view matrix will transform a point from the world space to the camera space
|
|
739
774
|
*/ get viewMatrix() {
|
|
740
|
-
if (this.
|
|
741
|
-
this._dirty = false;
|
|
775
|
+
if (this.dirtyCheck()) {
|
|
742
776
|
this._compute();
|
|
743
777
|
}
|
|
744
778
|
return this._viewMatrix;
|
|
745
779
|
}
|
|
746
780
|
get viewProjectionMatrix() {
|
|
747
|
-
if (this.
|
|
748
|
-
this._dirty = false;
|
|
781
|
+
if (this.dirtyCheck()) {
|
|
749
782
|
this._compute();
|
|
750
783
|
}
|
|
751
784
|
return this._viewProjMatrix;
|
|
@@ -756,22 +789,19 @@ import { getDevice } from '../app/api.js';
|
|
|
756
789
|
* @remarks
|
|
757
790
|
* The inverse-view-projection matrix transforms a point from the clip space to the camera space
|
|
758
791
|
*/ get invViewProjectionMatrix() {
|
|
759
|
-
if (this.
|
|
760
|
-
this._dirty = false;
|
|
792
|
+
if (this.dirtyCheck()) {
|
|
761
793
|
this._compute();
|
|
762
794
|
}
|
|
763
795
|
return this._invViewProjMatrix;
|
|
764
796
|
}
|
|
765
797
|
/** Gets the frustum of the camera */ get frustum() {
|
|
766
|
-
if (this.
|
|
767
|
-
this._dirty = false;
|
|
798
|
+
if (this.dirtyCheck()) {
|
|
768
799
|
this._compute();
|
|
769
800
|
}
|
|
770
801
|
return this._frustum;
|
|
771
802
|
}
|
|
772
803
|
get frustumViewSpace() {
|
|
773
|
-
if (this.
|
|
774
|
-
this._dirty = false;
|
|
804
|
+
if (this.dirtyCheck()) {
|
|
775
805
|
this._compute();
|
|
776
806
|
}
|
|
777
807
|
if (!this._frustumV) {
|
|
@@ -780,7 +810,7 @@ import { getDevice } from '../app/api.js';
|
|
|
780
810
|
return this._frustumV;
|
|
781
811
|
}
|
|
782
812
|
/** The camera controller */ get controller() {
|
|
783
|
-
return this._controller
|
|
813
|
+
return this._controller;
|
|
784
814
|
}
|
|
785
815
|
set controller(controller) {
|
|
786
816
|
this.setController(controller);
|
|
@@ -1043,9 +1073,6 @@ import { getDevice } from '../app/api.js';
|
|
|
1043
1073
|
super.onDispose();
|
|
1044
1074
|
this.setController(null);
|
|
1045
1075
|
this.clearHistoryData();
|
|
1046
|
-
this._projMatrix = null;
|
|
1047
|
-
this._viewMatrix = null;
|
|
1048
|
-
this._viewProjMatrix = null;
|
|
1049
1076
|
this._postEffectBloom.dispose();
|
|
1050
1077
|
this._postEffectFXAA.dispose();
|
|
1051
1078
|
this._postEffectMotionBlur.dispose();
|
|
@@ -1078,6 +1105,63 @@ import { getDevice } from '../app/api.js';
|
|
|
1078
1105
|
y -= rect[1];
|
|
1079
1106
|
return x >= 0 && x < rect[2] && y >= 0 && y < rect[3];
|
|
1080
1107
|
}
|
|
1108
|
+
/** @internal */ dirtyCheck() {
|
|
1109
|
+
if (this._adapted) {
|
|
1110
|
+
const version = this._screenAdapter.version;
|
|
1111
|
+
if (this._adaptedVersion !== version) {
|
|
1112
|
+
this._dirty = true;
|
|
1113
|
+
this._adaptedViewport = null;
|
|
1114
|
+
this._adaptedRelativeViewport = null;
|
|
1115
|
+
this._adaptedVersion = version;
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1118
|
+
if (this._dirty) {
|
|
1119
|
+
this._dirty = false;
|
|
1120
|
+
return true;
|
|
1121
|
+
}
|
|
1122
|
+
return false;
|
|
1123
|
+
}
|
|
1124
|
+
/** @internal */ calcAdaptedViewport(outViewport) {
|
|
1125
|
+
outViewport = outViewport ?? [];
|
|
1126
|
+
const transform = this._screenAdapter.transform;
|
|
1127
|
+
outViewport[0] = transform.croppedViewport.x;
|
|
1128
|
+
outViewport[1] = transform.croppedViewport.y;
|
|
1129
|
+
outViewport[2] = transform.croppedViewport.width;
|
|
1130
|
+
outViewport[3] = transform.croppedViewport.height;
|
|
1131
|
+
return outViewport;
|
|
1132
|
+
}
|
|
1133
|
+
/** @internal */ calcRelativeAdaptedViewport(outViewport) {
|
|
1134
|
+
outViewport = outViewport ?? [];
|
|
1135
|
+
const transform = this._screenAdapter.transform;
|
|
1136
|
+
outViewport[0] = transform.croppedViewport.x - transform.viewportX;
|
|
1137
|
+
outViewport[1] = transform.croppedViewport.y - transform.viewportY;
|
|
1138
|
+
outViewport[2] = transform.croppedViewport.width;
|
|
1139
|
+
outViewport[3] = transform.croppedViewport.height;
|
|
1140
|
+
return outViewport;
|
|
1141
|
+
}
|
|
1142
|
+
/** @internal */ calcAdaptedOrthographicProjection(nearClip, farClip, outMatrix) {
|
|
1143
|
+
const matrix = outMatrix ?? new Matrix4x4();
|
|
1144
|
+
const transform = this._screenAdapter.transform;
|
|
1145
|
+
const scaleX = this._screenAdapter.config.designWidth / transform.viewportWidth;
|
|
1146
|
+
const scaleY = this._screenAdapter.config.designHeight / transform.viewportHeight;
|
|
1147
|
+
const left = -transform.croppedViewport.width * scaleX * 0.5;
|
|
1148
|
+
const right = -left;
|
|
1149
|
+
const bottom = transform.croppedViewport.height * scaleY * 0.5;
|
|
1150
|
+
const top = -bottom;
|
|
1151
|
+
return matrix.ortho(left, right, bottom, top, nearClip, farClip);
|
|
1152
|
+
}
|
|
1153
|
+
/** @internal */ calcAdaptedPerspectiveProjection(fov, nearClip, farClip, outMatrix) {
|
|
1154
|
+
const matrix = outMatrix ?? new Matrix4x4();
|
|
1155
|
+
const transform = this._screenAdapter.transform;
|
|
1156
|
+
const aspect = transform.viewportHeight !== 0 ? transform.viewportWidth / transform.viewportHeight : 1;
|
|
1157
|
+
const h = nearClip * Math.tan(fov * 0.5);
|
|
1158
|
+
const w = h * aspect;
|
|
1159
|
+
let left = -w + 2 * w * (transform.croppedViewport.x - transform.viewportX) / transform.viewportWidth;
|
|
1160
|
+
let right = w - 2 * w * (transform.viewportX + transform.viewportWidth - transform.croppedViewport.x - transform.croppedViewport.width) / transform.viewportWidth;
|
|
1161
|
+
let bottom = -h + 2 * w * (transform.croppedViewport.y - transform.viewportY) / transform.viewportHeight;
|
|
1162
|
+
let top = h - 2 * h * (transform.viewportY + transform.viewportHeight - transform.croppedViewport.y - transform.croppedViewport.height) / transform.viewportHeight;
|
|
1163
|
+
return matrix.frustum(left, right, bottom, top, nearClip, farClip);
|
|
1164
|
+
}
|
|
1081
1165
|
}
|
|
1082
1166
|
|
|
1083
1167
|
export { Camera };
|