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.
Files changed (203) hide show
  1. package/README.md +118 -28
  2. package/dist/node/index.js +4139 -36328
  3. package/dist/web/index.js +3907 -1022
  4. package/package.json +24 -19
  5. package/src/Camera/Camera.js +109 -92
  6. package/src/Camera/normal.js +17 -0
  7. package/src/Camera/raster.js +289 -0
  8. package/src/Camera/raytrace.js +40 -0
  9. package/src/Camera/sdf.js +30 -0
  10. package/src/Color/Color.js +48 -16
  11. package/src/Geometry/Box.js +149 -0
  12. package/src/Geometry/Geometry.js +38 -0
  13. package/src/Geometry/Line.js +163 -0
  14. package/src/Geometry/Mesh.js +306 -0
  15. package/src/Geometry/Path.js +82 -0
  16. package/src/Geometry/Point.js +155 -0
  17. package/src/Geometry/Triangle.js +147 -0
  18. package/src/IO/IO.js +107 -54
  19. package/src/IO/Parallel.js +89 -0
  20. package/src/Material/Material.js +72 -0
  21. package/src/Ray/Ray.js +1 -0
  22. package/src/Scene/BScene.js +286 -0
  23. package/src/Scene/KScene.js +384 -0
  24. package/src/Scene/NaiveScene.js +33 -27
  25. package/src/Scene/RandomScene.js +385 -0
  26. package/src/Scene/Scene.js +132 -48
  27. package/src/Scene/VoxelScene.js +172 -0
  28. package/src/Tela/Canvas.js +397 -0
  29. package/src/Tela/Image.js +229 -0
  30. package/src/{Canvas → Tela}/README.md +19 -3
  31. package/src/Tela/Window.js +268 -0
  32. package/src/Utils/Animation.js +88 -0
  33. package/src/Utils/Constants.js +33 -1
  34. package/src/Utils/Math.js +103 -16
  35. package/src/{Monads → Utils}/Monads.js +2 -0
  36. package/src/Utils/PQueue.js +77 -0
  37. package/src/Utils/SVG.js +350 -0
  38. package/src/Utils/Stream.js +29 -0
  39. package/src/Utils/Utils.js +35 -13
  40. package/src/Utils/Utils3D.js +44 -0
  41. package/src/Utils/Video.js +20 -0
  42. package/src/Vector/Vector.js +19 -39
  43. package/src/index.js +29 -8
  44. package/src/index.node.js +6 -2
  45. package/.eslintrc.yml +0 -8
  46. package/assets/bunny.obj +0 -7474
  47. package/assets/expand.svg +0 -1
  48. package/assets/great.jpg +0 -0
  49. package/assets/kakashi.jpg +0 -0
  50. package/assets/spot.obj +0 -11999
  51. package/assets/spot.png +0 -0
  52. package/assets/torus.obj +0 -3137
  53. package/assets/x.svg +0 -1
  54. package/bun.lockb +0 -0
  55. package/bundle.js +0 -39
  56. package/index.css +0 -129
  57. package/index.html +0 -19
  58. package/index.js +0 -534
  59. package/src/Animation/Animation.js +0 -61
  60. package/src/Box/Box.js +0 -105
  61. package/src/Canvas/Canvas.js +0 -203
  62. package/src/Image/Image.js +0 -138
  63. package/src/Image/README.md +0 -33
  64. package/src/Scene/Mesh.js +0 -103
  65. package/src/Scene/Point.js +0 -109
  66. package/src/Scene/PointCloud.js +0 -51
  67. package/src/Stream/Stream.js +0 -10
  68. package/test/node/amazing_shader.js +0 -56
  69. package/test/node/bunny.js +0 -55
  70. package/test/node/bunny_parallel.js +0 -102
  71. package/test/node/image2rgb.js +0 -57
  72. package/test/node/image_test.js +0 -38
  73. package/test/node/lorentz.js +0 -0
  74. package/test/web/amazing_shader.js +0 -60
  75. package/test/web/amazing_shader_2.js +0 -54
  76. package/test/web/bunny.js +0 -72
  77. package/test/web/image2rgb.js +0 -77
  78. package/test/web/interactive_wave.js +0 -108
  79. package/test/web/lorenz.js +0 -60
  80. package/test/web/mandelbrot.js +0 -59
  81. package/test/web/rotating_grid.js +0 -62
  82. package/test/web/signed_bunny.js +0 -139
  83. package/test/web/signed_distance.js +0 -95
  84. package/test/web/simple_animation.js +0 -39
  85. package/test/web/simple_shader.js +0 -14
  86. package/test/web/six_spheres.js +0 -102
  87. package/test/web/wave_equation.js +0 -93
  88. package/vs-monaco/package/LICENSE +0 -21
  89. package/vs-monaco/package/ThirdPartyNotices.txt +0 -448
  90. package/vs-monaco/package/min/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  91. package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.de.js +0 -8
  92. package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.es.js +0 -8
  93. package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.fr.js +0 -8
  94. package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.it.js +0 -8
  95. package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.ja.js +0 -8
  96. package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.js +0 -8
  97. package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.ko.js +0 -8
  98. package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.ru.js +0 -8
  99. package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.zh-cn.js +0 -8
  100. package/vs-monaco/package/min/vs/base/common/worker/simpleWorker.nls.zh-tw.js +0 -8
  101. package/vs-monaco/package/min/vs/base/worker/workerMain.js +0 -27
  102. package/vs-monaco/package/min/vs/basic-languages/abap/abap.js +0 -10
  103. package/vs-monaco/package/min/vs/basic-languages/apex/apex.js +0 -10
  104. package/vs-monaco/package/min/vs/basic-languages/azcli/azcli.js +0 -10
  105. package/vs-monaco/package/min/vs/basic-languages/bat/bat.js +0 -10
  106. package/vs-monaco/package/min/vs/basic-languages/bicep/bicep.js +0 -11
  107. package/vs-monaco/package/min/vs/basic-languages/cameligo/cameligo.js +0 -10
  108. package/vs-monaco/package/min/vs/basic-languages/clojure/clojure.js +0 -10
  109. package/vs-monaco/package/min/vs/basic-languages/coffee/coffee.js +0 -10
  110. package/vs-monaco/package/min/vs/basic-languages/cpp/cpp.js +0 -10
  111. package/vs-monaco/package/min/vs/basic-languages/csharp/csharp.js +0 -10
  112. package/vs-monaco/package/min/vs/basic-languages/csp/csp.js +0 -10
  113. package/vs-monaco/package/min/vs/basic-languages/css/css.js +0 -12
  114. package/vs-monaco/package/min/vs/basic-languages/cypher/cypher.js +0 -10
  115. package/vs-monaco/package/min/vs/basic-languages/dart/dart.js +0 -10
  116. package/vs-monaco/package/min/vs/basic-languages/dockerfile/dockerfile.js +0 -10
  117. package/vs-monaco/package/min/vs/basic-languages/ecl/ecl.js +0 -10
  118. package/vs-monaco/package/min/vs/basic-languages/elixir/elixir.js +0 -10
  119. package/vs-monaco/package/min/vs/basic-languages/flow9/flow9.js +0 -10
  120. package/vs-monaco/package/min/vs/basic-languages/freemarker2/freemarker2.js +0 -12
  121. package/vs-monaco/package/min/vs/basic-languages/fsharp/fsharp.js +0 -10
  122. package/vs-monaco/package/min/vs/basic-languages/go/go.js +0 -10
  123. package/vs-monaco/package/min/vs/basic-languages/graphql/graphql.js +0 -10
  124. package/vs-monaco/package/min/vs/basic-languages/handlebars/handlebars.js +0 -10
  125. package/vs-monaco/package/min/vs/basic-languages/hcl/hcl.js +0 -10
  126. package/vs-monaco/package/min/vs/basic-languages/html/html.js +0 -10
  127. package/vs-monaco/package/min/vs/basic-languages/ini/ini.js +0 -10
  128. package/vs-monaco/package/min/vs/basic-languages/java/java.js +0 -10
  129. package/vs-monaco/package/min/vs/basic-languages/javascript/javascript.js +0 -10
  130. package/vs-monaco/package/min/vs/basic-languages/julia/julia.js +0 -10
  131. package/vs-monaco/package/min/vs/basic-languages/kotlin/kotlin.js +0 -10
  132. package/vs-monaco/package/min/vs/basic-languages/less/less.js +0 -11
  133. package/vs-monaco/package/min/vs/basic-languages/lexon/lexon.js +0 -10
  134. package/vs-monaco/package/min/vs/basic-languages/liquid/liquid.js +0 -10
  135. package/vs-monaco/package/min/vs/basic-languages/lua/lua.js +0 -10
  136. package/vs-monaco/package/min/vs/basic-languages/m3/m3.js +0 -10
  137. package/vs-monaco/package/min/vs/basic-languages/markdown/markdown.js +0 -10
  138. package/vs-monaco/package/min/vs/basic-languages/mdx/mdx.js +0 -10
  139. package/vs-monaco/package/min/vs/basic-languages/mips/mips.js +0 -10
  140. package/vs-monaco/package/min/vs/basic-languages/msdax/msdax.js +0 -10
  141. package/vs-monaco/package/min/vs/basic-languages/mysql/mysql.js +0 -10
  142. package/vs-monaco/package/min/vs/basic-languages/objective-c/objective-c.js +0 -10
  143. package/vs-monaco/package/min/vs/basic-languages/pascal/pascal.js +0 -10
  144. package/vs-monaco/package/min/vs/basic-languages/pascaligo/pascaligo.js +0 -10
  145. package/vs-monaco/package/min/vs/basic-languages/perl/perl.js +0 -10
  146. package/vs-monaco/package/min/vs/basic-languages/pgsql/pgsql.js +0 -10
  147. package/vs-monaco/package/min/vs/basic-languages/php/php.js +0 -10
  148. package/vs-monaco/package/min/vs/basic-languages/pla/pla.js +0 -10
  149. package/vs-monaco/package/min/vs/basic-languages/postiats/postiats.js +0 -10
  150. package/vs-monaco/package/min/vs/basic-languages/powerquery/powerquery.js +0 -10
  151. package/vs-monaco/package/min/vs/basic-languages/powershell/powershell.js +0 -10
  152. package/vs-monaco/package/min/vs/basic-languages/protobuf/protobuf.js +0 -11
  153. package/vs-monaco/package/min/vs/basic-languages/pug/pug.js +0 -10
  154. package/vs-monaco/package/min/vs/basic-languages/python/python.js +0 -10
  155. package/vs-monaco/package/min/vs/basic-languages/qsharp/qsharp.js +0 -10
  156. package/vs-monaco/package/min/vs/basic-languages/r/r.js +0 -10
  157. package/vs-monaco/package/min/vs/basic-languages/razor/razor.js +0 -10
  158. package/vs-monaco/package/min/vs/basic-languages/redis/redis.js +0 -10
  159. package/vs-monaco/package/min/vs/basic-languages/redshift/redshift.js +0 -10
  160. package/vs-monaco/package/min/vs/basic-languages/restructuredtext/restructuredtext.js +0 -10
  161. package/vs-monaco/package/min/vs/basic-languages/ruby/ruby.js +0 -10
  162. package/vs-monaco/package/min/vs/basic-languages/rust/rust.js +0 -10
  163. package/vs-monaco/package/min/vs/basic-languages/sb/sb.js +0 -10
  164. package/vs-monaco/package/min/vs/basic-languages/scala/scala.js +0 -10
  165. package/vs-monaco/package/min/vs/basic-languages/scheme/scheme.js +0 -10
  166. package/vs-monaco/package/min/vs/basic-languages/scss/scss.js +0 -12
  167. package/vs-monaco/package/min/vs/basic-languages/shell/shell.js +0 -10
  168. package/vs-monaco/package/min/vs/basic-languages/solidity/solidity.js +0 -10
  169. package/vs-monaco/package/min/vs/basic-languages/sophia/sophia.js +0 -10
  170. package/vs-monaco/package/min/vs/basic-languages/sparql/sparql.js +0 -10
  171. package/vs-monaco/package/min/vs/basic-languages/sql/sql.js +0 -10
  172. package/vs-monaco/package/min/vs/basic-languages/st/st.js +0 -10
  173. package/vs-monaco/package/min/vs/basic-languages/swift/swift.js +0 -13
  174. package/vs-monaco/package/min/vs/basic-languages/systemverilog/systemverilog.js +0 -10
  175. package/vs-monaco/package/min/vs/basic-languages/tcl/tcl.js +0 -10
  176. package/vs-monaco/package/min/vs/basic-languages/twig/twig.js +0 -10
  177. package/vs-monaco/package/min/vs/basic-languages/typescript/typescript.js +0 -10
  178. package/vs-monaco/package/min/vs/basic-languages/vb/vb.js +0 -10
  179. package/vs-monaco/package/min/vs/basic-languages/wgsl/wgsl.js +0 -307
  180. package/vs-monaco/package/min/vs/basic-languages/xml/xml.js +0 -10
  181. package/vs-monaco/package/min/vs/basic-languages/yaml/yaml.js +0 -10
  182. package/vs-monaco/package/min/vs/editor/editor.main.css +0 -6
  183. package/vs-monaco/package/min/vs/editor/editor.main.js +0 -745
  184. package/vs-monaco/package/min/vs/editor/editor.main.nls.de.js +0 -31
  185. package/vs-monaco/package/min/vs/editor/editor.main.nls.es.js +0 -31
  186. package/vs-monaco/package/min/vs/editor/editor.main.nls.fr.js +0 -29
  187. package/vs-monaco/package/min/vs/editor/editor.main.nls.it.js +0 -29
  188. package/vs-monaco/package/min/vs/editor/editor.main.nls.ja.js +0 -31
  189. package/vs-monaco/package/min/vs/editor/editor.main.nls.js +0 -29
  190. package/vs-monaco/package/min/vs/editor/editor.main.nls.ko.js +0 -29
  191. package/vs-monaco/package/min/vs/editor/editor.main.nls.ru.js +0 -31
  192. package/vs-monaco/package/min/vs/editor/editor.main.nls.zh-cn.js +0 -31
  193. package/vs-monaco/package/min/vs/editor/editor.main.nls.zh-tw.js +0 -29
  194. package/vs-monaco/package/min/vs/language/css/cssMode.js +0 -13
  195. package/vs-monaco/package/min/vs/language/css/cssWorker.js +0 -81
  196. package/vs-monaco/package/min/vs/language/html/htmlMode.js +0 -13
  197. package/vs-monaco/package/min/vs/language/html/htmlWorker.js +0 -453
  198. package/vs-monaco/package/min/vs/language/json/jsonMode.js +0 -15
  199. package/vs-monaco/package/min/vs/language/json/jsonWorker.js +0 -36
  200. package/vs-monaco/package/min/vs/language/typescript/tsMode.js +0 -20
  201. package/vs-monaco/package/min/vs/language/typescript/tsWorker.js +0 -37016
  202. package/vs-monaco/package/min/vs/loader.js +0 -11
  203. /package/src/{DomBuilder → Utils}/DomBuilder.js +0 -0
package/README.md CHANGED
@@ -1,20 +1,124 @@
1
1
  # tela.js
2
2
 
3
- Graphic library from scratch, with reference implementation of computer graphics algorithms.
3
+ Experimental graphic library from scratch, with reference implementation of computer graphics algorithms.
4
4
 
5
5
  ## Purpose
6
6
 
7
- The propose of a graphic engine is to be able to generate images in a computational way. The engine should also be capable to create videos and interactive demos or games. In this engine I want to be able to render complex scenes with dynamic objects with realistic or cartoonish appearance.
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
+ [![Playground](/tela_playground.webp)](https://pedroth.github.io/tela.js)
8
11
 
9
12
  # Table of Contents
10
13
 
11
14
  - [Quick start](#quick-start)
12
- - [Playground](#playground)
13
- - [Main features](#main-features)
15
+ - [Dependencies](#dependencies)
14
16
 
15
17
  # Quick start
16
18
 
17
- First you need to install [ffmpeg][ffmpeg] in your system, in a way that it is possible to write on the console:
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
- Then just install using `npm
27
-
28
-
29
- # Playground
30
-
31
- https://pedroth.github.io/tela.js/
130
+ # Dependencies
32
131
 
33
- # Main features
132
+ - [`bun`][bun]/[`node`][node]
133
+ - [`ffmpeg`][ffmpeg]
134
+ - [`node-sdl`][sdl]
34
135
 
35
- ## Visual
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
- [simplex]: https://en.wikipedia.org/wiki/Simplex
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