@d3p1/img2pxl 1.12.1

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Cristian Marcelo de Picciotto
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,34 @@
1
+ <div align=center>
2
+
3
+ # [IMAGE2PXL]
4
+
5
+ [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier)
6
+ [![Release](https://github.com/d3p1/img2pxl/actions/workflows/release.yml/badge.svg)](https://github.com/d3p1/img2pxl/actions/workflows/release.yml)
7
+ [![semantic-release: angular](https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release)
8
+
9
+ </div>
10
+
11
+ ## Introduction
12
+
13
+ Just a cool image to pixel effect.
14
+
15
+ > [!NOTE]
16
+ > This library was inspired by these excellent tutorials:
17
+ > - [Three.js Journey - Particle Cursor Animation Shader](https://threejs-journey.com/lessons/particles-cursor-animation-shader).
18
+ > - [Learn Creative Coding: Image Effects](https://www.youtube.com/watch?v=UeZ1pTg_nMo).
19
+ > - [Image into Interactive Particles - HTML Canvas Animation Tutorial | Advanced Pure Vanilla JavaScript](https://www.youtube.com/watch?v=afdHgwn1XCY).
20
+
21
+ ## Changelog
22
+
23
+ Detailed changes for each release are documented in [`CHANGELOG.md`](./CHANGELOG.md).
24
+
25
+ ## License
26
+
27
+ This work is published under [MIT License](./LICENSE).
28
+
29
+ ## Author
30
+
31
+ Always happy to receive a greeting on:
32
+
33
+ - [LinkedIn](https://www.linkedin.com/in/cristian-marcelo-de-picciotto/)
34
+ - [Web](https://d3p1.dev/)
@@ -0,0 +1,33 @@
1
+ import { default as GUI } from 'lil-gui';
2
+ import { default as RendererManager } from '../lib/renderer-manager.js';
3
+ import * as THREE from 'three';
4
+ export default class Image {
5
+ #private;
6
+ /**
7
+ * @type {THREE.Points}
8
+ */
9
+ points: THREE.Points<THREE.PlaneGeometry, THREE.ShaderMaterial>;
10
+ /**
11
+ * Constructor
12
+ *
13
+ * @param {RendererManager} rendererManager
14
+ * @param {GUI} debugManager
15
+ * @param {string} imageSrc
16
+ * @param {number} resolutionWidth
17
+ * @param {number} resolutionHeight
18
+ * @param {number} pointSize
19
+ */
20
+ constructor(rendererManager: RendererManager, debugManager: GUI, imageSrc: string, resolutionWidth: number, resolutionHeight: number, pointSize?: number);
21
+ /**
22
+ * Enable debug mode
23
+ *
24
+ * @returns {void}
25
+ */
26
+ debug(): void;
27
+ /**
28
+ * Dispose
29
+ *
30
+ * @returns {void}
31
+ */
32
+ dispose(): void;
33
+ }
@@ -0,0 +1,44 @@
1
+ import { default as GUI } from 'lil-gui';
2
+ import * as THREE from 'three';
3
+ export default class Canvas {
4
+ #private;
5
+ /**
6
+ * @type {THREE.CanvasTexture}
7
+ */
8
+ texture: THREE.Texture;
9
+ /**
10
+ * @type {HTMLCanvasElement}
11
+ */
12
+ element: HTMLCanvasElement;
13
+ /**
14
+ * Constructor
15
+ *
16
+ * @param {GUI} debugManager
17
+ * @param {number} resolutionWidth
18
+ * @param {number} resolutionHeight
19
+ * @param {string} displacementImageSrc
20
+ * @param {number} displacementSize
21
+ * @param {number} displacementTrailingFactor
22
+ */
23
+ constructor(debugManager: GUI, resolutionWidth: number, resolutionHeight: number, displacementImageSrc: string, displacementSize?: number, displacementTrailingFactor?: number);
24
+ /**
25
+ * Update
26
+ *
27
+ * @param {number|null} dx
28
+ * @param {number|null} dy
29
+ * @returns {void}
30
+ */
31
+ update(dx: number | null, dy: number | null): void;
32
+ /**
33
+ * Enable debug mode
34
+ *
35
+ * @returns {void}
36
+ */
37
+ debug(): void;
38
+ /**
39
+ * Dispose
40
+ *
41
+ * @returns {void}
42
+ */
43
+ dispose(): void;
44
+ }
@@ -0,0 +1,54 @@
1
+ import { default as RendererManager } from '../lib/renderer-manager.js';
2
+ import { default as Canvas } from './pointer/canvas.js';
3
+ /**
4
+ * @description Pointer
5
+ * @author C. M. de Picciotto <d3p1@d3p1.dev> (https://d3p1.dev/)
6
+ */
7
+ import * as THREE from 'three';
8
+ export default class Pointer {
9
+ #private;
10
+ /**
11
+ * @type {THREE.Vector2|{x: number|undefined, y: number|undefined}}
12
+ */
13
+ coord: THREE.Vector2 | {
14
+ x: number | undefined;
15
+ y: number | undefined;
16
+ };
17
+ /**
18
+ * @type {Canvas}
19
+ */
20
+ canvas: Canvas;
21
+ /**
22
+ * @type {THREE.Raycaster}
23
+ */
24
+ raycaster: THREE.Raycaster;
25
+ /**
26
+ * @type {THREE.Mesh}
27
+ */
28
+ raycasterPlane: THREE.Mesh<THREE.PlaneGeometry, THREE.MeshBasicMaterial>;
29
+ /**
30
+ * Constructor
31
+ *
32
+ * @param {RendererManager} rendererManager
33
+ * @param {Canvas} canvas
34
+ */
35
+ constructor(rendererManager: RendererManager, canvas: Canvas);
36
+ /**
37
+ * Update
38
+ *
39
+ * @returns {void}
40
+ */
41
+ update(): void;
42
+ /**
43
+ * Enable debug mode
44
+ *
45
+ * @returns {void}
46
+ */
47
+ debug(): void;
48
+ /**
49
+ * Dispose
50
+ *
51
+ * @returns {void}
52
+ */
53
+ dispose(): void;
54
+ }
@@ -0,0 +1,44 @@
1
+ import { default as GUI } from 'lil-gui';
2
+ import { default as RendererManager } from './lib/renderer-manager.js';
3
+ import { default as Image } from './app/image.js';
4
+ import { default as Pointer } from './app/pointer.js';
5
+ export default class App {
6
+ #private;
7
+ /**
8
+ * Constructor
9
+ *
10
+ * @param {Image} image
11
+ * @param {Pointer} pointer
12
+ * @param {RendererManager} rendererManager
13
+ * @param {GUI} debugManager
14
+ * @param {string} noiseImageSrc
15
+ * @param {number} noiseFrequency
16
+ * @param {number} noiseAmplitude
17
+ * @param {number} displacementFrequency
18
+ * @param {number} displacementAmplitude
19
+ */
20
+ constructor(image: Image, pointer: Pointer, rendererManager: RendererManager, debugManager: GUI, noiseImageSrc: string, noiseFrequency?: number, noiseAmplitude?: number, displacementFrequency?: number, displacementAmplitude?: number);
21
+ /**
22
+ * Update
23
+ *
24
+ * @param {number} elapsed
25
+ * @returns {void}
26
+ * @note It is required to validate if `uTime` is set
27
+ * because the `beforeCompile` image material shader logic
28
+ * (which adds this uniform)
29
+ * only runs after the first render of the scene
30
+ */
31
+ update(elapsed: number): void;
32
+ /**
33
+ * Enable debug mode
34
+ *
35
+ * @returns {void}
36
+ */
37
+ debug(): void;
38
+ /**
39
+ * Dispose
40
+ *
41
+ * @returns {void}
42
+ */
43
+ dispose(): void;
44
+ }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @description Renderer manager
3
+ * @author C. M. de Picciotto <d3p1@d3p1.dev> (https://d3p1.dev/)
4
+ * @note The idea behind this class is to encapsulate and wrap the
5
+ * render logic
6
+ */
7
+ import * as THREE from 'three';
8
+ export default class RendererManager {
9
+ #private;
10
+ /**
11
+ * @type {THREE.Scene}
12
+ */
13
+ scene: THREE.Scene;
14
+ /**
15
+ * @type {THREE.WebGLRenderer}
16
+ */
17
+ renderer: THREE.WebGLRenderer;
18
+ /**
19
+ * @type {THREE.OrthographicCamera}
20
+ * @note It is used an orthographic camera because it is desired
21
+ * to draw a 2d image without perspective
22
+ */
23
+ camera: THREE.OrthographicCamera;
24
+ /**
25
+ * @type {number}
26
+ */
27
+ width: number;
28
+ /**
29
+ * @type {number}
30
+ */
31
+ height: number;
32
+ /**
33
+ * @type {number}
34
+ * @note Device pixel ratio
35
+ */
36
+ dpr: number;
37
+ /**
38
+ * Constructor
39
+ *
40
+ * @param {number} width
41
+ * @param {number} height
42
+ */
43
+ constructor(width: number, height: number);
44
+ /**
45
+ * Update
46
+ *
47
+ * @returns {void}
48
+ */
49
+ update(): void;
50
+ /**
51
+ * Dispose
52
+ *
53
+ * @returns {void}
54
+ */
55
+ dispose(): void;
56
+ }
@@ -0,0 +1,42 @@
1
+ export default class Img2Pxl {
2
+ #private;
3
+ /**
4
+ * Constructor
5
+ *
6
+ * @param {string} imageSrc
7
+ * @param {number} width
8
+ * @param {number} height
9
+ * @param {number} resolutionWidth
10
+ * @param {number} resolutionHeight
11
+ * @param {number} pointSize
12
+ * @param {string} noiseImageSrc
13
+ * @param {number} noiseFrequency
14
+ * @param {number} noiseAmplitude
15
+ * @param {string} displacementImageSrc
16
+ * @param {number} displacementSize
17
+ * @param {number} displacementTrailingFactor
18
+ * @param {number} displacementFrequency
19
+ * @param {number} displacementAmplitude
20
+ */
21
+ constructor(imageSrc: string, width: number, height: number, resolutionWidth: number, resolutionHeight: number, pointSize?: number, noiseImageSrc?: string, noiseFrequency?: number, noiseAmplitude?: number, displacementImageSrc?: string, displacementSize?: number, displacementTrailingFactor?: number, displacementFrequency?: number, displacementAmplitude?: number);
22
+ /**
23
+ * Render
24
+ *
25
+ * @params {number} t
26
+ * @returns {void}
27
+ */
28
+ render(t?: number): void;
29
+ /**
30
+ * Enable debug mode
31
+ *
32
+ * @param {KeyboardEvent} e
33
+ * @returns {void}
34
+ */
35
+ debug(e: KeyboardEvent): void;
36
+ /**
37
+ * Dispose
38
+ *
39
+ * @returns {void}
40
+ */
41
+ dispose(): void;
42
+ }