0.1.38 • Published 8 months ago

@quick-threejs/reactive v0.1.38

Weekly downloads
-
License
ISC
Repository
github
Last release
8 months ago

@quick-threejs/reactive

@quick-threejs/reactive is a reactive worker-threads-based library that provides an approachable vision for working with workers.

The core motivation was to provide a quick integration for using three.js with worker threads.

🚀 Quick start

Because @quick-threejs/reactive is worker-thread-based, you have to split your logic into two parts.

Main Thread

// main.ts
import { register } from "@quick-threejs/reactive";

register({
	location: new URL("./main.worker.ts", import.meta.url) as unknown as string,
	enableDebug: true,
	axesSizes: 5,
	gridSizes: 10,
	withMiniCamera: true,
	onReady: (app) => {
		app
			.gui()
			?.add({ torusX: 0 }, "torusX")
			.step(0.01)
			.onChange((value) => {
				app.worker()?.postMessage({ type: "torus-x-gui-event", value });
			});
	}
});

Worker Thread

// main.worker.ts
import { launchApp } from "@quick-threejs/reactive/worker";

launchApp({
	onReady: (app) => {
		const ambientLight = new AmbientLight(0xffffff, 0.1);
		const directionalLight = new DirectionalLight(0xffffff, 0.8);
		directionalLight.position.set(0, 0, 1);

		const torus = new Mesh(
			new TorusKnotGeometry(0.8, 0.35, 100, 16),
			new MeshToonMaterial({
				color: 0x454545
			})
		);

		self.onmessage = (event: MessageEvent) => {
			if (event.data?.type === "torus-x-gui-event") {
				torus.position.x = event.data.value;
			}
		};

		app.world.scene().background = new Color("#211d20");
		app.world.scene().add(ambientLight, directionalLight, torus);

		app.resize$?.().subscribe((event) => {
			console.log(event.type);
		});

		app.wheel$?.().subscribe((event) => {
			console.log(event.type);
		});

		app.timer.step$().subscribe(() => {
			torus.rotateY(0.05);
			torus.rotateX(0.001);
		});
	}
});

After the configuration of the main part and the worker part, you should have the following screen: Screenshot 2024-07-08 at 2 55 59 AM

See the complete Example folder.

Resources

This library uses:


I would like to address a special thanks to @barnabasbartha with his Threejs-Portal which inspired me to create this library ❤️.

0.1.30

9 months ago

0.1.31

9 months ago

0.1.32

9 months ago

0.1.33

9 months ago

0.1.34

9 months ago

0.1.35

9 months ago

0.1.36

9 months ago

0.1.37

9 months ago

0.1.27

10 months ago

0.1.28

10 months ago

0.1.29

9 months ago

0.1.20

11 months ago

0.1.21

11 months ago

0.1.22

11 months ago

0.1.23

11 months ago

0.1.24

11 months ago

0.1.25

10 months ago

0.1.26

10 months ago

0.1.38

8 months ago

0.1.17

11 months ago

0.1.18

11 months ago

0.1.19

11 months ago

0.1.15

1 year ago

0.1.16

1 year ago

0.1.14

1 year ago

0.1.13

1 year ago

0.1.12

1 year ago

0.1.11

1 year ago

0.1.10

1 year ago

0.1.9

1 year ago

0.1.8

1 year ago

0.1.7

1 year ago

0.1.6

1 year ago

0.1.5

1 year ago

0.1.4

1 year ago

0.1.3

1 year ago

1.0.0

1 year ago

0.1.0

1 year ago