angular-three-soba 2.0.0-beta.26 → 2.0.0-beta.261
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -4
- package/abstractions/README.md +278 -2
- package/abstractions/index.d.ts +11 -6
- package/abstractions/lib/catmull-rom-line.d.ts +648 -0
- package/abstractions/lib/cubic-bezier-line.d.ts +19 -0
- package/abstractions/lib/edges.d.ts +850 -0
- package/abstractions/lib/gradient-texture.d.ts +24 -0
- package/abstractions/lib/grid.d.ts +339 -0
- package/abstractions/lib/helper.d.ts +25 -0
- package/abstractions/lib/line.d.ts +41 -0
- package/abstractions/lib/prism-geometry.d.ts +30 -0
- package/abstractions/lib/quadratic-bezier-line.d.ts +21 -0
- package/abstractions/lib/text-3d.d.ts +338 -0
- package/abstractions/lib/text.d.ts +55 -0
- package/cameras/README.md +91 -2
- package/cameras/index.d.ts +4 -4
- package/cameras/lib/camera-content.d.ts +10 -0
- package/cameras/lib/cube-camera.d.ts +38 -0
- package/cameras/lib/orthographic-camera.d.ts +40 -0
- package/cameras/lib/perspective-camera.d.ts +36 -0
- package/controls/README.md +95 -2
- package/controls/index.d.ts +2 -1
- package/controls/lib/camera-controls.d.ts +31 -0
- package/controls/lib/orbit-controls.d.ts +38 -0
- package/esm2022/abstractions/index.mjs +12 -7
- package/esm2022/abstractions/lib/catmull-rom-line.mjs +76 -0
- package/esm2022/abstractions/lib/cubic-bezier-line.mjs +51 -0
- package/esm2022/abstractions/lib/edges.mjs +70 -0
- package/esm2022/abstractions/lib/gradient-texture.mjs +91 -0
- package/esm2022/abstractions/lib/grid.mjs +103 -0
- package/esm2022/abstractions/lib/helper.mjs +80 -0
- package/esm2022/abstractions/lib/line.mjs +123 -0
- package/esm2022/abstractions/lib/prism-geometry.mjs +55 -0
- package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +73 -0
- package/esm2022/abstractions/lib/text-3d.mjs +98 -0
- package/esm2022/abstractions/lib/text.mjs +92 -0
- package/esm2022/cameras/index.mjs +5 -5
- package/esm2022/cameras/lib/camera-content.mjs +14 -0
- package/esm2022/cameras/lib/cube-camera.mjs +111 -0
- package/esm2022/cameras/lib/orthographic-camera.mjs +131 -0
- package/esm2022/cameras/lib/perspective-camera.mjs +104 -0
- package/esm2022/controls/index.mjs +3 -2
- package/esm2022/controls/lib/camera-controls.mjs +127 -0
- package/esm2022/controls/lib/orbit-controls.mjs +126 -0
- package/esm2022/loaders/index.mjs +6 -5
- package/esm2022/loaders/lib/font-loader.mjs +49 -0
- package/esm2022/loaders/lib/gltf-loader.mjs +33 -0
- package/esm2022/loaders/lib/loader.mjs +109 -0
- package/esm2022/loaders/lib/progress.mjs +51 -0
- package/esm2022/loaders/lib/texture-loader.mjs +32 -0
- package/esm2022/materials/index.mjs +7 -7
- package/esm2022/materials/lib/custom-shader-material.mjs +71 -0
- package/esm2022/materials/lib/mesh-distort-material.mjs +42 -0
- package/esm2022/materials/lib/mesh-reflector-material.mjs +278 -0
- package/esm2022/materials/lib/mesh-refraction-material.mjs +144 -0
- package/esm2022/materials/lib/mesh-transmission-material.mjs +188 -0
- package/esm2022/materials/lib/mesh-wobble-material.mjs +42 -0
- package/esm2022/misc/index.mjs +10 -14
- package/esm2022/misc/lib/animations.mjs +74 -0
- package/esm2022/misc/lib/bake-shadows.mjs +26 -0
- package/esm2022/misc/lib/computed-attribute.mjs +56 -0
- package/esm2022/misc/lib/constants.mjs +5 -0
- package/esm2022/misc/lib/decal.mjs +135 -0
- package/esm2022/misc/lib/deprecated.mjs +15 -0
- package/esm2022/misc/lib/depth-buffer.mjs +39 -0
- package/esm2022/misc/lib/fbo.mjs +89 -0
- package/esm2022/misc/lib/sampler.mjs +121 -0
- package/esm2022/shaders/index.mjs +3 -18
- package/esm2022/shaders/lib/grid-material.mjs +81 -0
- package/esm2022/shaders/lib/mesh-refraction-material.mjs +163 -0
- package/esm2022/staging/index.mjs +19 -22
- package/esm2022/staging/lib/accumulative-shadows.mjs +182 -0
- package/esm2022/staging/lib/backdrop.mjs +73 -0
- package/esm2022/staging/lib/bb-anchor.mjs +58 -0
- package/esm2022/staging/lib/bounds.mjs +286 -0
- package/esm2022/staging/lib/camera-shake.mjs +69 -0
- package/esm2022/staging/lib/caustics.mjs +188 -0
- package/esm2022/staging/lib/center.mjs +113 -0
- package/esm2022/staging/lib/contact-shadows.mjs +201 -0
- package/esm2022/staging/lib/environment.mjs +465 -0
- package/esm2022/staging/lib/float.mjs +60 -0
- package/esm2022/staging/lib/lightformer.mjs +107 -0
- package/esm2022/staging/lib/matcap-texture.mjs +81 -0
- package/esm2022/staging/lib/normal-texture.mjs +85 -0
- package/esm2022/staging/lib/randomized-lights.mjs +104 -0
- package/esm2022/staging/lib/render-texture.mjs +213 -0
- package/esm2022/staging/lib/sky.mjs +86 -0
- package/esm2022/staging/lib/spot-light.mjs +450 -0
- package/esm2022/staging/lib/stage.mjs +236 -0
- package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +5 -0
- package/esm2022/vanilla-exports/index.mjs +3 -0
- package/fesm2022/angular-three-soba-abstractions.mjs +739 -718
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +260 -307
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-controls.mjs +174 -110
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-loaders.mjs +151 -129
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +511 -764
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +405 -2149
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2022/angular-three-soba-shaders.mjs +33 -1373
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +2329 -3538
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2022/angular-three-soba-vanilla-exports.mjs +6 -0
- package/fesm2022/angular-three-soba-vanilla-exports.mjs.map +1 -0
- package/loaders/README.md +130 -2
- package/loaders/index.d.ts +5 -4
- package/loaders/lib/font-loader.d.ts +27 -0
- package/loaders/lib/gltf-loader.d.ts +21 -0
- package/loaders/lib/loader.d.ts +29 -0
- package/loaders/lib/progress.d.ts +9 -0
- package/loaders/lib/texture-loader.d.ts +13 -0
- package/materials/README.md +160 -2
- package/materials/index.d.ts +6 -6
- package/materials/lib/custom-shader-material.d.ts +19 -0
- package/materials/lib/mesh-distort-material.d.ts +18 -0
- package/materials/lib/mesh-reflector-material.d.ts +50 -0
- package/materials/lib/mesh-refraction-material.d.ts +42 -0
- package/materials/lib/mesh-transmission-material.d.ts +77 -0
- package/materials/lib/mesh-wobble-material.d.ts +15 -0
- package/metadata.json +1 -1
- package/misc/README.md +217 -2
- package/misc/index.d.ts +9 -13
- package/misc/lib/animations.d.ts +14 -0
- package/misc/lib/computed-attribute.d.ts +69 -0
- package/misc/lib/constants.d.ts +1 -0
- package/misc/lib/decal.d.ts +27 -0
- package/misc/lib/deprecated.d.ts +14 -0
- package/misc/lib/depth-buffer.d.ts +8 -0
- package/misc/lib/fbo.d.ts +47 -0
- package/misc/lib/sampler.d.ts +73 -0
- package/package.json +60 -38
- package/shaders/index.d.ts +2 -17
- package/shaders/lib/grid-material.d.ts +69 -0
- package/shaders/lib/mesh-refraction-material.d.ts +11 -0
- package/staging/README.md +472 -2
- package/staging/index.d.ts +18 -21
- package/staging/lib/accumulative-shadows.d.ts +75 -0
- package/staging/lib/backdrop.d.ts +22 -0
- package/staging/lib/bb-anchor.d.ts +17 -0
- package/staging/lib/bounds.d.ts +47 -0
- package/staging/lib/camera-shake.d.ts +29 -0
- package/staging/lib/caustics.d.ts +53 -0
- package/staging/lib/center.d.ts +422 -0
- package/staging/lib/contact-shadows.d.ts +45 -0
- package/staging/lib/environment.d.ts +159 -0
- package/staging/lib/float.d.ts +19 -0
- package/staging/lib/lightformer.d.ts +334 -0
- package/staging/lib/matcap-texture.d.ts +32 -0
- package/staging/lib/normal-texture.d.ts +37 -0
- package/staging/lib/randomized-lights.d.ts +54 -0
- package/staging/lib/render-texture.d.ts +64 -0
- package/staging/lib/sky.d.ts +32 -0
- package/staging/lib/spot-light.d.ts +120 -0
- package/staging/lib/stage.d.ts +376 -0
- package/vanilla-exports/README.md +3 -0
- package/vanilla-exports/index.d.ts +27 -0
- package/web-types.json +1 -1
- package/abstractions/billboard/billboard.d.ts +0 -28
- package/abstractions/detailed/detailed.d.ts +0 -26
- package/abstractions/edges/edges.d.ts +0 -34
- package/abstractions/grid/grid.d.ts +0 -50
- package/abstractions/text/text.d.ts +0 -82
- package/abstractions/text-3d/text-3d.d.ts +0 -84
- package/assets/distort.vert.glsl +0 -1
- package/cameras/camera/camera-content.d.ts +0 -13
- package/cameras/camera/camera.d.ts +0 -26
- package/cameras/cube-camera/cube-camera.d.ts +0 -69
- package/cameras/orthographic-camera/orthographic-camera.d.ts +0 -37
- package/cameras/perspective-camera/perspective-camera.d.ts +0 -18
- package/controls/orbit-controls/orbit-controls.d.ts +0 -54
- package/esm2022/abstractions/billboard/billboard.mjs +0 -74
- package/esm2022/abstractions/detailed/detailed.mjs +0 -64
- package/esm2022/abstractions/edges/edges.mjs +0 -88
- package/esm2022/abstractions/grid/grid.mjs +0 -180
- package/esm2022/abstractions/text/text.mjs +0 -274
- package/esm2022/abstractions/text-3d/text-3d.mjs +0 -172
- package/esm2022/cameras/camera/camera-content.mjs +0 -21
- package/esm2022/cameras/camera/camera.mjs +0 -77
- package/esm2022/cameras/cube-camera/cube-camera.mjs +0 -161
- package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +0 -102
- package/esm2022/cameras/perspective-camera/perspective-camera.mjs +0 -46
- package/esm2022/controls/orbit-controls/orbit-controls.mjs +0 -185
- package/esm2022/gizmos/angular-three-soba-gizmos.mjs +0 -5
- package/esm2022/gizmos/gizmo-helper/gizmo-helper.mjs +0 -197
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -93
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -150
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.mjs +0 -66
- package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -71
- package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -195
- package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -272
- package/esm2022/gizmos/index.mjs +0 -4
- package/esm2022/loaders/gltf-loader/gltf-loader.mjs +0 -30
- package/esm2022/loaders/loader/loader.mjs +0 -138
- package/esm2022/loaders/progress/progress.mjs +0 -52
- package/esm2022/loaders/texture-loader/texture-loader.mjs +0 -28
- package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +0 -82
- package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +0 -367
- package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +0 -171
- package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +0 -278
- package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +0 -68
- package/esm2022/materials/point-material/point-material.mjs +0 -50
- package/esm2022/misc/animations/animations.mjs +0 -59
- package/esm2022/misc/bake-shadows/bake-shadows.mjs +0 -24
- package/esm2022/misc/caustics/caustics.mjs +0 -387
- package/esm2022/misc/decal/decal.mjs +0 -187
- package/esm2022/misc/depth-buffer/depth-buffer.mjs +0 -44
- package/esm2022/misc/example/example.mjs +0 -160
- package/esm2022/misc/fbo/fbo.mjs +0 -47
- package/esm2022/misc/html/html-wrapper.mjs +0 -478
- package/esm2022/misc/html/html.mjs +0 -304
- package/esm2022/misc/sampler/sampler.mjs +0 -142
- package/esm2022/misc/shadow/shadow.mjs +0 -111
- package/esm2022/misc/stats-gl/stats-gl.mjs +0 -61
- package/esm2022/misc/trail/trail.mjs +0 -209
- package/esm2022/misc/trail-texture/inject-trail-texture.mjs +0 -17
- package/esm2022/misc/trail-texture/trail-texture.mjs +0 -106
- package/esm2022/modifiers/angular-three-soba-modifiers.mjs +0 -5
- package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +0 -64
- package/esm2022/modifiers/index.mjs +0 -2
- package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +0 -44
- package/esm2022/performances/adaptive-events/adaptive-events.mjs +0 -27
- package/esm2022/performances/angular-three-soba-performances.mjs +0 -5
- package/esm2022/performances/index.mjs +0 -8
- package/esm2022/performances/instances/instances.mjs +0 -220
- package/esm2022/performances/instances/position-mesh.mjs +0 -52
- package/esm2022/performances/points/points-input.mjs +0 -64
- package/esm2022/performances/points/points.mjs +0 -326
- package/esm2022/performances/points/position-point.mjs +0 -54
- package/esm2022/performances/segments/segment-object.mjs +0 -9
- package/esm2022/performances/segments/segments.mjs +0 -182
- package/esm2022/shaders/blur-pass/blur-pass.mjs +0 -61
- package/esm2022/shaders/caustics/caustics-material.mjs +0 -130
- package/esm2022/shaders/caustics/caustics-projection-material.mjs +0 -31
- package/esm2022/shaders/convolution-material/convolution-material.mjs +0 -94
- package/esm2022/shaders/discard-material/discard-material.mjs +0 -3
- package/esm2022/shaders/grid-material/grid-material.mjs +0 -77
- package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +0 -56
- package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
- package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +0 -170
- package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
- package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
- package/esm2022/shaders/shader-material/shader-material.mjs +0 -34
- package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +0 -25
- package/esm2022/shaders/sparkles-material/sparkles-material.mjs +0 -33
- package/esm2022/shaders/spot-light-material/spot-light-material.mjs +0 -86
- package/esm2022/shaders/star-field-material/star-field-material.mjs +0 -33
- package/esm2022/shaders/wireframe-material/wireframe-material.mjs +0 -247
- package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +0 -267
- package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +0 -108
- package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +0 -206
- package/esm2022/staging/backdrop/backdrop.mjs +0 -77
- package/esm2022/staging/bb-anchor/bb-anchor.mjs +0 -69
- package/esm2022/staging/bounds/bounds.mjs +0 -308
- package/esm2022/staging/camera-shake/camera-shake.mjs +0 -123
- package/esm2022/staging/center/center.mjs +0 -165
- package/esm2022/staging/cloud/cloud.mjs +0 -158
- package/esm2022/staging/contact-shadows/contact-shadows.mjs +0 -246
- package/esm2022/staging/environment/assets.mjs +0 -13
- package/esm2022/staging/environment/environment-cube.mjs +0 -47
- package/esm2022/staging/environment/environment-ground.mjs +0 -41
- package/esm2022/staging/environment/environment-input.mjs +0 -119
- package/esm2022/staging/environment/environment-map.mjs +0 -53
- package/esm2022/staging/environment/environment-portal.mjs +0 -113
- package/esm2022/staging/environment/environment.mjs +0 -61
- package/esm2022/staging/environment/utils.mjs +0 -106
- package/esm2022/staging/float/float.mjs +0 -94
- package/esm2022/staging/matcap-texture/matcap-texture.mjs +0 -64
- package/esm2022/staging/normal-texture/normal-texture.mjs +0 -53
- package/esm2022/staging/sky/sky.mjs +0 -119
- package/esm2022/staging/sparkles/sparkles.mjs +0 -164
- package/esm2022/staging/spot-light/shadow-mesh-input.mjs +0 -63
- package/esm2022/staging/spot-light/shadow-mesh.mjs +0 -266
- package/esm2022/staging/spot-light/spot-light-input.mjs +0 -84
- package/esm2022/staging/spot-light/spot-light.mjs +0 -81
- package/esm2022/staging/spot-light/volumetric-mesh.mjs +0 -98
- package/esm2022/staging/stage/stage.mjs +0 -389
- package/esm2022/staging/stars/stars.mjs +0 -147
- package/esm2022/staging/wireframe/wireframe-input.mjs +0 -191
- package/esm2022/staging/wireframe/wireframe.mjs +0 -228
- package/esm2022/utils/angular-three-soba-utils.mjs +0 -5
- package/esm2022/utils/content/content.mjs +0 -15
- package/esm2022/utils/index.mjs +0 -2
- package/fesm2022/angular-three-soba-gizmos.mjs +0 -1043
- package/fesm2022/angular-three-soba-gizmos.mjs.map +0 -1
- package/fesm2022/angular-three-soba-modifiers.mjs +0 -71
- package/fesm2022/angular-three-soba-modifiers.mjs.map +0 -1
- package/fesm2022/angular-three-soba-performances.mjs +0 -956
- package/fesm2022/angular-three-soba-performances.mjs.map +0 -1
- package/fesm2022/angular-three-soba-utils.mjs +0 -22
- package/fesm2022/angular-three-soba-utils.mjs.map +0 -1
- package/gizmos/README.md +0 -3
- package/gizmos/gizmo-helper/gizmo-helper.d.ts +0 -69
- package/gizmos/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -12
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -29
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.d.ts +0 -33
- package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -10
- package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -40
- package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -30
- package/gizmos/index.d.ts +0 -3
- package/loaders/gltf-loader/gltf-loader.d.ts +0 -10
- package/loaders/loader/loader.d.ts +0 -33
- package/loaders/progress/progress.d.ts +0 -9
- package/loaders/texture-loader/texture-loader.d.ts +0 -7
- package/materials/mesh-distort-material/mesh-distort-material.d.ts +0 -40
- package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +0 -99
- package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +0 -62
- package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +0 -107
- package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +0 -29
- package/materials/point-material/point-material.d.ts +0 -24
- package/misc/animations/animations.d.ts +0 -15
- package/misc/caustics/caustics.d.ts +0 -87
- package/misc/decal/decal.d.ts +0 -49
- package/misc/depth-buffer/depth-buffer.d.ts +0 -9
- package/misc/example/example.d.ts +0 -81
- package/misc/fbo/fbo.d.ts +0 -17
- package/misc/html/html-wrapper.d.ts +0 -559
- package/misc/html/html.d.ts +0 -214
- package/misc/sampler/sampler.d.ts +0 -67
- package/misc/shadow/shadow.d.ts +0 -37
- package/misc/stats-gl/stats-gl.d.ts +0 -24
- package/misc/trail/trail.d.ts +0 -57
- package/misc/trail-texture/inject-trail-texture.d.ts +0 -9
- package/misc/trail-texture/trail-texture.d.ts +0 -50
- package/modifiers/README.md +0 -3
- package/modifiers/curve-modifier/curve-modifier.d.ts +0 -23
- package/modifiers/index.d.ts +0 -1
- package/performances/README.md +0 -3
- package/performances/adaptive-dpr/adaptive-dpr.d.ts +0 -14
- package/performances/adaptive-events/adaptive-events.d.ts +0 -9
- package/performances/index.d.ts +0 -7
- package/performances/instances/instances.d.ts +0 -79
- package/performances/instances/position-mesh.d.ts +0 -10
- package/performances/points/points-input.d.ts +0 -32
- package/performances/points/points.d.ts +0 -92
- package/performances/points/position-point.d.ts +0 -11
- package/performances/segments/segment-object.d.ts +0 -7
- package/performances/segments/segments.d.ts +0 -124
- package/shaders/blur-pass/blur-pass.d.ts +0 -23
- package/shaders/caustics/caustics-material.d.ts +0 -4
- package/shaders/caustics/caustics-projection-material.d.ts +0 -4
- package/shaders/convolution-material/convolution-material.d.ts +0 -7
- package/shaders/discard-material/discard-material.d.ts +0 -3
- package/shaders/grid-material/grid-material.d.ts +0 -37
- package/shaders/mesh-distort-material/mesh-distort-material.d.ts +0 -295
- package/shaders/mesh-reflector-material/mesh-reflector-material.d.ts +0 -50
- package/shaders/mesh-refraction-material/mesh-refraction-material.d.ts +0 -4
- package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +0 -25
- package/shaders/mesh-wobble-material/mesh-wobble-material.d.ts +0 -16
- package/shaders/shader-material/shader-material.d.ts +0 -6
- package/shaders/soft-shadow-material/soft-shadow-material.d.ts +0 -19
- package/shaders/sparkles-material/sparkles-material.d.ts +0 -17
- package/shaders/spot-light-material/spot-light-material.d.ts +0 -13
- package/shaders/star-field-material/star-field-material.d.ts +0 -13
- package/shaders/wireframe-material/wireframe-material.d.ts +0 -58
- package/staging/accumulative-shadows/accumulative-shadows.d.ts +0 -146
- package/staging/accumulative-shadows/progressive-light-map.d.ts +0 -34
- package/staging/accumulative-shadows/randomized-lights.d.ts +0 -90
- package/staging/backdrop/backdrop.d.ts +0 -30
- package/staging/bb-anchor/bb-anchor.d.ts +0 -27
- package/staging/bounds/bounds.d.ts +0 -134
- package/staging/camera-shake/camera-shake.d.ts +0 -43
- package/staging/center/center.d.ts +0 -70
- package/staging/cloud/cloud.d.ts +0 -51
- package/staging/contact-shadows/contact-shadows.d.ts +0 -70
- package/staging/environment/assets.d.ts +0 -13
- package/staging/environment/environment-cube.d.ts +0 -15
- package/staging/environment/environment-ground.d.ts +0 -13
- package/staging/environment/environment-input.d.ts +0 -68
- package/staging/environment/environment-map.d.ts +0 -16
- package/staging/environment/environment-portal.d.ts +0 -18
- package/staging/environment/environment.d.ts +0 -8
- package/staging/environment/utils.d.ts +0 -7
- package/staging/float/float.d.ts +0 -31
- package/staging/matcap-texture/matcap-texture.d.ts +0 -13
- package/staging/normal-texture/normal-texture.d.ts +0 -16
- package/staging/sky/sky.d.ts +0 -48
- package/staging/sparkles/sparkles.d.ts +0 -63
- package/staging/spot-light/shadow-mesh-input.d.ts +0 -29
- package/staging/spot-light/shadow-mesh.d.ts +0 -37
- package/staging/spot-light/spot-light-input.d.ts +0 -38
- package/staging/spot-light/spot-light.d.ts +0 -39
- package/staging/spot-light/volumetric-mesh.d.ts +0 -24
- package/staging/stage/stage.d.ts +0 -130
- package/staging/stars/stars.d.ts +0 -45
- package/staging/wireframe/wireframe-input.d.ts +0 -65
- package/staging/wireframe/wireframe.d.ts +0 -28
- package/utils/README.md +0 -3
- package/utils/content/content.d.ts +0 -8
- package/utils/index.d.ts +0 -1
- /package/misc/{bake-shadows → lib}/bake-shadows.d.ts +0 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
2
|
+
import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, Directive, TemplateRef, computed, contentChild, input, } from '@angular/core';
|
|
3
|
+
import { NgtArgs, NgtPortal, NgtPortalContent, extend, getLocalState, injectBeforeRender, injectStore, omit, pick, prepare, } from 'angular-three';
|
|
4
|
+
import { injectFBO } from 'angular-three-soba/misc';
|
|
5
|
+
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
6
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
7
|
+
import { Group, Object3D, Scene } from 'three';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
extend({ Group });
|
|
10
|
+
export class NgtsRenderTextureContainer {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.fbo = input.required();
|
|
13
|
+
this.renderPriority = input.required();
|
|
14
|
+
this.frames = input.required();
|
|
15
|
+
this.injector = input.required();
|
|
16
|
+
this.store = injectStore();
|
|
17
|
+
injectAutoEffect()(() => {
|
|
18
|
+
// track
|
|
19
|
+
this.store.state();
|
|
20
|
+
const renderPriority = this.renderPriority();
|
|
21
|
+
let count = 0;
|
|
22
|
+
let oldAutoClear;
|
|
23
|
+
let oldXrEnabled;
|
|
24
|
+
let oldRenderTarget;
|
|
25
|
+
let oldIsPresenting;
|
|
26
|
+
const sub = injectBeforeRender(({ gl, scene, camera }) => {
|
|
27
|
+
const [fbo, frames] = [this.fbo(), this.frames()];
|
|
28
|
+
// NOTE: render the frames ^ 2
|
|
29
|
+
if (frames === Infinity || count < frames * frames) {
|
|
30
|
+
oldAutoClear = gl.autoClear;
|
|
31
|
+
oldXrEnabled = gl.xr.enabled;
|
|
32
|
+
oldRenderTarget = gl.getRenderTarget();
|
|
33
|
+
oldIsPresenting = gl.xr.isPresenting;
|
|
34
|
+
gl.autoClear = true;
|
|
35
|
+
gl.xr.enabled = false;
|
|
36
|
+
gl.xr.isPresenting = false;
|
|
37
|
+
gl.setRenderTarget(fbo);
|
|
38
|
+
gl.render(scene, camera);
|
|
39
|
+
gl.setRenderTarget(oldRenderTarget);
|
|
40
|
+
gl.autoClear = oldAutoClear;
|
|
41
|
+
gl.xr.enabled = oldXrEnabled;
|
|
42
|
+
gl.xr.isPresenting = oldIsPresenting;
|
|
43
|
+
count++;
|
|
44
|
+
}
|
|
45
|
+
}, { priority: renderPriority, injector: this.injector() });
|
|
46
|
+
return () => sub();
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsRenderTextureContainer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
50
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", type: NgtsRenderTextureContainer, isStandalone: true, selector: "ngts-render-texture-container", inputs: { fbo: { classPropertyName: "fbo", publicName: "fbo", isSignal: true, isRequired: true, transformFunction: null }, renderPriority: { classPropertyName: "renderPriority", publicName: "renderPriority", isSignal: true, isRequired: true, transformFunction: null }, frames: { classPropertyName: "frames", publicName: "frames", isSignal: true, isRequired: true, transformFunction: null }, injector: { classPropertyName: "injector", publicName: "injector", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
51
|
+
<ng-content />
|
|
52
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
53
|
+
}
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsRenderTextureContainer, decorators: [{
|
|
55
|
+
type: Component,
|
|
56
|
+
args: [{
|
|
57
|
+
standalone: true,
|
|
58
|
+
selector: 'ngts-render-texture-container',
|
|
59
|
+
template: `
|
|
60
|
+
<ng-content />
|
|
61
|
+
`,
|
|
62
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
63
|
+
}]
|
|
64
|
+
}], ctorParameters: () => [] });
|
|
65
|
+
const defaultOptions = {
|
|
66
|
+
samples: 8,
|
|
67
|
+
renderPriority: 0,
|
|
68
|
+
eventPriority: 0,
|
|
69
|
+
frames: Infinity,
|
|
70
|
+
stencilBuffer: false,
|
|
71
|
+
depthBuffer: true,
|
|
72
|
+
generateMipmaps: false,
|
|
73
|
+
};
|
|
74
|
+
export class NgtsRenderTextureContent {
|
|
75
|
+
static ngTemplateContextGuard(_, ctx) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsRenderTextureContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
79
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.0", type: NgtsRenderTextureContent, isStandalone: true, selector: "ng-template[renderTextureContent]", ngImport: i0 }); }
|
|
80
|
+
}
|
|
81
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsRenderTextureContent, decorators: [{
|
|
82
|
+
type: Directive,
|
|
83
|
+
args: [{ selector: 'ng-template[renderTextureContent]', standalone: true }]
|
|
84
|
+
}] });
|
|
85
|
+
let incrementId = 0;
|
|
86
|
+
export class NgtsRenderTexture {
|
|
87
|
+
constructor() {
|
|
88
|
+
this.attach = input('map');
|
|
89
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
90
|
+
this.parameters = omit(this.options, [
|
|
91
|
+
'samples',
|
|
92
|
+
'renderPriority',
|
|
93
|
+
'eventPriority',
|
|
94
|
+
'frames',
|
|
95
|
+
'stencilBuffer',
|
|
96
|
+
'depthBuffer',
|
|
97
|
+
'generateMipmaps',
|
|
98
|
+
'compute',
|
|
99
|
+
'width',
|
|
100
|
+
'height',
|
|
101
|
+
]);
|
|
102
|
+
this.content = contentChild.required(NgtsRenderTextureContent, { read: TemplateRef });
|
|
103
|
+
this.store = injectStore();
|
|
104
|
+
this.size = this.store.select('size');
|
|
105
|
+
this.viewport = this.store.select('viewport');
|
|
106
|
+
this.fboParams = computed(() => ({
|
|
107
|
+
width: (this.options().width || this.size().width) * this.viewport().dpr,
|
|
108
|
+
height: (this.options().height || this.size().height) * this.viewport().dpr,
|
|
109
|
+
settings: {
|
|
110
|
+
samples: this.options().samples,
|
|
111
|
+
depthBuffer: this.options().depthBuffer,
|
|
112
|
+
stencilBuffer: this.options().stencilBuffer,
|
|
113
|
+
generateMipmaps: this.options().generateMipmaps,
|
|
114
|
+
},
|
|
115
|
+
}));
|
|
116
|
+
this.renderPriority = pick(this.options, 'renderPriority');
|
|
117
|
+
this.frames = pick(this.options, 'frames');
|
|
118
|
+
this.fbo = injectFBO(this.fboParams);
|
|
119
|
+
this.virtualScene = computed(() => {
|
|
120
|
+
const scene = prepare(new Scene());
|
|
121
|
+
scene.name = `ngts-render-texture-virtual-scene-${incrementId++}`;
|
|
122
|
+
return scene;
|
|
123
|
+
});
|
|
124
|
+
this.eventPriority = pick(this.options, 'eventPriority');
|
|
125
|
+
this.compute = computed(() => this.options().compute || this.uvCompute);
|
|
126
|
+
this.uvCompute = (event, root, previous) => {
|
|
127
|
+
const fbo = this.fbo();
|
|
128
|
+
if (!fbo)
|
|
129
|
+
return;
|
|
130
|
+
const state = root.snapshot;
|
|
131
|
+
const previousState = previous?.snapshot;
|
|
132
|
+
// Since this is only a texture it does not have an easy way to obtain the parent, which we
|
|
133
|
+
// need to transform event coordinates to local coordinates. We use r3f internals to find the
|
|
134
|
+
// next Object3D.
|
|
135
|
+
let parent = getLocalState(fbo.texture)?.parent();
|
|
136
|
+
while (parent && !(parent instanceof Object3D)) {
|
|
137
|
+
parent = getLocalState(parent)?.parent();
|
|
138
|
+
}
|
|
139
|
+
if (!parent)
|
|
140
|
+
return;
|
|
141
|
+
// First we call the previous state-onion-layers compute, this is what makes it possible to nest portals
|
|
142
|
+
if (previousState && !previousState.raycaster.camera) {
|
|
143
|
+
previousState.events.compute?.(event, previous, previous.snapshot.previousRoot);
|
|
144
|
+
}
|
|
145
|
+
// We run a quick check against the parent, if it isn't hit there's no need to raycast at all
|
|
146
|
+
const [intersection] = previousState?.raycaster.intersectObject(parent) || [];
|
|
147
|
+
if (!intersection)
|
|
148
|
+
return;
|
|
149
|
+
// We take that hits uv coords, set up this layers raycaster, et voilà, we have raycasting on arbitrary surfaces
|
|
150
|
+
const uv = intersection.uv;
|
|
151
|
+
if (!uv)
|
|
152
|
+
return;
|
|
153
|
+
state.raycaster.setFromCamera(state.pointer.set(uv.x * 2 - 1, uv.y * 2 - 1), state.camera);
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
onPointerOver() {
|
|
157
|
+
/* noop */
|
|
158
|
+
}
|
|
159
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsRenderTexture, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
160
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.1.0", type: NgtsRenderTexture, isStandalone: true, selector: "ngts-render-texture", inputs: { attach: { classPropertyName: "attach", publicName: "attach", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "content", first: true, predicate: NgtsRenderTextureContent, descendants: true, read: TemplateRef, isSignal: true }], ngImport: i0, template: `
|
|
161
|
+
<ngt-portal [container]="virtualScene()" [state]="{ events: { compute: compute(), priority: eventPriority() } }">
|
|
162
|
+
<ng-template portalContent let-injector="injector" let-container="container">
|
|
163
|
+
<ngts-render-texture-container
|
|
164
|
+
[fbo]="fbo()"
|
|
165
|
+
[renderPriority]="renderPriority()"
|
|
166
|
+
[frames]="frames()"
|
|
167
|
+
[injector]="injector"
|
|
168
|
+
>
|
|
169
|
+
<ng-container
|
|
170
|
+
[ngTemplateOutlet]="content()"
|
|
171
|
+
[ngTemplateOutletInjector]="injector"
|
|
172
|
+
[ngTemplateOutletContext]="{ container, injector }"
|
|
173
|
+
/>
|
|
174
|
+
<ngt-group (pointerover)="onPointerOver()" />
|
|
175
|
+
</ngts-render-texture-container>
|
|
176
|
+
</ng-template>
|
|
177
|
+
</ngt-portal>
|
|
178
|
+
|
|
179
|
+
<ngt-primitive *args="[fbo().texture]" [attach]="attach()" [parameters]="parameters()" />
|
|
180
|
+
`, isInline: true, dependencies: [{ kind: "component", type: NgtPortal, selector: "ngt-portal", inputs: ["container", "state", "autoRender", "autoRenderPriority"] }, { kind: "component", type: NgtsRenderTextureContainer, selector: "ngts-render-texture-container", inputs: ["fbo", "renderPriority", "frames", "injector"] }, { kind: "directive", type: NgtPortalContent, selector: "ng-template[portalContent]" }, { kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
181
|
+
}
|
|
182
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsRenderTexture, decorators: [{
|
|
183
|
+
type: Component,
|
|
184
|
+
args: [{
|
|
185
|
+
selector: 'ngts-render-texture',
|
|
186
|
+
standalone: true,
|
|
187
|
+
template: `
|
|
188
|
+
<ngt-portal [container]="virtualScene()" [state]="{ events: { compute: compute(), priority: eventPriority() } }">
|
|
189
|
+
<ng-template portalContent let-injector="injector" let-container="container">
|
|
190
|
+
<ngts-render-texture-container
|
|
191
|
+
[fbo]="fbo()"
|
|
192
|
+
[renderPriority]="renderPriority()"
|
|
193
|
+
[frames]="frames()"
|
|
194
|
+
[injector]="injector"
|
|
195
|
+
>
|
|
196
|
+
<ng-container
|
|
197
|
+
[ngTemplateOutlet]="content()"
|
|
198
|
+
[ngTemplateOutletInjector]="injector"
|
|
199
|
+
[ngTemplateOutletContext]="{ container, injector }"
|
|
200
|
+
/>
|
|
201
|
+
<ngt-group (pointerover)="onPointerOver()" />
|
|
202
|
+
</ngts-render-texture-container>
|
|
203
|
+
</ng-template>
|
|
204
|
+
</ngt-portal>
|
|
205
|
+
|
|
206
|
+
<ngt-primitive *args="[fbo().texture]" [attach]="attach()" [parameters]="parameters()" />
|
|
207
|
+
`,
|
|
208
|
+
imports: [NgtPortal, NgtsRenderTextureContainer, NgtPortalContent, NgtArgs, NgTemplateOutlet],
|
|
209
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
210
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
211
|
+
}]
|
|
212
|
+
}] });
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLXRleHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL3JlbmRlci10ZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxTQUFTLEVBRVQsV0FBVyxFQUNYLFFBQVEsRUFDUixZQUFZLEVBQ1osS0FBSyxHQUNMLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTixPQUFPLEVBRVAsU0FBUyxFQUNULGdCQUFnQixFQUVoQixNQUFNLEVBQ04sYUFBYSxFQUNiLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gsSUFBSSxFQUNKLElBQUksRUFDSixPQUFPLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLE1BQU0sT0FBTyxDQUFDOztBQUVsRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBaUNsQixNQUFNLE9BQU8sMEJBQTBCO0lBUXRDO1FBUEEsUUFBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXFCLENBQUM7UUFDMUMsbUJBQWMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDMUMsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNsQyxhQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBWSxDQUFDO1FBRTlCLFVBQUssR0FBRyxX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QUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUYsQ0FBQyxDQUFDO0tBS0Y7SUFIQSxhQUFhO1FBQ1osVUFBVTtJQUNYLENBQUM7OEdBMUVXLGlCQUFpQjtrR0FBakIsaUJBQWlCLHlYQWdCRyx3QkFBd0IsMkJBQVUsV0FBVyw2Q0F6Q25FOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW9CVCw0REFDUyxTQUFTLDJIQTlGUCwwQkFBMEIsbUlBOEZXLGdCQUFnQix1RUFBRSxPQUFPLGdGQUFFLGdCQUFnQjs7MkZBSWhGLGlCQUFpQjtrQkE1QjdCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFvQlQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLDBCQUEwQixFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQztvQkFDN0YsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUMvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0RGlyZWN0aXZlLFxuXHRJbmplY3Rvcixcblx0VGVtcGxhdGVSZWYsXG5cdGNvbXB1dGVkLFxuXHRjb250ZW50Q2hpbGQsXG5cdGlucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG5cdE5ndEFyZ3MsXG5cdE5ndENvbXB1dGVGdW5jdGlvbixcblx0Tmd0UG9ydGFsLFxuXHROZ3RQb3J0YWxDb250ZW50LFxuXHROZ3RUZXh0dXJlLFxuXHRleHRlbmQsXG5cdGdldExvY2FsU3RhdGUsXG5cdGluamVjdEJlZm9yZVJlbmRlcixcblx0aW5qZWN0U3RvcmUsXG5cdG9taXQsXG5cdHBpY2ssXG5cdHByZXBhcmUsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgaW5qZWN0RkJPIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL21pc2MnO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgR3JvdXAsIE9iamVjdDNELCBTY2VuZSwgV2ViR0xSZW5kZXJUYXJnZXQgfSBmcm9tICd0aHJlZSc7XG5cbmV4dGVuZCh7IEdyb3VwIH0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNSZW5kZXJUZXh0dXJlT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8T21pdDxOZ3RUZXh0dXJlLCAnYXR0YWNoJz4+IHtcblx0LyoqIE9wdGlvbmFsIHdpZHRoIG9mIHRoZSB0ZXh0dXJlLCBkZWZhdWx0cyB0byB2aWV3cG9ydCBib3VuZHMgKi9cblx0d2lkdGg/OiBudW1iZXI7XG5cdC8qKiBPcHRpb25hbCBoZWlnaHQgb2YgdGhlIHRleHR1cmUsIGRlZmF1bHRzIHRvIHZpZXdwb3J0IGJvdW5kcyAqL1xuXHRoZWlnaHQ/OiBudW1iZXI7XG5cdC8qKiBPcHRpb25hbCBmYm8gc2FtcGxlcyAqL1xuXHRzYW1wbGVzOiBudW1iZXI7XG5cdC8qKiBPcHRpb25hbCBzdGVuY2lsIGJ1ZmZlciwgZGVmYXVsdHMgdG8gZmFsc2UgKi9cblx0c3RlbmNpbEJ1ZmZlcjogYm9vbGVhbjtcblx0LyoqIE9wdGlvbmFsIGRlcHRoIGJ1ZmZlciwgZGVmYXVsdHMgdG8gdHJ1ZSAqL1xuXHRkZXB0aEJ1ZmZlcjogYm9vbGVhbjtcblx0LyoqIE9wdGlvbmFsIGdlbmVyYXRlIG1pcG1hcHMsIGRlZmF1bHRzIHRvIGZhbHNlICovXG5cdGdlbmVyYXRlTWlwbWFwczogYm9vbGVhbjtcblx0LyoqIE9wdGlvbmFsIHJlbmRlciBwcmlvcml0eSwgZGVmYXVsdHMgdG8gMCAqL1xuXHRyZW5kZXJQcmlvcml0eTogbnVtYmVyO1xuXHQvKiogT3B0aW9uYWwgZXZlbnQgcHJpb3JpdHksIGRlZmF1bHRzIHRvIDAgKi9cblx0ZXZlbnRQcmlvcml0eTogbnVtYmVyO1xuXHQvKiogT3B0aW9uYWwgZnJhbWUgY291bnQsIGRlZmF1bHRzIHRvIEluZmluaXR5LiBJZiB5b3Ugc2V0IGl0IHRvIDEsIGl0IHdvdWxkIG9ubHkgcmVuZGVyIGEgc2luZ2xlIGZyYW1lLCBldGMgKi9cblx0ZnJhbWVzOiBudW1iZXI7XG5cdC8qKiBPcHRpb25hbCBldmVudCBjb21wdXRlLCBkZWZhdWx0cyB0byB1bmRlZmluZWQgKi9cblx0Y29tcHV0ZT86IChldmVudDogYW55LCBzdGF0ZTogYW55LCBwcmV2aW91czogYW55KSA9PiBmYWxzZSB8IHVuZGVmaW5lZDtcbn1cblxuQENvbXBvbmVudCh7XG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHNlbGVjdG9yOiAnbmd0cy1yZW5kZXItdGV4dHVyZS1jb250YWluZXInLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZy1jb250ZW50IC8+XG5cdGAsXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzUmVuZGVyVGV4dHVyZUNvbnRhaW5lciB7XG5cdGZibyA9IGlucHV0LnJlcXVpcmVkPFdlYkdMUmVuZGVyVGFyZ2V0PigpO1xuXHRyZW5kZXJQcmlvcml0eSA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcblx0ZnJhbWVzID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuXHRpbmplY3RvciA9IGlucHV0LnJlcXVpcmVkPEluamVjdG9yPigpO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGluamVjdEF1dG9FZmZlY3QoKSgoKSA9PiB7XG5cdFx0XHQvLyB0cmFja1xuXHRcdFx0dGhpcy5zdG9yZS5zdGF0ZSgpO1xuXHRcdFx0Y29uc3QgcmVuZGVyUHJpb3JpdHkgPSB0aGlzLnJlbmRlclByaW9yaXR5KCk7XG5cblx0XHRcdGxldCBjb3VudCA9IDA7XG5cdFx0XHRsZXQgb2xkQXV0b0NsZWFyOiBib29sZWFuO1xuXHRcdFx0bGV0IG9sZFhyRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdGxldCBvbGRSZW5kZXJUYXJnZXQ6IFdlYkdMUmVuZGVyVGFyZ2V0IHwgbnVsbDtcblx0XHRcdGxldCBvbGRJc1ByZXNlbnRpbmc6IGJvb2xlYW47XG5cdFx0XHRjb25zdCBzdWIgPSBpbmplY3RCZWZvcmVSZW5kZXIoXG5cdFx0XHRcdCh7IGdsLCBzY2VuZSwgY2FtZXJhIH0pID0+IHtcblx0XHRcdFx0XHRjb25zdCBbZmJvLCBmcmFtZXNdID0gW3RoaXMuZmJvKCksIHRoaXMuZnJhbWVzKCldO1xuXHRcdFx0XHRcdC8vIE5PVEU6IHJlbmRlciAgdGhlIGZyYW1lcyBeIDJcblx0XHRcdFx0XHRpZiAoZnJhbWVzID09PSBJbmZpbml0eSB8fCBjb3VudCA8IGZyYW1lcyAqIGZyYW1lcykge1xuXHRcdFx0XHRcdFx0b2xkQXV0b0NsZWFyID0gZ2wuYXV0b0NsZWFyO1xuXHRcdFx0XHRcdFx0b2xkWHJFbmFibGVkID0gZ2wueHIuZW5hYmxlZDtcblx0XHRcdFx0XHRcdG9sZFJlbmRlclRhcmdldCA9IGdsLmdldFJlbmRlclRhcmdldCgpO1xuXHRcdFx0XHRcdFx0b2xkSXNQcmVzZW50aW5nID0gZ2wueHIuaXNQcmVzZW50aW5nO1xuXHRcdFx0XHRcdFx0Z2wuYXV0b0NsZWFyID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGdsLnhyLmVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGdsLnhyLmlzUHJlc2VudGluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0Z2wuc2V0UmVuZGVyVGFyZ2V0KGZibyk7XG5cdFx0XHRcdFx0XHRnbC5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG5cdFx0XHRcdFx0XHRnbC5zZXRSZW5kZXJUYXJnZXQob2xkUmVuZGVyVGFyZ2V0KTtcblx0XHRcdFx0XHRcdGdsLmF1dG9DbGVhciA9IG9sZEF1dG9DbGVhcjtcblx0XHRcdFx0XHRcdGdsLnhyLmVuYWJsZWQgPSBvbGRYckVuYWJsZWQ7XG5cdFx0XHRcdFx0XHRnbC54ci5pc1ByZXNlbnRpbmcgPSBvbGRJc1ByZXNlbnRpbmc7XG5cdFx0XHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0eyBwcmlvcml0eTogcmVuZGVyUHJpb3JpdHksIGluamVjdG9yOiB0aGlzLmluamVjdG9yKCkgfSxcblx0XHRcdCk7XG5cblx0XHRcdHJldHVybiAoKSA9PiBzdWIoKTtcblx0XHR9KTtcblx0fVxufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c1JlbmRlclRleHR1cmVPcHRpb25zID0ge1xuXHRzYW1wbGVzOiA4LFxuXHRyZW5kZXJQcmlvcml0eTogMCxcblx0ZXZlbnRQcmlvcml0eTogMCxcblx0ZnJhbWVzOiBJbmZpbml0eSxcblx0c3RlbmNpbEJ1ZmZlcjogZmFsc2UsXG5cdGRlcHRoQnVmZmVyOiB0cnVlLFxuXHRnZW5lcmF0ZU1pcG1hcHM6IGZhbHNlLFxufTtcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbcmVuZGVyVGV4dHVyZUNvbnRlbnRdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndHNSZW5kZXJUZXh0dXJlQ29udGVudCB7XG5cdHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKFxuXHRcdF86IE5ndHNSZW5kZXJUZXh0dXJlQ29udGVudCxcblx0XHRjdHg6IHVua25vd24sXG5cdCk6IGN0eCBpcyB7IGNvbnRhaW5lcjogT2JqZWN0M0Q7IGluamVjdG9yOiBJbmplY3RvciB9IHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuXG5sZXQgaW5jcmVtZW50SWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXJlbmRlci10ZXh0dXJlJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LXBvcnRhbCBbY29udGFpbmVyXT1cInZpcnR1YWxTY2VuZSgpXCIgW3N0YXRlXT1cInsgZXZlbnRzOiB7IGNvbXB1dGU6IGNvbXB1dGUoKSwgcHJpb3JpdHk6IGV2ZW50UHJpb3JpdHkoKSB9IH1cIj5cblx0XHRcdDxuZy10ZW1wbGF0ZSBwb3J0YWxDb250ZW50IGxldC1pbmplY3Rvcj1cImluamVjdG9yXCIgbGV0LWNvbnRhaW5lcj1cImNvbnRhaW5lclwiPlxuXHRcdFx0XHQ8bmd0cy1yZW5kZXItdGV4dHVyZS1jb250YWluZXJcblx0XHRcdFx0XHRbZmJvXT1cImZibygpXCJcblx0XHRcdFx0XHRbcmVuZGVyUHJpb3JpdHldPVwicmVuZGVyUHJpb3JpdHkoKVwiXG5cdFx0XHRcdFx0W2ZyYW1lc109XCJmcmFtZXMoKVwiXG5cdFx0XHRcdFx0W2luamVjdG9yXT1cImluamVjdG9yXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxuZy1jb250YWluZXJcblx0XHRcdFx0XHRcdFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnQoKVwiXG5cdFx0XHRcdFx0XHRbbmdUZW1wbGF0ZU91dGxldEluamVjdG9yXT1cImluamVjdG9yXCJcblx0XHRcdFx0XHRcdFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGNvbnRhaW5lciwgaW5qZWN0b3IgfVwiXG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8bmd0LWdyb3VwIChwb2ludGVyb3Zlcik9XCJvblBvaW50ZXJPdmVyKClcIiAvPlxuXHRcdFx0XHQ8L25ndHMtcmVuZGVyLXRleHR1cmUtY29udGFpbmVyPlxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHQ8L25ndC1wb3J0YWw+XG5cblx0XHQ8bmd0LXByaW1pdGl2ZSAqYXJncz1cIltmYm8oKS50ZXh0dXJlXVwiIFthdHRhY2hdPVwiYXR0YWNoKClcIiBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIiAvPlxuXHRgLFxuXHRpbXBvcnRzOiBbTmd0UG9ydGFsLCBOZ3RzUmVuZGVyVGV4dHVyZUNvbnRhaW5lciwgTmd0UG9ydGFsQ29udGVudCwgTmd0QXJncywgTmdUZW1wbGF0ZU91dGxldF0sXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNSZW5kZXJUZXh0dXJlIHtcblx0YXR0YWNoID0gaW5wdXQ8c3RyaW5nIHwgc3RyaW5nW10+KCdtYXAnKTtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFtcblx0XHQnc2FtcGxlcycsXG5cdFx0J3JlbmRlclByaW9yaXR5Jyxcblx0XHQnZXZlbnRQcmlvcml0eScsXG5cdFx0J2ZyYW1lcycsXG5cdFx0J3N0ZW5jaWxCdWZmZXInLFxuXHRcdCdkZXB0aEJ1ZmZlcicsXG5cdFx0J2dlbmVyYXRlTWlwbWFwcycsXG5cdFx0J2NvbXB1dGUnLFxuXHRcdCd3aWR0aCcsXG5cdFx0J2hlaWdodCcsXG5cdF0pO1xuXG5cdGNvbnRlbnQgPSBjb250ZW50Q2hpbGQucmVxdWlyZWQoTmd0c1JlbmRlclRleHR1cmVDb250ZW50LCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRwcml2YXRlIHNpemUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnc2l6ZScpO1xuXHRwcml2YXRlIHZpZXdwb3J0ID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3ZpZXdwb3J0Jyk7XG5cblx0cHJpdmF0ZSBmYm9QYXJhbXMgPSBjb21wdXRlZCgoKSA9PiAoe1xuXHRcdHdpZHRoOiAodGhpcy5vcHRpb25zKCkud2lkdGggfHwgdGhpcy5zaXplKCkud2lkdGgpICogdGhpcy52aWV3cG9ydCgpLmRwcixcblx0XHRoZWlnaHQ6ICh0aGlzLm9wdGlvbnMoKS5oZWlnaHQgfHwgdGhpcy5zaXplKCkuaGVpZ2h0KSAqIHRoaXMudmlld3BvcnQoKS5kcHIsXG5cdFx0c2V0dGluZ3M6IHtcblx0XHRcdHNhbXBsZXM6IHRoaXMub3B0aW9ucygpLnNhbXBsZXMsXG5cdFx0XHRkZXB0aEJ1ZmZlcjogdGhpcy5vcHRpb25zKCkuZGVwdGhCdWZmZXIsXG5cdFx0XHRzdGVuY2lsQnVmZmVyOiB0aGlzLm9wdGlvbnMoKS5zdGVuY2lsQnVmZmVyLFxuXHRcdFx0Z2VuZXJhdGVNaXBtYXBzOiB0aGlzLm9wdGlvbnMoKS5nZW5lcmF0ZU1pcG1hcHMsXG5cdFx0fSxcblx0fSkpO1xuXG5cdHJlbmRlclByaW9yaXR5ID0gcGljayh0aGlzLm9wdGlvbnMsICdyZW5kZXJQcmlvcml0eScpO1xuXHRmcmFtZXMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2ZyYW1lcycpO1xuXHRmYm8gPSBpbmplY3RGQk8odGhpcy5mYm9QYXJhbXMpO1xuXHR2aXJ0dWFsU2NlbmUgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3Qgc2NlbmUgPSBwcmVwYXJlKG5ldyBTY2VuZSgpKTtcblx0XHRzY2VuZS5uYW1lID0gYG5ndHMtcmVuZGVyLXRleHR1cmUtdmlydHVhbC1zY2VuZS0ke2luY3JlbWVudElkKyt9YDtcblx0XHRyZXR1cm4gc2NlbmU7XG5cdH0pO1xuXHRldmVudFByaW9yaXR5ID0gcGljayh0aGlzLm9wdGlvbnMsICdldmVudFByaW9yaXR5Jyk7XG5cdGNvbXB1dGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5jb21wdXRlIHx8IHRoaXMudXZDb21wdXRlKTtcblxuXHR1dkNvbXB1dGU6IE5ndENvbXB1dGVGdW5jdGlvbiA9IChldmVudCwgcm9vdCwgcHJldmlvdXMpID0+IHtcblx0XHRjb25zdCBmYm8gPSB0aGlzLmZibygpO1xuXHRcdGlmICghZmJvKSByZXR1cm47XG5cdFx0Y29uc3Qgc3RhdGUgPSByb290LnNuYXBzaG90O1xuXHRcdGNvbnN0IHByZXZpb3VzU3RhdGUgPSBwcmV2aW91cz8uc25hcHNob3Q7XG5cblx0XHQvLyBTaW5jZSB0aGlzIGlzIG9ubHkgYSB0ZXh0dXJlIGl0IGRvZXMgbm90IGhhdmUgYW4gZWFzeSB3YXkgdG8gb2J0YWluIHRoZSBwYXJlbnQsIHdoaWNoIHdlXG5cdFx0Ly8gbmVlZCB0byB0cmFuc2Zvcm0gZXZlbnQgY29vcmRpbmF0ZXMgdG8gbG9jYWwgY29vcmRpbmF0ZXMuIFdlIHVzZSByM2YgaW50ZXJuYWxzIHRvIGZpbmQgdGhlXG5cdFx0Ly8gbmV4dCBPYmplY3QzRC5cblx0XHRsZXQgcGFyZW50ID0gZ2V0TG9jYWxTdGF0ZShmYm8udGV4dHVyZSk/LnBhcmVudCgpO1xuXHRcdHdoaWxlIChwYXJlbnQgJiYgIShwYXJlbnQgaW5zdGFuY2VvZiBPYmplY3QzRCkpIHtcblx0XHRcdHBhcmVudCA9IGdldExvY2FsU3RhdGUocGFyZW50KT8ucGFyZW50KCk7XG5cdFx0fVxuXG5cdFx0aWYgKCFwYXJlbnQpIHJldHVybjtcblx0XHQvLyBGaXJzdCB3ZSBjYWxsIHRoZSBwcmV2aW91cyBzdGF0ZS1vbmlvbi1sYXllcnMgY29tcHV0ZSwgdGhpcyBpcyB3aGF0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIG5lc3QgcG9ydGFsc1xuXHRcdGlmIChwcmV2aW91c1N0YXRlICYmICFwcmV2aW91c1N0YXRlLnJheWNhc3Rlci5jYW1lcmEpIHtcblx0XHRcdHByZXZpb3VzU3RhdGUuZXZlbnRzLmNvbXB1dGU/LihldmVudCwgcHJldmlvdXMsIHByZXZpb3VzLnNuYXBzaG90LnByZXZpb3VzUm9vdCk7XG5cdFx0fVxuXHRcdC8vIFdlIHJ1biBhIHF1aWNrIGNoZWNrIGFnYWluc3QgdGhlIHBhcmVudCwgaWYgaXQgaXNuJ3QgaGl0IHRoZXJlJ3Mgbm8gbmVlZCB0byByYXljYXN0IGF0IGFsbFxuXHRcdGNvbnN0IFtpbnRlcnNlY3Rpb25dID0gcHJldmlvdXNTdGF0ZT8ucmF5Y2FzdGVyLmludGVyc2VjdE9iamVjdChwYXJlbnQpIHx8IFtdO1xuXHRcdGlmICghaW50ZXJzZWN0aW9uKSByZXR1cm47XG5cdFx0Ly8gV2UgdGFrZSB0aGF0IGhpdHMgdXYgY29vcmRzLCBzZXQgdXAgdGhpcyBsYXllcnMgcmF5Y2FzdGVyLCBldCB2b2lsw6AsIHdlIGhhdmUgcmF5Y2FzdGluZyBvbiBhcmJpdHJhcnkgc3VyZmFjZXNcblx0XHRjb25zdCB1diA9IGludGVyc2VjdGlvbi51djtcblx0XHRpZiAoIXV2KSByZXR1cm47XG5cdFx0c3RhdGUucmF5Y2FzdGVyLnNldEZyb21DYW1lcmEoc3RhdGUucG9pbnRlci5zZXQodXYueCAqIDIgLSAxLCB1di55ICogMiAtIDEpLCBzdGF0ZS5jYW1lcmEpO1xuXHR9O1xuXG5cdG9uUG9pbnRlck92ZXIoKSB7XG5cdFx0Lyogbm9vcCAqL1xuXHR9XG59XG4iXX0=
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, input } from '@angular/core';
|
|
2
|
+
import { NgtArgs, omit, pick, vector3 } from 'angular-three';
|
|
3
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
4
|
+
import { Vector3 } from 'three';
|
|
5
|
+
import { Sky } from 'three-stdlib';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export function calcPosFromAngles(inclination, azimuth, vector = new Vector3()) {
|
|
8
|
+
const theta = Math.PI * (inclination - 0.5);
|
|
9
|
+
const phi = 2 * Math.PI * (azimuth - 0.5);
|
|
10
|
+
vector.x = Math.cos(phi);
|
|
11
|
+
vector.y = Math.sin(theta);
|
|
12
|
+
vector.z = Math.sin(phi);
|
|
13
|
+
return vector;
|
|
14
|
+
}
|
|
15
|
+
const defaultOptions = {
|
|
16
|
+
distance: 1000,
|
|
17
|
+
inclination: 0.6,
|
|
18
|
+
azimuth: 0.1,
|
|
19
|
+
mieCoefficient: 0.005,
|
|
20
|
+
mieDirectionalG: 0.8,
|
|
21
|
+
rayleigh: 0.5,
|
|
22
|
+
turbidity: 10,
|
|
23
|
+
};
|
|
24
|
+
export class NgtsSky {
|
|
25
|
+
constructor() {
|
|
26
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
27
|
+
this.parameters = omit(this.options, [
|
|
28
|
+
'distance',
|
|
29
|
+
'inclination',
|
|
30
|
+
'azimuth',
|
|
31
|
+
'sunPosition',
|
|
32
|
+
'turbidity',
|
|
33
|
+
'mieCoefficient',
|
|
34
|
+
'mieDirectionalG',
|
|
35
|
+
'sunPosition',
|
|
36
|
+
]);
|
|
37
|
+
this.distance = pick(this.options, 'distance');
|
|
38
|
+
this.turbidity = pick(this.options, 'turbidity');
|
|
39
|
+
this.mieCoefficient = pick(this.options, 'mieCoefficient');
|
|
40
|
+
this.mieDirectionalG = pick(this.options, 'mieDirectionalG');
|
|
41
|
+
this.rayleigh = pick(this.options, 'rayleigh');
|
|
42
|
+
this.scale = computed(() => new Vector3().setScalar(this.distance()));
|
|
43
|
+
this.inclination = pick(this.options, 'inclination');
|
|
44
|
+
this.azimuth = pick(this.options, 'azimuth');
|
|
45
|
+
this.sunPosition = vector3(this.options, 'sunPosition', true);
|
|
46
|
+
this.calculatedSunPosition = computed(() => {
|
|
47
|
+
const sunPosition = this.sunPosition();
|
|
48
|
+
if (sunPosition)
|
|
49
|
+
return sunPosition;
|
|
50
|
+
return calcPosFromAngles(this.inclination(), this.azimuth());
|
|
51
|
+
});
|
|
52
|
+
this.sky = new Sky();
|
|
53
|
+
}
|
|
54
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsSky, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
55
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", type: NgtsSky, isStandalone: true, selector: "ngts-sky", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
56
|
+
<ngt-primitive *args="[sky]" [parameters]="parameters()" [scale]="scale()">
|
|
57
|
+
<ngt-value attach="material.uniforms.mieCoefficient.value" [rawValue]="mieCoefficient()" />
|
|
58
|
+
<ngt-value attach="material.uniforms.mieDirectionalG.value" [rawValue]="mieDirectionalG()" />
|
|
59
|
+
<ngt-value attach="material.uniforms.rayleigh.value" [rawValue]="rayleigh()" />
|
|
60
|
+
<ngt-value attach="material.uniforms.sunPosition.value" [rawValue]="calculatedSunPosition()" />
|
|
61
|
+
<ngt-value attach="material.uniforms.turbidity.value" [rawValue]="turbidity()" />
|
|
62
|
+
<ng-content />
|
|
63
|
+
</ngt-primitive>
|
|
64
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
65
|
+
}
|
|
66
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsSky, decorators: [{
|
|
67
|
+
type: Component,
|
|
68
|
+
args: [{
|
|
69
|
+
selector: 'ngts-sky',
|
|
70
|
+
standalone: true,
|
|
71
|
+
template: `
|
|
72
|
+
<ngt-primitive *args="[sky]" [parameters]="parameters()" [scale]="scale()">
|
|
73
|
+
<ngt-value attach="material.uniforms.mieCoefficient.value" [rawValue]="mieCoefficient()" />
|
|
74
|
+
<ngt-value attach="material.uniforms.mieDirectionalG.value" [rawValue]="mieDirectionalG()" />
|
|
75
|
+
<ngt-value attach="material.uniforms.rayleigh.value" [rawValue]="rayleigh()" />
|
|
76
|
+
<ngt-value attach="material.uniforms.sunPosition.value" [rawValue]="calculatedSunPosition()" />
|
|
77
|
+
<ngt-value attach="material.uniforms.turbidity.value" [rawValue]="turbidity()" />
|
|
78
|
+
<ng-content />
|
|
79
|
+
</ngt-primitive>
|
|
80
|
+
`,
|
|
81
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
82
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
83
|
+
imports: [NgtArgs],
|
|
84
|
+
}]
|
|
85
|
+
}] });
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3N0YWdpbmcvc3JjL2xpYi9za3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxPQUFPLEVBQXVCLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBRW5DLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxXQUFtQixFQUFFLE9BQWUsRUFBRSxTQUFrQixJQUFJLE9BQU8sRUFBRTtJQUN0RyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBRTFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXpCLE9BQU8sTUFBTSxDQUFDO0FBQ2YsQ0FBQztBQWFELE1BQU0sY0FBYyxHQUFtQjtJQUN0QyxRQUFRLEVBQUUsSUFBSTtJQUNkLFdBQVcsRUFBRSxHQUFHO0lBQ2hCLE9BQU8sRUFBRSxHQUFHO0lBQ1osY0FBYyxFQUFFLEtBQUs7SUFDckIsZUFBZSxFQUFFLEdBQUc7SUFDcEIsUUFBUSxFQUFFLEdBQUc7SUFDYixTQUFTLEVBQUUsRUFBRTtDQUNiLENBQUM7QUFtQkYsTUFBTSxPQUFPLE9BQU87SUFqQnBCO1FBa0JDLFlBQU8sR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUUsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQy9CLFVBQVU7WUFDVixhQUFhO1lBQ2IsU0FBUztZQUNULGFBQWE7WUFDYixXQUFXO1lBQ1gsZ0JBQWdCO1lBQ2hCLGlCQUFpQjtZQUNqQixhQUFhO1NBQ2IsQ0FBQyxDQUFDO1FBRUgsYUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFDLGNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM1QyxtQkFBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDdEQsb0JBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3hELGFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUUxQyxVQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFekQsZ0JBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNoRCxZQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDeEMsZ0JBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakUsMEJBQXFCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkMsSUFBSSxXQUFXO2dCQUFFLE9BQU8sV0FBVyxDQUFDO1lBQ3BDLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBRyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7S0FDaEI7OEdBL0JZLE9BQU87a0dBQVAsT0FBTyw4TUFkVDs7Ozs7Ozs7O0VBU1QsNERBR1MsT0FBTzs7MkZBRUwsT0FBTztrQkFqQm5CLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7OztFQVNUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0QXJncywgTmd0TWVzaCwgTmd0VmVjdG9yMywgb21pdCwgcGljaywgdmVjdG9yMyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IFNreSB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjUG9zRnJvbUFuZ2xlcyhpbmNsaW5hdGlvbjogbnVtYmVyLCBhemltdXRoOiBudW1iZXIsIHZlY3RvcjogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCkpIHtcblx0Y29uc3QgdGhldGEgPSBNYXRoLlBJICogKGluY2xpbmF0aW9uIC0gMC41KTtcblx0Y29uc3QgcGhpID0gMiAqIE1hdGguUEkgKiAoYXppbXV0aCAtIDAuNSk7XG5cblx0dmVjdG9yLnggPSBNYXRoLmNvcyhwaGkpO1xuXHR2ZWN0b3IueSA9IE1hdGguc2luKHRoZXRhKTtcblx0dmVjdG9yLnogPSBNYXRoLnNpbihwaGkpO1xuXG5cdHJldHVybiB2ZWN0b3I7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c1NreU9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPE9taXQ8Tmd0TWVzaCwgJ3NjYWxlJz4+IHtcblx0ZGlzdGFuY2U6IG51bWJlcjtcblx0aW5jbGluYXRpb246IG51bWJlcjtcblx0YXppbXV0aDogbnVtYmVyO1xuXHRtaWVDb2VmZmljaWVudDogbnVtYmVyO1xuXHRtaWVEaXJlY3Rpb25hbEc6IG51bWJlcjtcblx0cmF5bGVpZ2g6IG51bWJlcjtcblx0dHVyYmlkaXR5OiBudW1iZXI7XG5cdHN1blBvc2l0aW9uPzogTmd0VmVjdG9yMztcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHNTa3lPcHRpb25zID0ge1xuXHRkaXN0YW5jZTogMTAwMCxcblx0aW5jbGluYXRpb246IDAuNixcblx0YXppbXV0aDogMC4xLFxuXHRtaWVDb2VmZmljaWVudDogMC4wMDUsXG5cdG1pZURpcmVjdGlvbmFsRzogMC44LFxuXHRyYXlsZWlnaDogMC41LFxuXHR0dXJiaWRpdHk6IDEwLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1za3knLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtcHJpbWl0aXZlICphcmdzPVwiW3NreV1cIiBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIiBbc2NhbGVdPVwic2NhbGUoKVwiPlxuXHRcdFx0PG5ndC12YWx1ZSBhdHRhY2g9XCJtYXRlcmlhbC51bmlmb3Jtcy5taWVDb2VmZmljaWVudC52YWx1ZVwiIFtyYXdWYWx1ZV09XCJtaWVDb2VmZmljaWVudCgpXCIgLz5cblx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwibWF0ZXJpYWwudW5pZm9ybXMubWllRGlyZWN0aW9uYWxHLnZhbHVlXCIgW3Jhd1ZhbHVlXT1cIm1pZURpcmVjdGlvbmFsRygpXCIgLz5cblx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwibWF0ZXJpYWwudW5pZm9ybXMucmF5bGVpZ2gudmFsdWVcIiBbcmF3VmFsdWVdPVwicmF5bGVpZ2goKVwiIC8+XG5cdFx0XHQ8bmd0LXZhbHVlIGF0dGFjaD1cIm1hdGVyaWFsLnVuaWZvcm1zLnN1blBvc2l0aW9uLnZhbHVlXCIgW3Jhd1ZhbHVlXT1cImNhbGN1bGF0ZWRTdW5Qb3NpdGlvbigpXCIgLz5cblx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwibWF0ZXJpYWwudW5pZm9ybXMudHVyYmlkaXR5LnZhbHVlXCIgW3Jhd1ZhbHVlXT1cInR1cmJpZGl0eSgpXCIgLz5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtcHJpbWl0aXZlPlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRpbXBvcnRzOiBbTmd0QXJnc10sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTa3kge1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgW1xuXHRcdCdkaXN0YW5jZScsXG5cdFx0J2luY2xpbmF0aW9uJyxcblx0XHQnYXppbXV0aCcsXG5cdFx0J3N1blBvc2l0aW9uJyxcblx0XHQndHVyYmlkaXR5Jyxcblx0XHQnbWllQ29lZmZpY2llbnQnLFxuXHRcdCdtaWVEaXJlY3Rpb25hbEcnLFxuXHRcdCdzdW5Qb3NpdGlvbicsXG5cdF0pO1xuXG5cdGRpc3RhbmNlID0gcGljayh0aGlzLm9wdGlvbnMsICdkaXN0YW5jZScpO1xuXHR0dXJiaWRpdHkgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3R1cmJpZGl0eScpO1xuXHRtaWVDb2VmZmljaWVudCA9IHBpY2sodGhpcy5vcHRpb25zLCAnbWllQ29lZmZpY2llbnQnKTtcblx0bWllRGlyZWN0aW9uYWxHID0gcGljayh0aGlzLm9wdGlvbnMsICdtaWVEaXJlY3Rpb25hbEcnKTtcblx0cmF5bGVpZ2ggPSBwaWNrKHRoaXMub3B0aW9ucywgJ3JheWxlaWdoJyk7XG5cblx0c2NhbGUgPSBjb21wdXRlZCgoKSA9PiBuZXcgVmVjdG9yMygpLnNldFNjYWxhcih0aGlzLmRpc3RhbmNlKCkpKTtcblxuXHRwcml2YXRlIGluY2xpbmF0aW9uID0gcGljayh0aGlzLm9wdGlvbnMsICdpbmNsaW5hdGlvbicpO1xuXHRwcml2YXRlIGF6aW11dGggPSBwaWNrKHRoaXMub3B0aW9ucywgJ2F6aW11dGgnKTtcblx0cHJpdmF0ZSBzdW5Qb3NpdGlvbiA9IHZlY3RvcjModGhpcy5vcHRpb25zLCAnc3VuUG9zaXRpb24nLCB0cnVlKTtcblx0Y2FsY3VsYXRlZFN1blBvc2l0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHN1blBvc2l0aW9uID0gdGhpcy5zdW5Qb3NpdGlvbigpO1xuXHRcdGlmIChzdW5Qb3NpdGlvbikgcmV0dXJuIHN1blBvc2l0aW9uO1xuXHRcdHJldHVybiBjYWxjUG9zRnJvbUFuZ2xlcyh0aGlzLmluY2xpbmF0aW9uKCksIHRoaXMuYXppbXV0aCgpKTtcblx0fSk7XG5cblx0c2t5ID0gbmV3IFNreSgpO1xufVxuIl19
|