angular-three-soba 2.0.0-beta.250 → 2.0.0-beta.252
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 +112 -2
- package/abstractions/lib/grid.d.ts +4 -4
- package/cameras/README.md +85 -2
- package/cameras/index.d.ts +1 -0
- package/cameras/lib/cube-camera.d.ts +38 -0
- package/cameras/lib/orthographic-camera.d.ts +1 -1
- package/cameras/lib/perspective-camera.d.ts +1 -1
- package/esm2022/abstractions/lib/grid.mjs +1 -1
- package/esm2022/cameras/index.mjs +2 -1
- package/esm2022/cameras/lib/cube-camera.mjs +111 -0
- package/esm2022/materials/index.mjs +4 -1
- package/esm2022/materials/lib/custom-shader-material.mjs +2 -3
- package/esm2022/materials/lib/mesh-reflector-material.mjs +270 -0
- package/esm2022/materials/lib/mesh-transmission-material.mjs +191 -0
- package/esm2022/materials/lib/mesh-wobble-material.mjs +42 -0
- package/esm2022/shaders/index.mjs +2 -4
- package/esm2022/shaders/lib/grid-material.mjs +2 -2
- package/esm2022/shaders/lib/mesh-wobble-material.mjs +37 -0
- package/esm2022/staging/lib/accumulative-shadows.mjs +3 -3
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +108 -5
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +491 -4
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-shaders.mjs +38 -56
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +2 -2
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/materials/index.d.ts +3 -0
- package/materials/lib/mesh-reflector-material.d.ts +50 -0
- package/materials/lib/mesh-transmission-material.d.ts +78 -0
- package/materials/lib/mesh-wobble-material.d.ts +14 -0
- package/package.json +13 -12
- package/shaders/index.d.ts +1 -3
- package/shaders/lib/grid-material.d.ts +32 -4
- package/shaders/lib/mesh-wobble-material.d.ts +24 -0
- package/staging/lib/accumulative-shadows.d.ts +1 -1
- package/staging/lib/center.d.ts +8 -8
- package/staging/lib/contact-shadows.d.ts +1 -1
- package/staging/lib/lightformer.d.ts +7 -7
- package/esm2022/shaders/lib/discard-material.mjs +0 -3
- package/esm2022/shaders/lib/shader-material.mjs +0 -31
- package/esm2022/shaders/lib/soft-shadow-material.mjs +0 -26
- package/shaders/lib/discard-material.d.ts +0 -3
- package/shaders/lib/shader-material.d.ts +0 -6
- package/shaders/lib/soft-shadow-material.d.ts +0 -19
package/README.md
CHANGED
|
@@ -1,7 +1,65 @@
|
|
|
1
|
-
# soba
|
|
1
|
+
# `angular-three-soba`
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`angular-three-soba` provides a comprehensive set of utilities and abstractions for building 3D applications with Angular Three. It offers components and helpers for various aspects of your projects, including cameras, controls, loaders, materials, shaders, and more. These components are ported from the popular React Three Fiber [`drei`](https://github.com/pmndrs/drei) library, making it easier for developers familiar with `drei` to leverage its functionality within the Angular ecosystem.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Installation
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
```bash
|
|
8
|
+
npm install angular-three-soba three-stdlib @monogrid/gainmap-js @pmndrs/vanilla
|
|
9
|
+
# yarn add angular-three-soba three-stdlib @monogrid/gainmap-js @pmndrs/vanilla
|
|
10
|
+
# pnpm add angular-three-soba three-stdlib @monogrid/gainmap-js @pmndrs/vanilla
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
> There are more peer dependencies that the consumers might need to install separately based on the secondary entry points that they pull in
|
|
14
|
+
|
|
15
|
+
## Secondary Entry Points
|
|
16
|
+
|
|
17
|
+
`angular-three-soba` is organized into multiple secondary entry points, each focusing on a specific area of functionality. This modular structure allows you to import only the components you need, keeping your project lean and efficient.
|
|
18
|
+
|
|
19
|
+
### `angular-three-soba/abstractions`
|
|
20
|
+
|
|
21
|
+
Provides abstract components and patterns for building reusable and composable 3D elements in Angular Three.
|
|
22
|
+
|
|
23
|
+
[Read more about `angular-three-soba/abstractions`](./abstractions/README.md)
|
|
24
|
+
|
|
25
|
+
### `angular-three-soba/cameras`
|
|
26
|
+
|
|
27
|
+
Offers a variety of camera components, including specialized cameras like the `CubeCamera`, `OrthographicCamera`, and `PerspectiveCamera`, as well as helper components for camera controls.
|
|
28
|
+
|
|
29
|
+
[Read more about `angular-three-soba/cameras`](./cameras/README.md)
|
|
30
|
+
|
|
31
|
+
### `angular-three-soba/controls`
|
|
32
|
+
|
|
33
|
+
Includes components for user interaction and camera manipulation, such as the `OrbitControls`, `PointerLockControls`, and `TransformControls`.
|
|
34
|
+
|
|
35
|
+
[Read more about `angular-three-soba/controls`](./controls/README.md)
|
|
36
|
+
|
|
37
|
+
### `angular-three-soba/loaders`
|
|
38
|
+
|
|
39
|
+
Provides loaders for different types of 3D assets, including GLTF, texture, cube texture, HDR, and more.
|
|
40
|
+
|
|
41
|
+
[Read more about `angular-three-soba/loaders`](./loaders/README.md)
|
|
42
|
+
|
|
43
|
+
### `angular-three-soba/materials`
|
|
44
|
+
|
|
45
|
+
Offers a collection of materials with advanced features, such as `MeshReflectorMaterial`, `PhysicalMaterial`, `ShaderMaterial`, and `NormalMaterial`.
|
|
46
|
+
|
|
47
|
+
[Read more about `angular-three-soba/materials`](./materials/README.md)
|
|
48
|
+
|
|
49
|
+
### `angular-three-soba/misc`
|
|
50
|
+
|
|
51
|
+
Contains miscellaneous components for various tasks, like the `Stats` component for displaying performance statistics, the `Shadow` component for rendering shadows, and the `Text` component for adding 3D text.
|
|
52
|
+
|
|
53
|
+
[Read more about `angular-three-soba/misc`](./misc/README.md)
|
|
54
|
+
|
|
55
|
+
### `angular-three-soba/shaders`
|
|
56
|
+
|
|
57
|
+
Includes shader components and utilities for creating custom shaders and post-processing effects.
|
|
58
|
+
|
|
59
|
+
[Read more about `angular-three-soba/shaders`](./shaders/README.md)
|
|
60
|
+
|
|
61
|
+
### `angular-three-soba/staging`
|
|
62
|
+
|
|
63
|
+
Provides helpful components for staging and managing 3D scenes, such as the `Environment` component for setting up environment lighting, the `Stage` component for creating a basic stage setup, and the `PresentationControls` component for interactive scene presentations.
|
|
64
|
+
|
|
65
|
+
[Read more about `angular-three-soba/staging`](./staging/README.md)
|
package/abstractions/README.md
CHANGED
|
@@ -1,3 +1,113 @@
|
|
|
1
|
-
# angular-three-soba/abstractions
|
|
1
|
+
# `angular-three-soba/abstractions`
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This module provides abstract components and patterns for building reusable and composable 3D elements in Angular Three. It requires the following peer dependencies:
|
|
4
|
+
|
|
5
|
+
| Package | Description |
|
|
6
|
+
| ------------------- | -------------------------------------------- |
|
|
7
|
+
| `troika-three-text` | Required for using the `NgtsText` component. |
|
|
8
|
+
|
|
9
|
+
To install these dependencies, use one of the following commands:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install troika-three-text
|
|
13
|
+
# yarn add troika-three-text
|
|
14
|
+
# pnpm add troika-three-text
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## NgtsGrid
|
|
18
|
+
|
|
19
|
+
A y-up oriented, shader-based grid implementation.
|
|
20
|
+
|
|
21
|
+
This component renders a grid using a shader material, allowing for efficient rendering of large grids. It provides options to customize the appearance of the grid, such as cell size, cell thickness, cell color, section size, section thickness, section color, and more.
|
|
22
|
+
|
|
23
|
+
### Object Inputs (NgtsGridOptions)
|
|
24
|
+
|
|
25
|
+
| Property | Description | Default Value |
|
|
26
|
+
| ------------------ | ------------------------------------------------------------------------------------------------------------ | ----------------- |
|
|
27
|
+
| `planeArgs` | Default plane-geometry arguments. | `[]` |
|
|
28
|
+
| `cellSize` | Cell size. | `0.5` |
|
|
29
|
+
| `cellThickness` | Cell thickness. | `0.5` |
|
|
30
|
+
| `cellColor` | Cell color. | `'black'` |
|
|
31
|
+
| `sectionSize` | Section size. | `1` |
|
|
32
|
+
| `sectionThickness` | Section thickness. | `1` |
|
|
33
|
+
| `sectionColor` | Section color. | `'#2080ff'` |
|
|
34
|
+
| `infiniteGrid` | Display the grid infinitely. | `false` |
|
|
35
|
+
| `followCamera` | Follow camera. | `false` |
|
|
36
|
+
| `fadeDistance` | Fade distance. | `100` |
|
|
37
|
+
| `fadeStrength` | Fade strength. | `1` |
|
|
38
|
+
| `fadeFrom` | Fade from camera (1) or origin (0), or somewhere in between. | `'camera'` |
|
|
39
|
+
| `side` | Which side of the faces will be rendered. Can be `THREE.FrontSide`, `THREE.BackSide`, or `THREE.DoubleSide`. | `THREE.FrontSide` |
|
|
40
|
+
|
|
41
|
+
```html
|
|
42
|
+
<ngts-grid />
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## NgtsText
|
|
46
|
+
|
|
47
|
+
High-quality text rendering with signed distance fields (SDF) and antialiasing, using `troika-three-text`
|
|
48
|
+
|
|
49
|
+
This component renders high-quality text using SDF and antialiasing techniques. It supports various options for customizing the appearance of the text, such as font, font size, color, alignment, and more.
|
|
50
|
+
|
|
51
|
+
### Object Inputs (NgtsTextOptions)
|
|
52
|
+
|
|
53
|
+
| Property | Description | Default Value |
|
|
54
|
+
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------- |
|
|
55
|
+
| `text` | (Required) Text content. | |
|
|
56
|
+
| `font` | Font family or URL. | `undefined` |
|
|
57
|
+
| `fontSize` | Font size. | `1` |
|
|
58
|
+
| `color` | Text color. | `'black'` |
|
|
59
|
+
| `fontWeight` | Font weight. | `'normal'` |
|
|
60
|
+
| `fontStyle` | Font style. | `'normal'` |
|
|
61
|
+
| `maxWidth` | Maximum width of the text block. | `undefined` |
|
|
62
|
+
| `lineHeight` | Line height. | `1` |
|
|
63
|
+
| `letterSpacing` | Letter spacing. | `0` |
|
|
64
|
+
| `textAlign` | Text alignment. | `'left'` |
|
|
65
|
+
| `anchorX` | Horizontal anchor point. Can be `'left'`, `'center'`, `'right'`, or a number between 0 and 1. | `'center'` |
|
|
66
|
+
| `anchorY` | Vertical anchor point. Can be `'top'`, `'top-baseline'`, `'middle'`, `'bottom-baseline'`, `'bottom'`, or a number between 0 and 1. | `'middle'` |
|
|
67
|
+
| `clipRect` | Clip rectangle. | `undefined` |
|
|
68
|
+
| `depthOffset` | Depth offset. | `0` |
|
|
69
|
+
| `direction` | Text direction. Can be `'auto'`, `'ltr'`, or `'rtl'`. | `'auto'` |
|
|
70
|
+
| `overflowWrap` | Overflow wrap. Can be `'normal'` or `'break-word'`. | `'normal'` |
|
|
71
|
+
| `whiteSpace` | White space. Can be `'normal'` or `'nowrap'`. | `'normal'` |
|
|
72
|
+
| `outlineWidth` | Outline width. | `0` |
|
|
73
|
+
| `outlineOffsetX` | Outline X offset. | `0` |
|
|
74
|
+
| `outlineOffsetY` | Outline Y offset. | `0` |
|
|
75
|
+
| `outlineBlur` | Outline blur. | `0` |
|
|
76
|
+
| `outlineColor` | Outline color. | `'black'` |
|
|
77
|
+
| `outlineOpacity` | Outline opacity. | `1` |
|
|
78
|
+
| `strokeWidth` | Stroke width. | `0` |
|
|
79
|
+
| `strokeColor` | Stroke color. | `'black'` |
|
|
80
|
+
| `strokeOpacity` | Stroke opacity. | `1` |
|
|
81
|
+
| `fillOpacity` | Fill opacity. | `1` |
|
|
82
|
+
| `sdfGlyphSize` | SDF glyph size. | `64` |
|
|
83
|
+
| `debugSDF` | Debug SDF. | `false` |
|
|
84
|
+
|
|
85
|
+
```html
|
|
86
|
+
<ngts-text text="Hello, World!" />
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## NgtsText3D
|
|
90
|
+
|
|
91
|
+
Renders 3D text using ThreeJS's TextGeometry.
|
|
92
|
+
|
|
93
|
+
This component renders 3D text using TextGeometry. It requires fonts in JSON format generated through typeface.json.
|
|
94
|
+
|
|
95
|
+
### Object Inputs (NgtsText3DOptions)
|
|
96
|
+
|
|
97
|
+
| Property | Description | Default Value |
|
|
98
|
+
| ---------------- | ------------------------ | ------------- |
|
|
99
|
+
| `text` | (Required) Text content. | |
|
|
100
|
+
| `font` | Font family or URL. | `undefined` |
|
|
101
|
+
| `size` | Font size. | `1` |
|
|
102
|
+
| `height` | Text height. | `0.2` |
|
|
103
|
+
| `curveSegments` | Curve segments. | `8` |
|
|
104
|
+
| `bevelEnabled` | Enable bevel. | `false` |
|
|
105
|
+
| `bevelThickness` | Bevel thickness. | `0.1` |
|
|
106
|
+
| `bevelSize` | Bevel size. | `0.01` |
|
|
107
|
+
| `bevelOffset` | Bevel offset. | `0` |
|
|
108
|
+
| `bevelSegments` | Bevel segments. | `4` |
|
|
109
|
+
| `smooth` | Smoothness level. | `undefined` |
|
|
110
|
+
|
|
111
|
+
```html
|
|
112
|
+
<ngts-text-3d text="Hello, World!" [options]="{ font: 'path/to/font.json' }" />
|
|
113
|
+
```
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ElementRef } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { GridMaterialOptions } from 'angular-three-soba/shaders';
|
|
3
3
|
import { Mesh, Vector3 } from 'three';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class NgtsGrid {
|
|
@@ -104,7 +104,7 @@ export declare class NgtsGrid {
|
|
|
104
104
|
quaternion: import("angular-three").NgtQuaternion;
|
|
105
105
|
layers: import("angular-three").NgtLayers;
|
|
106
106
|
dispose: (() => void) | null;
|
|
107
|
-
}> &
|
|
107
|
+
}> & GridMaterialOptions & {
|
|
108
108
|
planeArgs: [width?: number | undefined, height?: number | undefined, widthSegments?: number | undefined, heightSegments?: number | undefined];
|
|
109
109
|
}, "" | Partial<Partial<{
|
|
110
110
|
attach: string | string[] | import("angular-three").NgtAttachFunction;
|
|
@@ -207,7 +207,7 @@ export declare class NgtsGrid {
|
|
|
207
207
|
quaternion: import("angular-three").NgtQuaternion;
|
|
208
208
|
layers: import("angular-three").NgtLayers;
|
|
209
209
|
dispose: (() => void) | null;
|
|
210
|
-
}> &
|
|
210
|
+
}> & GridMaterialOptions & {
|
|
211
211
|
planeArgs: [width?: number | undefined, height?: number | undefined, widthSegments?: number | undefined, heightSegments?: number | undefined];
|
|
212
212
|
}>>;
|
|
213
213
|
parameters: import("@angular/core").Signal<Omit<Partial<{
|
|
@@ -311,7 +311,7 @@ export declare class NgtsGrid {
|
|
|
311
311
|
quaternion: import("angular-three").NgtQuaternion;
|
|
312
312
|
layers: import("angular-three").NgtLayers;
|
|
313
313
|
dispose: (() => void) | null;
|
|
314
|
-
}> &
|
|
314
|
+
}> & GridMaterialOptions & {
|
|
315
315
|
planeArgs: [width?: number | undefined, height?: number | undefined, widthSegments?: number | undefined, heightSegments?: number | undefined];
|
|
316
316
|
}, "planeArgs" | "cellSize" | "cellThickness" | "cellColor" | "sectionSize" | "sectionThickness" | "sectionColor" | "infiniteGrid" | "followCamera" | "fadeDistance" | "fadeStrength" | "fadeFrom" | "side">>;
|
|
317
317
|
mesh: import("@angular/core").Signal<ElementRef<Mesh<import("three").BufferGeometry<import("three").NormalBufferAttributes>, import("three").Material | import("three").Material[], import("three").Object3DEventMap>>>;
|
package/cameras/README.md
CHANGED
|
@@ -1,3 +1,86 @@
|
|
|
1
|
-
# angular-three-soba/cameras
|
|
1
|
+
# `angular-three-soba/cameras`
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This module provides a variety of camera components for Angular Three, including specialized cameras and helper components for camera controls.
|
|
4
|
+
|
|
5
|
+
All camera implementations share the following features:
|
|
6
|
+
|
|
7
|
+
- `makeDefault` option: Allows the consumer to make this camera the default camera in the Canvas Store (via injectStore()). Default is `false`.
|
|
8
|
+
- `manual` option: Allows the consumer to take over updating the camera. When set to `true`, the camera won't be responsive, and the consumer will need to update its properties upon viewport change. Default is `false`.
|
|
9
|
+
- `cameraContent` directive: Allows you to render content from the perspective of the camera. This can be used for various effects, including portals, minimaps, security cameras, picture-in-picture, and rendering to textures.
|
|
10
|
+
|
|
11
|
+
Within the template of the `cameraContent` directive, you have access to a `texture` variable representing the rendered view. This `texture` is of type `Signal<Texture>`.
|
|
12
|
+
|
|
13
|
+
```html
|
|
14
|
+
<ngts-perspective-camera>
|
|
15
|
+
<ngt-mesh *cameraContent="let texture">
|
|
16
|
+
<ngt-mesh-basic-material [map]="texture()" />
|
|
17
|
+
</ngt-mesh>
|
|
18
|
+
</ngts-perspective-camera>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## NgtsPerspectiveCamera
|
|
22
|
+
|
|
23
|
+
A responsive `THREE.PerspectiveCamera` that can be set as the default camera. By default, it automatically tracks the size of the canvas and updates accordingly.
|
|
24
|
+
|
|
25
|
+
### Object Inputs (NgtsPerspectiveCameraOptions)
|
|
26
|
+
|
|
27
|
+
| Property | Description | Default value |
|
|
28
|
+
| -------- | ------------------------- | ------------- |
|
|
29
|
+
| fov | Field of view in degrees. | 50 |
|
|
30
|
+
| near | Near clipping plane. | 0.1 |
|
|
31
|
+
| far | Far clipping plane. | 1000 |
|
|
32
|
+
|
|
33
|
+
### Usage
|
|
34
|
+
|
|
35
|
+
```html
|
|
36
|
+
<ngts-perspective-camera [options]="{ makeDefault: true, fov: 75, near: 0.1, far: 1000 }" />
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## NgtsOrthographicCamera
|
|
40
|
+
|
|
41
|
+
A responsive `THREE.OrthographicCamera` that can be set as the default camera. By default, it automatically tracks the size of the canvas and updates accordingly.
|
|
42
|
+
|
|
43
|
+
### Object Inputs (NgtsOrthographicCameraOptions)
|
|
44
|
+
|
|
45
|
+
| Property | Description | Default value |
|
|
46
|
+
| -------- | ------------------------------------------- | ------------- |
|
|
47
|
+
| left | Camera frustum left plane. | -1 |
|
|
48
|
+
| right | Camera frustum right plane. | 1 |
|
|
49
|
+
| top | Camera frustum top plane. | 1 |
|
|
50
|
+
| bottom | Camera frustum bottom plane. | -1 |
|
|
51
|
+
| near | Camera frustum near plane. | 0.1 |
|
|
52
|
+
| far | Camera frustum far plane. | 1000 |
|
|
53
|
+
| zoom | Gets or sets the zoom factor of the camera. | 1 |
|
|
54
|
+
|
|
55
|
+
### Usage
|
|
56
|
+
|
|
57
|
+
```html
|
|
58
|
+
<ngts-orthographic-camera
|
|
59
|
+
[options]="{ makeDefault: true, left: -10, right: 10, top: 10, bottom: -10, near: 0.1, far: 1000 }"
|
|
60
|
+
/>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## NgtsCubeCamera
|
|
64
|
+
|
|
65
|
+
A responsive `THREE.CubeCamera` that renders to a `WebGLCubeRenderTarget`. You can either use it as a regular environment map or use it for the `NgtsCameraContent` directive for more advanced use cases.
|
|
66
|
+
|
|
67
|
+
### Object Inputs (NgtsCubeCameraOptions)
|
|
68
|
+
|
|
69
|
+
| Property | Description | Default value |
|
|
70
|
+
| ---------- | ------------------------------ | ------------- |
|
|
71
|
+
| near | Near clipping plane. | 0.1 |
|
|
72
|
+
| far | Far clipping plane. | 1000 |
|
|
73
|
+
| resolution | Cube render target resolution. | 256 |
|
|
74
|
+
| frames | Number of frames to render. | 1 |
|
|
75
|
+
| envMap | Custom environment map. | null |
|
|
76
|
+
| fog | Custom fog. | null |
|
|
77
|
+
|
|
78
|
+
### Usage
|
|
79
|
+
|
|
80
|
+
```html
|
|
81
|
+
<ngts-cube-camera [options]="{ near: 0.1, far: 1000, resolution: 256 }">
|
|
82
|
+
<ngt-mesh *cameraContent="let texture">
|
|
83
|
+
<ngt-mesh-basic-material [map]="texture()" />
|
|
84
|
+
</ngt-mesh>
|
|
85
|
+
</ngts-cube-camera>
|
|
86
|
+
```
|
package/cameras/index.d.ts
CHANGED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ElementRef, Injector, TemplateRef } from '@angular/core';
|
|
2
|
+
import { NgtGroup } from 'angular-three';
|
|
3
|
+
import { CubeCamera, Fog, FogExp2, Group, Texture, WebGLCubeRenderTarget } from 'three';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export interface CubeCameraOptions {
|
|
6
|
+
/** Resolution of the FBO, 256 */
|
|
7
|
+
resolution?: number;
|
|
8
|
+
/** Camera near, 0.1 */
|
|
9
|
+
near?: number;
|
|
10
|
+
/** Camera far, 1000 */
|
|
11
|
+
far?: number;
|
|
12
|
+
/** Custom environment map that is temporarily set as the scenes background */
|
|
13
|
+
envMap?: Texture;
|
|
14
|
+
/** Custom fog that is temporarily set as the scenes fog */
|
|
15
|
+
fog?: Fog | FogExp2;
|
|
16
|
+
}
|
|
17
|
+
export declare function injectCubeCamera(options: () => CubeCameraOptions, { injector }?: {
|
|
18
|
+
injector?: Injector;
|
|
19
|
+
}): {
|
|
20
|
+
fbo: import("@angular/core").Signal<WebGLCubeRenderTarget>;
|
|
21
|
+
camera: import("@angular/core").Signal<CubeCamera>;
|
|
22
|
+
update: import("@angular/core").Signal<() => void>;
|
|
23
|
+
};
|
|
24
|
+
export interface NgtsCubeCameraOptions extends Partial<NgtGroup>, CubeCameraOptions {
|
|
25
|
+
frames: number;
|
|
26
|
+
}
|
|
27
|
+
export declare class NgtsCubeCamera {
|
|
28
|
+
options: import("@angular/core").InputSignalWithTransform<NgtsCubeCameraOptions, "" | Partial<NgtsCubeCameraOptions>>;
|
|
29
|
+
parameters: import("@angular/core").Signal<Omit<NgtsCubeCameraOptions, "resolution" | "near" | "far" | "envMap" | "fog" | "frames">>;
|
|
30
|
+
private cubeCamera;
|
|
31
|
+
camera: import("@angular/core").Signal<CubeCamera>;
|
|
32
|
+
texture: import("@angular/core").Signal<import("three").CubeTexture>;
|
|
33
|
+
group: import("@angular/core").Signal<ElementRef<Group<import("three").Object3DEventMap>>>;
|
|
34
|
+
cameraContent: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
35
|
+
constructor();
|
|
36
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsCubeCamera, never>;
|
|
37
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsCubeCamera, "ngts-cube-camera", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; }, {}, ["cameraContent"], never, true, never>;
|
|
38
|
+
}
|
|
@@ -16,7 +16,7 @@ export interface NgtsOrthographicCameraOptions extends Partial<NgtOrthographicCa
|
|
|
16
16
|
}
|
|
17
17
|
export declare class NgtsOrthographicCamera {
|
|
18
18
|
options: import("@angular/core").InputSignalWithTransform<NgtsOrthographicCameraOptions, "" | Partial<NgtsOrthographicCameraOptions>>;
|
|
19
|
-
parameters: import("@angular/core").Signal<Omit<NgtsOrthographicCameraOptions, "
|
|
19
|
+
parameters: import("@angular/core").Signal<Omit<NgtsOrthographicCameraOptions, "resolution" | "envMap" | "frames" | "left" | "right" | "top" | "bottom" | "makeDefault" | "manual">>;
|
|
20
20
|
content: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
21
21
|
cameraContent: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
22
22
|
cameraRef: import("@angular/core").Signal<ElementRef<OrthographicCamera>>;
|
|
@@ -16,7 +16,7 @@ export interface NgtsPerspectiveCameraOptions extends Partial<NgtPerspectiveCame
|
|
|
16
16
|
}
|
|
17
17
|
export declare class NgtsPerspectiveCamera {
|
|
18
18
|
options: import("@angular/core").InputSignalWithTransform<NgtsPerspectiveCameraOptions, "" | Partial<NgtsPerspectiveCameraOptions>>;
|
|
19
|
-
parameters: import("@angular/core").Signal<Omit<NgtsPerspectiveCameraOptions, "
|
|
19
|
+
parameters: import("@angular/core").Signal<Omit<NgtsPerspectiveCameraOptions, "resolution" | "envMap" | "frames" | "makeDefault" | "manual">>;
|
|
20
20
|
content: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
21
21
|
cameraContent: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
22
22
|
cameraRef: import("@angular/core").Signal<ElementRef<PerspectiveCamera>>;
|
|
@@ -100,4 +100,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
100
100
|
imports: [NgtArgs],
|
|
101
101
|
}]
|
|
102
102
|
}], ctorParameters: () => [] });
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9ncmlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixzQkFBc0IsRUFFdEIsS0FBSyxFQUNMLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBVyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxZQUFZLEVBQXVCLE1BQU0sNEJBQTRCLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQTJCLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFFL0YsTUFBTSxjQUFjLEdBQ2dFO0lBQ25GLFNBQVMsRUFBRSxFQUFFO0lBQ2IsUUFBUSxFQUFFLEdBQUc7SUFDYixhQUFhLEVBQUUsR0FBRztJQUNsQixTQUFTLEVBQUUsT0FBTztJQUNsQixXQUFXLEVBQUUsQ0FBQztJQUNkLGdCQUFnQixFQUFFLENBQUM7SUFDbkIsWUFBWSxFQUFFLFNBQVM7SUFDdkIsWUFBWSxFQUFFLEtBQUs7SUFDbkIsWUFBWSxFQUFFLEtBQUs7SUFDbkIsWUFBWSxFQUFFLEdBQUc7SUFDakIsWUFBWSxFQUFFLENBQUM7SUFDZixRQUFRLEVBQUUsQ0FBQztJQUNYLElBQUksRUFBRSxRQUFRO0NBQ2QsQ0FBQztBQWtCRixNQUFNLE9BQU8sUUFBUTtJQXVEcEI7UUF0REEsWUFBTyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMs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QU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0RWxlbWVudFJlZixcblx0aW5wdXQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGluamVjdEJlZm9yZVJlbmRlciwgTmd0QXJncywgTmd0TWVzaCwgb21pdCwgcGljayB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgR3JpZE1hdGVyaWFsLCBHcmlkTWF0ZXJpYWxPcHRpb25zIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL3NoYWRlcnMnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgQmFja1NpZGUsIE1lc2gsIFBsYW5lLCBQbGFuZUdlb21ldHJ5LCBTaGFkZXJNYXRlcmlhbCwgVW5pZm9ybSwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IFBhcnRpYWw8Tmd0TWVzaD4gJlxuXHRHcmlkTWF0ZXJpYWxPcHRpb25zICYgeyBwbGFuZUFyZ3M6IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUGxhbmVHZW9tZXRyeT4gfSA9IHtcblx0cGxhbmVBcmdzOiBbXSxcblx0Y2VsbFNpemU6IDAuNSxcblx0Y2VsbFRoaWNrbmVzczogMC41LFxuXHRjZWxsQ29sb3I6ICdibGFjaycsXG5cdHNlY3Rpb25TaXplOiAxLFxuXHRzZWN0aW9uVGhpY2tuZXNzOiAxLFxuXHRzZWN0aW9uQ29sb3I6ICcjMjA4MGZmJyxcblx0aW5maW5pdGVHcmlkOiBmYWxzZSxcblx0Zm9sbG93Q2FtZXJhOiBmYWxzZSxcblx0ZmFkZURpc3RhbmNlOiAxMDAsXG5cdGZhZGVTdHJlbmd0aDogMSxcblx0ZmFkZUZyb206IDEsXG5cdHNpZGU6IEJhY2tTaWRlLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1ncmlkJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LW1lc2ggI21lc2ggW2ZydXN0dW1DdWxsZWRdPVwiZmFsc2VcIiBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZ3QtcGxhbmUtZ2VvbWV0cnkgKmFyZ3M9XCJwbGFuZUFyZ3MoKVwiIC8+XG5cdFx0XHQ8bmd0LWdyaWQtbWF0ZXJpYWwgW3RyYW5zcGFyZW50XT1cInRydWVcIiBbc2lkZV09XCJzaWRlKClcIiBbcGFyYW1ldGVyc109XCJ1bmlmb3JtcygpXCI+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwiZXh0ZW5zaW9ucy5kZXJpdmF0aXZlc1wiIFtyYXdWYWx1ZV09XCJ0cnVlXCIgLz5cblx0XHRcdDwvbmd0LWdyaWQtbWF0ZXJpYWw+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LW1lc2g+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtOZ3RBcmdzXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0dyaWQge1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgW1xuXHRcdCdwbGFuZUFyZ3MnLFxuXHRcdCdjZWxsU2l6ZScsXG5cdFx0J2NlbGxUaGlja25lc3MnLFxuXHRcdCdjZWxsQ29sb3InLFxuXHRcdCdzZWN0aW9uU2l6ZScsXG5cdFx0J3NlY3Rpb25UaGlja25lc3MnLFxuXHRcdCdzZWN0aW9uQ29sb3InLFxuXHRcdCdpbmZpbml0ZUdyaWQnLFxuXHRcdCdmb2xsb3dDYW1lcmEnLFxuXHRcdCdmYWRlRGlzdGFuY2UnLFxuXHRcdCdmYWRlU3RyZW5ndGgnLFxuXHRcdCdmYWRlRnJvbScsXG5cdFx0J3NpZGUnLFxuXHRdKTtcblxuXHRtZXNoID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8TWVzaD4+KCdtZXNoJyk7XG5cblx0cHJpdmF0ZSBwbGFuZSA9IG5ldyBQbGFuZSgpO1xuXHRwcml2YXRlIHVwVmVjdG9yID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XG5cdHByaXZhdGUgemVyb1ZlY3RvciA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xuXG5cdHBsYW5lQXJncyA9IHBpY2sodGhpcy5vcHRpb25zLCAncGxhbmVBcmdzJyk7XG5cdHNpZGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NpZGUnKTtcblx0dW5pZm9ybXMgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0Y2VsbFNpemUsXG5cdFx0XHRzZWN0aW9uU2l6ZSxcblx0XHRcdGNlbGxDb2xvcixcblx0XHRcdHNlY3Rpb25Db2xvcixcblx0XHRcdGNlbGxUaGlja25lc3MsXG5cdFx0XHRzZWN0aW9uVGhpY2tuZXNzLFxuXHRcdFx0ZmFkZURpc3RhbmNlLFxuXHRcdFx0ZmFkZVN0cmVuZ3RoLFxuXHRcdFx0ZmFkZUZyb20sXG5cdFx0XHRpbmZpbml0ZUdyaWQsXG5cdFx0XHRmb2xsb3dDYW1lcmEsXG5cdFx0fSA9IHRoaXMub3B0aW9ucygpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjZWxsU2l6ZSxcblx0XHRcdHNlY3Rpb25TaXplLFxuXHRcdFx0Y2VsbENvbG9yLFxuXHRcdFx0c2VjdGlvbkNvbG9yLFxuXHRcdFx0Y2VsbFRoaWNrbmVzcyxcblx0XHRcdHNlY3Rpb25UaGlja25lc3MsXG5cdFx0XHRmYWRlRGlzdGFuY2UsXG5cdFx0XHRmYWRlU3RyZW5ndGgsXG5cdFx0XHRmYWRlRnJvbSxcblx0XHRcdGluZmluaXRlR3JpZCxcblx0XHRcdGZvbGxvd0NhbWVyYSxcblx0XHR9O1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBNZXNoLCBQbGFuZUdlb21ldHJ5LCBHcmlkTWF0ZXJpYWwgfSk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKHsgY2FtZXJhIH0pID0+IHtcblx0XHRcdGNvbnN0IG1lc2ggPSB0aGlzLm1lc2goKS5uYXRpdmVFbGVtZW50O1xuXG5cdFx0XHR0aGlzLnBsYW5lLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHRoaXMudXBWZWN0b3IsIHRoaXMuemVyb1ZlY3RvcikuYXBwbHlNYXRyaXg0KG1lc2gubWF0cml4V29ybGQpO1xuXG5cdFx0XHRjb25zdCBncmlkTWF0ZXJpYWwgPSBtZXNoLm1hdGVyaWFsIGFzIFNoYWRlck1hdGVyaWFsO1xuXHRcdFx0Y29uc3Qgd29ybGRDYW1Qcm9qUG9zaXRpb24gPSBncmlkTWF0ZXJpYWwudW5pZm9ybXNbJ3dvcmxkQ2FtUHJvalBvc2l0aW9uJ10gYXMgVW5pZm9ybTxWZWN0b3IzPjtcblx0XHRcdGNvbnN0IHdvcmxkUGxhbmVQb3NpdGlvbiA9IGdyaWRNYXRlcmlhbC51bmlmb3Jtc1snd29ybGRQbGFuZVBvc2l0aW9uJ10gYXMgVW5pZm9ybTxWZWN0b3IzPjtcblxuXHRcdFx0dGhpcy5wbGFuZS5wcm9qZWN0UG9pbnQoY2FtZXJhLnBvc2l0aW9uLCB3b3JsZENhbVByb2pQb3NpdGlvbi52YWx1ZSk7XG5cdFx0XHR3b3JsZFBsYW5lUG9zaXRpb24udmFsdWUuc2V0KDAsIDAsIDApLmFwcGx5TWF0cml4NChtZXNoLm1hdHJpeFdvcmxkKTtcblx0XHR9KTtcblx0fVxufVxuIl19
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from './lib/camera-content';
|
|
2
|
+
export * from './lib/cube-camera';
|
|
2
3
|
export * from './lib/orthographic-camera';
|
|
3
4
|
export * from './lib/perspective-camera';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvY2FtZXJhcy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2NhbWVyYS1jb250ZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2N1YmUtY2FtZXJhJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL29ydGhvZ3JhcGhpYy1jYW1lcmEnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGVyc3BlY3RpdmUtY2FtZXJhJztcbiJdfQ==
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, computed, contentChild, CUSTOM_ELEMENTS_SCHEMA, input, TemplateRef, untracked, viewChild, } from '@angular/core';
|
|
3
|
+
import { extend, injectBeforeRender, injectStore, merge, NgtArgs, omit, pick } from 'angular-three';
|
|
4
|
+
import { assertInjector } from 'ngxtension/assert-injector';
|
|
5
|
+
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
6
|
+
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
7
|
+
import { CubeCamera, Group, HalfFloatType, WebGLCubeRenderTarget } from 'three';
|
|
8
|
+
import { NgtsCameraContent } from './camera-content';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export function injectCubeCamera(options, { injector } = {}) {
|
|
11
|
+
return assertInjector(injectCubeCamera, injector, () => {
|
|
12
|
+
const autoEffect = injectAutoEffect();
|
|
13
|
+
const store = injectStore();
|
|
14
|
+
const gl = store.select('gl');
|
|
15
|
+
const scene = store.select('scene');
|
|
16
|
+
// backfill the options with default values
|
|
17
|
+
const mergedOptions = merge(options, { resolution: 256, near: 0.1, far: 1000 }, 'backfill');
|
|
18
|
+
const resolution = pick(mergedOptions, 'resolution');
|
|
19
|
+
const near = pick(mergedOptions, 'near');
|
|
20
|
+
const far = pick(mergedOptions, 'far');
|
|
21
|
+
const fbo = computed(() => {
|
|
22
|
+
const fbo = new WebGLCubeRenderTarget(resolution());
|
|
23
|
+
fbo.texture.type = HalfFloatType;
|
|
24
|
+
return fbo;
|
|
25
|
+
});
|
|
26
|
+
autoEffect(() => {
|
|
27
|
+
const _fbo = fbo();
|
|
28
|
+
return () => {
|
|
29
|
+
_fbo.dispose();
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
const camera = computed(() => {
|
|
33
|
+
return new CubeCamera(near(), far(), fbo());
|
|
34
|
+
});
|
|
35
|
+
const update = computed(() => {
|
|
36
|
+
const [_scene, _gl, _camera, { envMap, fog }] = [scene(), gl(), camera(), untracked(mergedOptions)];
|
|
37
|
+
let originalFog;
|
|
38
|
+
let originalBackground;
|
|
39
|
+
return () => {
|
|
40
|
+
originalFog = _scene.fog;
|
|
41
|
+
originalBackground = _scene.background;
|
|
42
|
+
_scene.background = envMap || originalBackground;
|
|
43
|
+
_scene.fog = fog || originalFog;
|
|
44
|
+
_camera.update(_gl, _scene);
|
|
45
|
+
_scene.fog = originalFog;
|
|
46
|
+
_scene.background = originalBackground;
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
return { fbo, camera, update };
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
const defaultOptions = {
|
|
53
|
+
frames: Infinity,
|
|
54
|
+
resolution: 256,
|
|
55
|
+
near: 0.1,
|
|
56
|
+
far: 1000,
|
|
57
|
+
};
|
|
58
|
+
export class NgtsCubeCamera {
|
|
59
|
+
constructor() {
|
|
60
|
+
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
61
|
+
this.parameters = omit(this.options, ['fog', 'near', 'far', 'envMap', 'resolution', 'frames']);
|
|
62
|
+
this.cubeCamera = injectCubeCamera(pick(this.options, ['near', 'far', 'envMap', 'fog', 'resolution']));
|
|
63
|
+
this.camera = this.cubeCamera.camera;
|
|
64
|
+
this.texture = pick(this.cubeCamera.fbo, 'texture');
|
|
65
|
+
this.group = viewChild.required('group');
|
|
66
|
+
this.cameraContent = contentChild(NgtsCameraContent, { read: TemplateRef });
|
|
67
|
+
extend({ Group });
|
|
68
|
+
let count = 0;
|
|
69
|
+
injectBeforeRender(() => {
|
|
70
|
+
const group = this.group().nativeElement;
|
|
71
|
+
if (!group)
|
|
72
|
+
return;
|
|
73
|
+
const frames = this.options().frames;
|
|
74
|
+
const update = this.cubeCamera.update();
|
|
75
|
+
if (frames === Infinity || count < frames) {
|
|
76
|
+
group.visible = false;
|
|
77
|
+
update();
|
|
78
|
+
group.visible = true;
|
|
79
|
+
count++;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtsCubeCamera, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
84
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.0.6", type: NgtsCubeCamera, isStandalone: true, selector: "ngts-cube-camera", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "cameraContent", first: true, predicate: NgtsCameraContent, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "group", first: true, predicate: ["group"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
85
|
+
<ngt-group [parameters]="parameters()">
|
|
86
|
+
<ngt-primitive *args="[camera()]" />
|
|
87
|
+
<ngt-group #group>
|
|
88
|
+
<ng-container [ngTemplateOutlet]="cameraContent() ?? null" [ngTemplateOutletContext]="{ $implicit: texture }" />
|
|
89
|
+
</ngt-group>
|
|
90
|
+
</ngt-group>
|
|
91
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
92
|
+
}
|
|
93
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: NgtsCubeCamera, decorators: [{
|
|
94
|
+
type: Component,
|
|
95
|
+
args: [{
|
|
96
|
+
selector: 'ngts-cube-camera',
|
|
97
|
+
standalone: true,
|
|
98
|
+
template: `
|
|
99
|
+
<ngt-group [parameters]="parameters()">
|
|
100
|
+
<ngt-primitive *args="[camera()]" />
|
|
101
|
+
<ngt-group #group>
|
|
102
|
+
<ng-container [ngTemplateOutlet]="cameraContent() ?? null" [ngTemplateOutletContext]="{ $implicit: texture }" />
|
|
103
|
+
</ngt-group>
|
|
104
|
+
</ngt-group>
|
|
105
|
+
`,
|
|
106
|
+
imports: [NgtArgs, NgTemplateOutlet],
|
|
107
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
108
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
109
|
+
}]
|
|
110
|
+
}], ctorParameters: () => [] });
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ViZS1jYW1lcmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvY2FtZXJhcy9zcmMvbGliL2N1YmUtY2FtZXJhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osc0JBQXNCLEVBR3RCLEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFZLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFnQixLQUFLLEVBQUUsYUFBYSxFQUFXLHFCQUFxQixFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQWVyRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBZ0MsRUFBRSxFQUFFLFFBQVEsS0FBOEIsRUFBRTtJQUM1RyxPQUFPLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ3RELE1BQU0sVUFBVSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDNUIsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FB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QUM7Z0JBQ3JCLEtBQUssRUFBRSxDQUFDO1lBQ1QsQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0E3QlcsY0FBYztrR0FBZCxjQUFjLGlRQVVHLGlCQUFpQiwyQkFBVSxXQUFXLDZKQXRCekQ7Ozs7Ozs7RUFPVCw0REFDUyxPQUFPLGdGQUFFLGdCQUFnQjs7MkZBSXZCLGNBQWM7a0JBZjFCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7OztFQU9UO29CQUNELE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQztvQkFDcEMsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUMvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdGNvbnRlbnRDaGlsZCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0RWxlbWVudFJlZixcblx0SW5qZWN0b3IsXG5cdGlucHV0LFxuXHRUZW1wbGF0ZVJlZixcblx0dW50cmFja2VkLFxuXHR2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBpbmplY3RCZWZvcmVSZW5kZXIsIGluamVjdFN0b3JlLCBtZXJnZSwgTmd0QXJncywgTmd0R3JvdXAsIG9taXQsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgQ3ViZUNhbWVyYSwgRm9nLCBGb2dFeHAyLCBHcm91cCwgSGFsZkZsb2F0VHlwZSwgVGV4dHVyZSwgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0c0NhbWVyYUNvbnRlbnQgfSBmcm9tICcuL2NhbWVyYS1jb250ZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBDdWJlQ2FtZXJhT3B0aW9ucyB7XG5cdC8qKiBSZXNvbHV0aW9uIG9mIHRoZSBGQk8sIDI1NiAqL1xuXHRyZXNvbHV0aW9uPzogbnVtYmVyO1xuXHQvKiogQ2FtZXJhIG5lYXIsIDAuMSAqL1xuXHRuZWFyPzogbnVtYmVyO1xuXHQvKiogQ2FtZXJhIGZhciwgMTAwMCAqL1xuXHRmYXI/OiBudW1iZXI7XG5cdC8qKiBDdXN0b20gZW52aXJvbm1lbnQgbWFwIHRoYXQgaXMgdGVtcG9yYXJpbHkgc2V0IGFzIHRoZSBzY2VuZXMgYmFja2dyb3VuZCAqL1xuXHRlbnZNYXA/OiBUZXh0dXJlO1xuXHQvKiogQ3VzdG9tIGZvZyB0aGF0IGlzIHRlbXBvcmFyaWx5IHNldCBhcyB0aGUgc2NlbmVzIGZvZyAqL1xuXHRmb2c/OiBGb2cgfCBGb2dFeHAyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Q3ViZUNhbWVyYShvcHRpb25zOiAoKSA9PiBDdWJlQ2FtZXJhT3B0aW9ucywgeyBpbmplY3RvciB9OiB7IGluamVjdG9yPzogSW5qZWN0b3IgfSA9IHt9KSB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3RDdWJlQ2FtZXJhLCBpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IGF1dG9FZmZlY3QgPSBpbmplY3RBdXRvRWZmZWN0KCk7XG5cdFx0Y29uc3Qgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRcdGNvbnN0IGdsID0gc3RvcmUuc2VsZWN0KCdnbCcpO1xuXHRcdGNvbnN0IHNjZW5lID0gc3RvcmUuc2VsZWN0KCdzY2VuZScpO1xuXG5cdFx0Ly8gYmFja2ZpbGwgdGhlIG9wdGlvbnMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuXHRcdGNvbnN0IG1lcmdlZE9wdGlvbnMgPSBtZXJnZShvcHRpb25zLCB7IHJlc29sdXRpb246IDI1NiwgbmVhcjogMC4xLCBmYXI6IDEwMDAgfSwgJ2JhY2tmaWxsJyk7XG5cdFx0Y29uc3QgcmVzb2x1dGlvbiA9IHBpY2sobWVyZ2VkT3B0aW9ucywgJ3Jlc29sdXRpb24nKTtcblx0XHRjb25zdCBuZWFyID0gcGljayhtZXJnZWRPcHRpb25zLCAnbmVhcicpO1xuXHRcdGNvbnN0IGZhciA9IHBpY2sobWVyZ2VkT3B0aW9ucywgJ2ZhcicpO1xuXG5cdFx0Y29uc3QgZmJvID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZmJvID0gbmV3IFdlYkdMQ3ViZVJlbmRlclRhcmdldChyZXNvbHV0aW9uKCkpO1xuXHRcdFx0ZmJvLnRleHR1cmUudHlwZSA9IEhhbGZGbG9hdFR5cGU7XG5cdFx0XHRyZXR1cm4gZmJvO1xuXHRcdH0pO1xuXG5cdFx0YXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBfZmJvID0gZmJvKCk7XG5cdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHRfZmJvLmRpc3Bvc2UoKTtcblx0XHRcdH07XG5cdFx0fSk7XG5cblx0XHRjb25zdCBjYW1lcmEgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IEN1YmVDYW1lcmEobmVhcigpISwgZmFyKCkhLCBmYm8oKSk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCB1cGRhdGUgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbX3NjZW5lLCBfZ2wsIF9jYW1lcmEsIHsgZW52TWFwLCBmb2cgfV0gPSBbc2NlbmUoKSwgZ2woKSwgY2FtZXJhKCksIHVudHJhY2tlZChtZXJnZWRPcHRpb25zKV07XG5cdFx0XHRsZXQgb3JpZ2luYWxGb2c6IEZvZyB8IEZvZ0V4cDI7XG5cdFx0XHRsZXQgb3JpZ2luYWxCYWNrZ3JvdW5kOiBUZXh0dXJlO1xuXG5cdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHRvcmlnaW5hbEZvZyA9IF9zY2VuZS5mb2cgYXMgRm9nIHwgRm9nRXhwMjtcblx0XHRcdFx0b3JpZ2luYWxCYWNrZ3JvdW5kID0gX3NjZW5lLmJhY2tncm91bmQgYXMgVGV4dHVyZTtcblx0XHRcdFx0X3NjZW5lLmJhY2tncm91bmQgPSBlbnZNYXAgfHwgb3JpZ2luYWxCYWNrZ3JvdW5kO1xuXHRcdFx0XHRfc2NlbmUuZm9nID0gZm9nIHx8IG9yaWdpbmFsRm9nO1xuXHRcdFx0XHRfY2FtZXJhLnVwZGF0ZShfZ2wsIF9zY2VuZSk7XG5cdFx0XHRcdF9zY2VuZS5mb2cgPSBvcmlnaW5hbEZvZztcblx0XHRcdFx0X3NjZW5lLmJhY2tncm91bmQgPSBvcmlnaW5hbEJhY2tncm91bmQ7XG5cdFx0XHR9O1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHsgZmJvLCBjYW1lcmEsIHVwZGF0ZSB9O1xuXHR9KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzQ3ViZUNhbWVyYU9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPE5ndEdyb3VwPiwgQ3ViZUNhbWVyYU9wdGlvbnMge1xuXHRmcmFtZXM6IG51bWJlcjtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHNDdWJlQ2FtZXJhT3B0aW9ucyA9IHtcblx0ZnJhbWVzOiBJbmZpbml0eSxcblx0cmVzb2x1dGlvbjogMjU2LFxuXHRuZWFyOiAwLjEsXG5cdGZhcjogMTAwMCxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtY3ViZS1jYW1lcmEnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtZ3JvdXAgW3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCI+XG5cdFx0XHQ8bmd0LXByaW1pdGl2ZSAqYXJncz1cIltjYW1lcmEoKV1cIiAvPlxuXHRcdFx0PG5ndC1ncm91cCAjZ3JvdXA+XG5cdFx0XHRcdDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FtZXJhQ29udGVudCgpID8/IG51bGxcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHRleHR1cmUgfVwiIC8+XG5cdFx0XHQ8L25ndC1ncm91cD5cblx0XHQ8L25ndC1ncm91cD5cblx0YCxcblx0aW1wb3J0czogW05ndEFyZ3MsIE5nVGVtcGxhdGVPdXRsZXRdLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQ3ViZUNhbWVyYSB7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ2ZvZycsICduZWFyJywgJ2ZhcicsICdlbnZNYXAnLCAncmVzb2x1dGlvbicsICdmcmFtZXMnXSk7XG5cblx0cHJpdmF0ZSBjdWJlQ2FtZXJhID0gaW5qZWN0Q3ViZUNhbWVyYShwaWNrKHRoaXMub3B0aW9ucywgWyduZWFyJywgJ2ZhcicsICdlbnZNYXAnLCAnZm9nJywgJ3Jlc29sdXRpb24nXSkpO1xuXG5cdGNhbWVyYSA9IHRoaXMuY3ViZUNhbWVyYS5jYW1lcmE7XG5cdHRleHR1cmUgPSBwaWNrKHRoaXMuY3ViZUNhbWVyYS5mYm8sICd0ZXh0dXJlJyk7XG5cblx0Z3JvdXAgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxHcm91cD4+KCdncm91cCcpO1xuXHRjYW1lcmFDb250ZW50ID0gY29udGVudENoaWxkKE5ndHNDYW1lcmFDb250ZW50LCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IEdyb3VwIH0pO1xuXG5cdFx0bGV0IGNvdW50ID0gMDtcblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZ3JvdXAgPSB0aGlzLmdyb3VwKCkubmF0aXZlRWxlbWVudDtcblx0XHRcdGlmICghZ3JvdXApIHJldHVybjtcblxuXHRcdFx0Y29uc3QgZnJhbWVzID0gdGhpcy5vcHRpb25zKCkuZnJhbWVzO1xuXHRcdFx0Y29uc3QgdXBkYXRlID0gdGhpcy5jdWJlQ2FtZXJhLnVwZGF0ZSgpO1xuXHRcdFx0aWYgKGZyYW1lcyA9PT0gSW5maW5pdHkgfHwgY291bnQgPCBmcmFtZXMpIHtcblx0XHRcdFx0Z3JvdXAudmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0XHR1cGRhdGUoKTtcblx0XHRcdFx0Z3JvdXAudmlzaWJsZSA9IHRydWU7XG5cdFx0XHRcdGNvdW50Kys7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
export * from './lib/custom-shader-material';
|
|
2
|
-
|
|
2
|
+
export * from './lib/mesh-reflector-material';
|
|
3
|
+
export * from './lib/mesh-transmission-material';
|
|
4
|
+
export * from './lib/mesh-wobble-material';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWF0ZXJpYWxzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvY3VzdG9tLXNoYWRlci1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXRyYW5zbWlzc2lvbi1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXdvYmJsZS1tYXRlcmlhbCc7XG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { afterNextRender, ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, input,
|
|
1
|
+
import { afterNextRender, ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, input, } from '@angular/core';
|
|
2
2
|
import { is, NgtArgs, omit, pick } from 'angular-three';
|
|
3
3
|
import { injectAutoEffect } from 'ngxtension/auto-effect';
|
|
4
4
|
import CustomShaderMaterial from 'three-custom-shader-material/vanilla';
|
|
@@ -36,7 +36,6 @@ export class NgtsCustomShaderMaterial {
|
|
|
36
36
|
vertexShader,
|
|
37
37
|
uniforms,
|
|
38
38
|
cacheKey,
|
|
39
|
-
attach: untracked(this.attach),
|
|
40
39
|
});
|
|
41
40
|
});
|
|
42
41
|
const autoEffect = injectAutoEffect();
|
|
@@ -69,4 +68,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
69
68
|
imports: [NgtArgs],
|
|
70
69
|
}]
|
|
71
70
|
}], ctorParameters: () => [] });
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXNoYWRlci1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9tYXRlcmlhbHMvc3JjL2xpYi9jdXN0b20tc2hhZGVyLW1hdGVyaWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBRXRCLEtBQUssR0FDTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsRUFBRSxFQUFnQixPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRCxPQUFPLG9CQUFvQixNQUFNLHNDQUFzQyxDQUFDOztBQWN4RSxNQUFNLE9BQU8sd0JBQXdCO0lBd0NwQztRQXZDQSxpQkFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXFELENBQUM7UUFDbkYsV0FBTSxHQUFHLEtBQUssQ0FBb0IsVUFBVSxDQUFDLENBQUM7UUFDOUMsWUFBTyxHQUFHLEtBQUssQ0FBQyxFQUFpRixDQUFDLENBQUM7UUFDbkcsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRTVGLFNBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3BCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUN6RSxDQUFDLENBQUMsQ0FBQztRQUVLLG1CQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RCxpQkFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELGFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxQyxhQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFbEQsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDeEIsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRztnQkFDaEUsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDWCxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNyQixJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNuQixJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNmLElBQUksQ0FBQyxRQUFRLEVBQUU7YUFDZixDQUFDO1lBRUYsMENBQTBDO1lBQzFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN2QixPQUFRLElBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3pDLE9BQVEsSUFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFFRCxPQUFPLElBQUksb0JBQW9CLENBQUM7Z0JBQy9CLFlBQVksRUFBRSxJQUFJO2dCQUNsQixjQUFjO2dCQUNkLFlBQVk7Z0JBQ1osUUFBUTtnQkFDUixRQUFRO2FBQ1IsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFHRixNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzhHQWhEVyx3QkFBd0I7a0dBQXhCLHdCQUF3Qix3ZUFUMUI7Ozs7RUFJVCw0REFHUyxPQUFPOzsyRkFFTCx3QkFBd0I7a0JBWnBDLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7OztFQUlUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdEVsZW1lbnRSZWYsXG5cdGlucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzLCBOZ3RBbnlSZWNvcmQsIE5ndEFyZ3MsIG9taXQsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IE1hdGVyaWFsIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IEN1c3RvbVNoYWRlck1hdGVyaWFsIGZyb20gJ3RocmVlLWN1c3RvbS1zaGFkZXItbWF0ZXJpYWwvdmFuaWxsYSc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtY3VzdG9tLXNoYWRlci1tYXRlcmlhbCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1wcmltaXRpdmUgKmFyZ3M9XCJbbWF0ZXJpYWwoKV1cIiBbYXR0YWNoXT1cImF0dGFjaCgpXCIgW3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCI+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LXByaW1pdGl2ZT5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQ3VzdG9tU2hhZGVyTWF0ZXJpYWwge1xuXHRiYXNlTWF0ZXJpYWwgPSBpbnB1dC5yZXF1aXJlZDxNYXRlcmlhbCB8IHR5cGVvZiBNYXRlcmlhbCB8IEVsZW1lbnRSZWY8TWF0ZXJpYWw+PigpO1xuXHRhdHRhY2ggPSBpbnB1dDxzdHJpbmcgfCBzdHJpbmdbXT4oJ21hdGVyaWFsJyk7XG5cdG9wdGlvbnMgPSBpbnB1dCh7fSBhcyBPbWl0PENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgQ3VzdG9tU2hhZGVyTWF0ZXJpYWw+WzBdLCAnYmFzZU1hdGVyaWFsJz4pO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFsnZnJhZ21lbnRTaGFkZXInLCAndmVydGV4U2hhZGVyJywgJ3VuaWZvcm1zJywgJ2NhY2hlS2V5J10pO1xuXG5cdGJhc2UgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgYmFzZU1hdGVyaWFsID0gdGhpcy5iYXNlTWF0ZXJpYWwoKTtcblx0XHRyZXR1cm4gaXMucmVmKGJhc2VNYXRlcmlhbCkgPyBiYXNlTWF0ZXJpYWwubmF0aXZlRWxlbWVudCA6IGJhc2VNYXRlcmlhbDtcblx0fSk7XG5cblx0cHJpdmF0ZSBmcmFnbWVudFNoYWRlciA9IHBpY2sodGhpcy5vcHRpb25zLCAnZnJhZ21lbnRTaGFkZXInKTtcblx0cHJpdmF0ZSB2ZXJ0ZXhTaGFkZXIgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3ZlcnRleFNoYWRlcicpO1xuXHRwcml2YXRlIHVuaWZvcm1zID0gcGljayh0aGlzLm9wdGlvbnMsICd1bmlmb3JtcycpO1xuXHRwcml2YXRlIGNhY2hlS2V5ID0gcGljayh0aGlzLm9wdGlvbnMsICdjYWNoZUtleScpO1xuXG5cdG1hdGVyaWFsID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtiYXNlLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyLCB1bmlmb3JtcywgY2FjaGVLZXldID0gW1xuXHRcdFx0dGhpcy5iYXNlKCksXG5cdFx0XHR0aGlzLmZyYWdtZW50U2hhZGVyKCksXG5cdFx0XHR0aGlzLnZlcnRleFNoYWRlcigpLFxuXHRcdFx0dGhpcy51bmlmb3JtcygpLFxuXHRcdFx0dGhpcy5jYWNoZUtleSgpLFxuXHRcdF07XG5cblx0XHQvLyBOT1RFOiB0aGlzIGlzIHNwZWNpZmljIHRvIGFuZ3VsYXItdGhyZWVcblx0XHRpZiAoaXMuaW5zdGFuY2UoYmFzZSkpIHtcblx0XHRcdGRlbGV0ZSAoYmFzZSBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ107XG5cdFx0XHRkZWxldGUgKGJhc2UgYXMgTmd0QW55UmVjb3JkKVsnX19uZ3RfcmVuZGVyZXJfXyddO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgQ3VzdG9tU2hhZGVyTWF0ZXJpYWwoe1xuXHRcdFx0YmFzZU1hdGVyaWFsOiBiYXNlLFxuXHRcdFx0ZnJhZ21lbnRTaGFkZXIsXG5cdFx0XHR2ZXJ0ZXhTaGFkZXIsXG5cdFx0XHR1bmlmb3Jtcyxcblx0XHRcdGNhY2hlS2V5LFxuXHRcdH0pO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRjb25zdCBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsKCk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiBtYXRlcmlhbC5kaXNwb3NlKCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuIl19
|