tela.js 1.0.0 → 1.0.2
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 +118 -28
- package/dist/node/index.js +4139 -36328
- package/dist/web/index.js +3907 -1022
- package/package.json +24 -19
- package/src/Camera/Camera.js +109 -92
- package/src/Camera/normal.js +17 -0
- package/src/Camera/raster.js +289 -0
- package/src/Camera/raytrace.js +40 -0
- package/src/Camera/sdf.js +30 -0
- package/src/Color/Color.js +48 -16
- package/src/Geometry/Box.js +149 -0
- package/src/Geometry/Geometry.js +38 -0
- package/src/Geometry/Line.js +163 -0
- package/src/Geometry/Mesh.js +306 -0
- package/src/Geometry/Path.js +82 -0
- package/src/Geometry/Point.js +155 -0
- package/src/Geometry/Triangle.js +147 -0
- package/src/IO/IO.js +107 -54
- package/src/IO/Parallel.js +89 -0
- package/src/Material/Material.js +72 -0
- package/src/Ray/Ray.js +1 -0
- package/src/Scene/BScene.js +286 -0
- package/src/Scene/KScene.js +384 -0
- package/src/Scene/NaiveScene.js +33 -27
- package/src/Scene/RandomScene.js +385 -0
- package/src/Scene/Scene.js +132 -48
- package/src/Scene/VoxelScene.js +172 -0
- package/src/Tela/Canvas.js +397 -0
- package/src/Tela/Image.js +229 -0
- package/src/{Canvas → Tela}/README.md +19 -3
- package/src/Tela/Window.js +268 -0
- package/src/Utils/Animation.js +88 -0
- package/src/Utils/Constants.js +33 -1
- package/src/Utils/Math.js +103 -16
- package/src/{Monads → Utils}/Monads.js +2 -0
- package/src/Utils/PQueue.js +77 -0
- package/src/Utils/SVG.js +350 -0
- package/src/Utils/Stream.js +29 -0
- package/src/Utils/Utils.js +35 -13
- package/src/Utils/Utils3D.js +44 -0
- package/src/Utils/Video.js +20 -0
- package/src/Vector/Vector.js +19 -39
- package/src/index.js +29 -8
- package/src/index.node.js +6 -2
- package/.eslintrc.yml +0 -8
- package/assets/bunny.obj +0 -7474
- package/assets/expand.svg +0 -1
- package/assets/great.jpg +0 -0
- package/assets/kakashi.jpg +0 -0
- package/assets/spot.obj +0 -11999
- package/assets/spot.png +0 -0
- package/assets/torus.obj +0 -3137
- package/assets/x.svg +0 -1
- package/bun.lockb +0 -0
- package/bundle.js +0 -39
- package/index.css +0 -129
- package/index.html +0 -19
- package/index.js +0 -534
- package/src/Animation/Animation.js +0 -61
- package/src/Box/Box.js +0 -105
- package/src/Canvas/Canvas.js +0 -203
- package/src/Image/Image.js +0 -138
- package/src/Image/README.md +0 -33
- package/src/Scene/Mesh.js +0 -103
- package/src/Scene/Point.js +0 -109
- package/src/Scene/PointCloud.js +0 -51
- package/src/Stream/Stream.js +0 -10
- package/test/node/amazing_shader.js +0 -56
- package/test/node/bunny.js +0 -55
- package/test/node/bunny_parallel.js +0 -102
- package/test/node/image2rgb.js +0 -57
- package/test/node/image_test.js +0 -38
- package/test/node/lorentz.js +0 -0
- package/test/web/amazing_shader.js +0 -60
- package/test/web/amazing_shader_2.js +0 -54
- package/test/web/bunny.js +0 -72
- package/test/web/image2rgb.js +0 -77
- package/test/web/interactive_wave.js +0 -108
- package/test/web/lorenz.js +0 -60
- package/test/web/mandelbrot.js +0 -59
- package/test/web/rotating_grid.js +0 -62
- package/test/web/signed_bunny.js +0 -139
- package/test/web/signed_distance.js +0 -95
- package/test/web/simple_animation.js +0 -39
- package/test/web/simple_shader.js +0 -14
- package/test/web/six_spheres.js +0 -102
- package/test/web/wave_equation.js +0 -93
- package/vs-monaco/package/LICENSE +0 -21
- package/vs-monaco/package/ThirdPartyNotices.txt +0 -448
- package/vs-monaco/package/min/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
- package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.de.js +0 -8
- package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.es.js +0 -8
- package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.fr.js +0 -8
- package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.it.js +0 -8
- package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.ja.js +0 -8
- package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.js +0 -8
- package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.ko.js +0 -8
- package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.ru.js +0 -8
- package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.zh-cn.js +0 -8
- package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.zh-tw.js +0 -8
- package/vs-monaco/package/min/vs/base/worker/workerMain.js +0 -27
- package/vs-monaco/package/min/vs/basic-languages/abap/abap.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/apex/apex.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/azcli/azcli.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/bat/bat.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/bicep/bicep.js +0 -11
- package/vs-monaco/package/min/vs/basic-languages/cameligo/cameligo.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/clojure/clojure.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/coffee/coffee.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/cpp/cpp.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/csharp/csharp.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/csp/csp.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/css/css.js +0 -12
- package/vs-monaco/package/min/vs/basic-languages/cypher/cypher.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/dart/dart.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/dockerfile/dockerfile.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/ecl/ecl.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/elixir/elixir.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/flow9/flow9.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/freemarker2/freemarker2.js +0 -12
- package/vs-monaco/package/min/vs/basic-languages/fsharp/fsharp.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/go/go.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/graphql/graphql.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/handlebars/handlebars.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/hcl/hcl.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/html/html.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/ini/ini.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/java/java.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/javascript/javascript.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/julia/julia.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/kotlin/kotlin.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/less/less.js +0 -11
- package/vs-monaco/package/min/vs/basic-languages/lexon/lexon.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/liquid/liquid.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/lua/lua.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/m3/m3.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/markdown/markdown.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/mdx/mdx.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/mips/mips.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/msdax/msdax.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/mysql/mysql.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/objective-c/objective-c.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/pascal/pascal.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/pascaligo/pascaligo.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/perl/perl.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/pgsql/pgsql.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/php/php.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/pla/pla.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/postiats/postiats.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/powerquery/powerquery.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/powershell/powershell.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/protobuf/protobuf.js +0 -11
- package/vs-monaco/package/min/vs/basic-languages/pug/pug.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/python/python.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/qsharp/qsharp.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/r/r.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/razor/razor.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/redis/redis.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/redshift/redshift.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/restructuredtext/restructuredtext.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/ruby/ruby.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/rust/rust.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/sb/sb.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/scala/scala.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/scheme/scheme.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/scss/scss.js +0 -12
- package/vs-monaco/package/min/vs/basic-languages/shell/shell.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/solidity/solidity.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/sophia/sophia.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/sparql/sparql.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/sql/sql.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/st/st.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/swift/swift.js +0 -13
- package/vs-monaco/package/min/vs/basic-languages/systemverilog/systemverilog.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/tcl/tcl.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/twig/twig.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/typescript/typescript.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/vb/vb.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/wgsl/wgsl.js +0 -307
- package/vs-monaco/package/min/vs/basic-languages/xml/xml.js +0 -10
- package/vs-monaco/package/min/vs/basic-languages/yaml/yaml.js +0 -10
- package/vs-monaco/package/min/vs/editor/editor.main.css +0 -6
- package/vs-monaco/package/min/vs/editor/editor.main.js +0 -745
- package/vs-monaco/package/min/vs/editor/editor.main.nls.de.js +0 -31
- package/vs-monaco/package/min/vs/editor/editor.main.nls.es.js +0 -31
- package/vs-monaco/package/min/vs/editor/editor.main.nls.fr.js +0 -29
- package/vs-monaco/package/min/vs/editor/editor.main.nls.it.js +0 -29
- package/vs-monaco/package/min/vs/editor/editor.main.nls.ja.js +0 -31
- package/vs-monaco/package/min/vs/editor/editor.main.nls.js +0 -29
- package/vs-monaco/package/min/vs/editor/editor.main.nls.ko.js +0 -29
- package/vs-monaco/package/min/vs/editor/editor.main.nls.ru.js +0 -31
- package/vs-monaco/package/min/vs/editor/editor.main.nls.zh-cn.js +0 -31
- package/vs-monaco/package/min/vs/editor/editor.main.nls.zh-tw.js +0 -29
- package/vs-monaco/package/min/vs/language/css/cssMode.js +0 -13
- package/vs-monaco/package/min/vs/language/css/cssWorker.js +0 -81
- package/vs-monaco/package/min/vs/language/html/htmlMode.js +0 -13
- package/vs-monaco/package/min/vs/language/html/htmlWorker.js +0 -453
- package/vs-monaco/package/min/vs/language/json/jsonMode.js +0 -15
- package/vs-monaco/package/min/vs/language/json/jsonWorker.js +0 -36
- package/vs-monaco/package/min/vs/language/typescript/tsMode.js +0 -20
- package/vs-monaco/package/min/vs/language/typescript/tsWorker.js +0 -37016
- package/vs-monaco/package/min/vs/loader.js +0 -11
- /package/src/{DomBuilder → Utils}/DomBuilder.js +0 -0
package/README.md
CHANGED
|
@@ -1,20 +1,124 @@
|
|
|
1
1
|
# tela.js
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Experimental graphic library from scratch, with reference implementation of computer graphics algorithms.
|
|
4
4
|
|
|
5
5
|
## Purpose
|
|
6
6
|
|
|
7
|
-
The
|
|
7
|
+
The purpose of this graphic engine is to be able to generate images in a computational way, with minimal dependencies, such that the readable graphical algorithms shine instead of opaque graphical APIs. The engine should also be capable to create videos and interactive demos or games.
|
|
8
|
+
|
|
9
|
+
Playground usage:
|
|
10
|
+
[](https://pedroth.github.io/tela.js)
|
|
8
11
|
|
|
9
12
|
# Table of Contents
|
|
10
13
|
|
|
11
14
|
- [Quick start](#quick-start)
|
|
12
|
-
- [
|
|
13
|
-
- [Main features](#main-features)
|
|
15
|
+
- [Dependencies](#dependencies)
|
|
14
16
|
|
|
15
17
|
# Quick start
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
## In the browser
|
|
20
|
+
|
|
21
|
+
```html
|
|
22
|
+
<!DOCTYPE html>
|
|
23
|
+
<html lang="en">
|
|
24
|
+
|
|
25
|
+
<head>
|
|
26
|
+
</head>
|
|
27
|
+
|
|
28
|
+
<body>
|
|
29
|
+
|
|
30
|
+
</body>
|
|
31
|
+
<script type="module">
|
|
32
|
+
import { Canvas, Animation, Color } from "https://cdn.jsdelivr.net/npm/tela.js/dist/web/index.js";
|
|
33
|
+
|
|
34
|
+
// You can also import from local file
|
|
35
|
+
// import { Canvas, Animation, Color} from "./node_modules/tela.js/dist/web/index.js";
|
|
36
|
+
|
|
37
|
+
const width = 640;
|
|
38
|
+
const height = 480;
|
|
39
|
+
const canvas = Canvas.ofSize(640, 480);
|
|
40
|
+
Animation
|
|
41
|
+
.loop(({ time, dt }) => {
|
|
42
|
+
document.title = `FPS: ${(Math.floor(1 / dt))}`;
|
|
43
|
+
canvas.map((x, y) => {
|
|
44
|
+
return Color.ofRGB(
|
|
45
|
+
((x * time) / width) % 1,
|
|
46
|
+
((y * time) / height) % 1
|
|
47
|
+
)
|
|
48
|
+
})
|
|
49
|
+
})
|
|
50
|
+
.play();
|
|
51
|
+
document.body.appendChild(canvas.DOM);
|
|
52
|
+
|
|
53
|
+
</script>
|
|
54
|
+
|
|
55
|
+
</html>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## On the desktop
|
|
59
|
+
Install `tela.js` it using `npm install tela.js` / `bun add tela.js`.
|
|
60
|
+
|
|
61
|
+
```js
|
|
62
|
+
import { Animation, Color } from "../../dist/node/index.js";
|
|
63
|
+
import Window from "../../src/Tela/Window.js";
|
|
64
|
+
|
|
65
|
+
const width = 640;
|
|
66
|
+
const height = 480;
|
|
67
|
+
const window = Window.ofSize(640, 480);
|
|
68
|
+
Animation
|
|
69
|
+
.loop(({ time, dt }) => {
|
|
70
|
+
window.setTitle(`FPS: ${Math.floor(1 / dt)}`);
|
|
71
|
+
window.map((x, y) => {
|
|
72
|
+
return Color.ofRGB(
|
|
73
|
+
((x * time) / width) % 1,
|
|
74
|
+
((y * time) / height) % 1
|
|
75
|
+
)
|
|
76
|
+
})
|
|
77
|
+
})
|
|
78
|
+
.play();
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
And run it: `node index.js` / `bun index.js`
|
|
82
|
+
|
|
83
|
+
> Note: [Attention to running node with ES6 imports module](https://nodejs.org/api/esm.html#modules-ecmascript-modules)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
## Generate images and videos
|
|
87
|
+
|
|
88
|
+
Install `tela.js` it using `npm install tela.js` / `bun add tela.js`.
|
|
89
|
+
|
|
90
|
+
Create a file:
|
|
91
|
+
```js
|
|
92
|
+
// index.js
|
|
93
|
+
import { Color, video } from "./node_modules/tela.js/dist/node/index.js";
|
|
94
|
+
|
|
95
|
+
const width = 640;
|
|
96
|
+
const height = 480;
|
|
97
|
+
const FPS = 60;
|
|
98
|
+
const maxVideoTime = 10; // time in seconds
|
|
99
|
+
|
|
100
|
+
function animation({ time, image }) {
|
|
101
|
+
return image.map((x, y) => {
|
|
102
|
+
return Color.ofRGB(
|
|
103
|
+
((x * time) / width) % 1,
|
|
104
|
+
((y * time) / height) % 1
|
|
105
|
+
)
|
|
106
|
+
})
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
video(
|
|
110
|
+
"hello_tela_60.mp4",
|
|
111
|
+
animation,
|
|
112
|
+
{ width, height, FPS }
|
|
113
|
+
)
|
|
114
|
+
.until(({ time }) => time < maxVideoTime);
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
And run it: `node index.js` / `bun index.js`
|
|
118
|
+
|
|
119
|
+
### Note generating videos
|
|
120
|
+
|
|
121
|
+
To generate videos and images `tela.js` needs [ffmpeg][ffmpeg] in your system, in a way that it is possible to write on the console:
|
|
18
122
|
```bash
|
|
19
123
|
ffmpeg -version
|
|
20
124
|
|
|
@@ -23,32 +127,18 @@ ffmpeg -version
|
|
|
23
127
|
|
|
24
128
|
```
|
|
25
129
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
# Playground
|
|
30
|
-
|
|
31
|
-
https://pedroth.github.io/tela.js/
|
|
130
|
+
# Dependencies
|
|
32
131
|
|
|
33
|
-
|
|
132
|
+
- [`bun`][bun]/[`node`][node]
|
|
133
|
+
- [`ffmpeg`][ffmpeg]
|
|
134
|
+
- [`node-sdl`][sdl]
|
|
34
135
|
|
|
35
|
-
|
|
36
|
-
- [/] Generate image (desktop / browser)
|
|
37
|
-
- Voxels (?)
|
|
38
|
-
- [X] Different resolutions
|
|
39
|
-
- [/] Point clouds / splatting
|
|
40
|
-
- [/] Signed distance functions, implicit functions
|
|
41
|
-
- [ ] Draw geometrical objects (aka [Simplices][simplex])
|
|
42
|
-
- [ ] Path tracing: Shadows, Refraction, Global illumination, etc.
|
|
43
|
-
- [X] Draw with shaders like code
|
|
44
|
-
- [ ] Raster engine
|
|
45
|
-
- [/] Read Geometry formats with textures
|
|
46
|
-
- [X] Generate image/video (desktop / browser)
|
|
47
|
-
- [X] Interactive application (browser)
|
|
48
|
-
- [ ] Draw svgs(which includes text/formulas)
|
|
136
|
+
[Node][node] is preferred when running the demos (it is faster, [opened a bug in bun](https://github.com/oven-sh/bun/issues/9218)), [bun][bun] is needed to build the library.
|
|
49
137
|
|
|
50
138
|
|
|
51
139
|
|
|
52
|
-
[
|
|
140
|
+
[ffmpeg]: https://ffmpeg.org/
|
|
141
|
+
[bun]: https://bun.sh/
|
|
142
|
+
[node]: https://nodejs.org/en
|
|
143
|
+
[sdl]: https://github.com/kmamal/node-sdl
|
|
53
144
|
|
|
54
|
-
# Research
|