@guinetik/gcanvas 1.0.5 → 2.0.0
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/dist/aizawa.html +27 -0
- package/dist/clifford.html +25 -0
- package/dist/cmb.html +24 -0
- package/dist/dadras.html +26 -0
- package/dist/dejong.html +25 -0
- package/dist/gcanvas.es.js +5130 -372
- package/dist/gcanvas.es.min.js +1 -1
- package/dist/gcanvas.umd.js +1 -1
- package/dist/gcanvas.umd.min.js +1 -1
- package/dist/halvorsen.html +27 -0
- package/dist/index.html +96 -48
- package/dist/js/aizawa.js +425 -0
- package/dist/js/bezier.js +5 -5
- package/dist/js/clifford.js +236 -0
- package/dist/js/cmb.js +594 -0
- package/dist/js/dadras.js +405 -0
- package/dist/js/dejong.js +257 -0
- package/dist/js/halvorsen.js +405 -0
- package/dist/js/isometric.js +34 -46
- package/dist/js/lorenz.js +425 -0
- package/dist/js/painter.js +8 -8
- package/dist/js/rossler.js +480 -0
- package/dist/js/schrodinger.js +314 -18
- package/dist/js/thomas.js +394 -0
- package/dist/lorenz.html +27 -0
- package/dist/rossler.html +27 -0
- package/dist/scene-interactivity-test.html +220 -0
- package/dist/thomas.html +27 -0
- package/package.json +1 -1
- package/readme.md +30 -22
- package/src/game/objects/go.js +7 -0
- package/src/game/objects/index.js +2 -0
- package/src/game/objects/isometric-scene.js +53 -3
- package/src/game/objects/layoutscene.js +57 -0
- package/src/game/objects/mask.js +241 -0
- package/src/game/objects/scene.js +19 -0
- package/src/game/objects/wrapper.js +14 -2
- package/src/game/pipeline.js +17 -0
- package/src/game/ui/button.js +101 -16
- package/src/game/ui/theme.js +0 -6
- package/src/game/ui/togglebutton.js +25 -14
- package/src/game/ui/tooltip.js +12 -4
- package/src/index.js +3 -0
- package/src/io/gesture.js +409 -0
- package/src/io/index.js +4 -1
- package/src/io/keys.js +9 -1
- package/src/io/screen.js +476 -0
- package/src/math/attractors.js +664 -0
- package/src/math/heat.js +106 -0
- package/src/math/index.js +1 -0
- package/src/mixins/draggable.js +15 -19
- package/src/painter/painter.shapes.js +11 -5
- package/src/particle/particle-system.js +165 -1
- package/src/physics/index.js +26 -0
- package/src/physics/physics-updaters.js +333 -0
- package/src/physics/physics.js +375 -0
- package/src/shapes/image.js +5 -5
- package/src/shapes/index.js +2 -0
- package/src/shapes/parallelogram.js +147 -0
- package/src/shapes/righttriangle.js +115 -0
- package/src/shapes/svg.js +281 -100
- package/src/shapes/text.js +22 -6
- package/src/shapes/transformable.js +5 -0
- package/src/sound/effects.js +807 -0
- package/src/sound/index.js +13 -0
- package/src/webgl/index.js +7 -0
- package/src/webgl/shaders/clifford-point-shaders.js +131 -0
- package/src/webgl/shaders/dejong-point-shaders.js +131 -0
- package/src/webgl/shaders/point-sprite-shaders.js +152 -0
- package/src/webgl/webgl-clifford-renderer.js +477 -0
- package/src/webgl/webgl-dejong-renderer.js +472 -0
- package/src/webgl/webgl-line-renderer.js +391 -0
- package/src/webgl/webgl-particle-renderer.js +410 -0
- package/types/index.d.ts +30 -2
- package/types/io.d.ts +217 -0
- package/types/physics.d.ts +299 -0
- package/types/shapes.d.ts +8 -0
- package/types/webgl.d.ts +188 -109
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Physics module type definitions
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Collision result from checkCollision
|
|
7
|
+
*/
|
|
8
|
+
export interface CollisionResult {
|
|
9
|
+
/** Distance between particle centers */
|
|
10
|
+
dist: number;
|
|
11
|
+
/** Overlap amount (how much they're intersecting) */
|
|
12
|
+
overlap: number;
|
|
13
|
+
/** X component of distance vector */
|
|
14
|
+
dx: number;
|
|
15
|
+
/** Y component of distance vector */
|
|
16
|
+
dy: number;
|
|
17
|
+
/** Z component of distance vector */
|
|
18
|
+
dz: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Force vector result
|
|
23
|
+
*/
|
|
24
|
+
export interface ForceResult {
|
|
25
|
+
/** Force X component */
|
|
26
|
+
fx: number;
|
|
27
|
+
/** Force Y component */
|
|
28
|
+
fy: number;
|
|
29
|
+
/** Force Z component */
|
|
30
|
+
fz: number;
|
|
31
|
+
/** Distance between objects */
|
|
32
|
+
dist: number;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Velocity result from collision response
|
|
37
|
+
*/
|
|
38
|
+
export interface VelocityResult {
|
|
39
|
+
vx: number;
|
|
40
|
+
vy: number;
|
|
41
|
+
vz: number;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Elastic collision response result
|
|
46
|
+
*/
|
|
47
|
+
export interface ElasticCollisionResult {
|
|
48
|
+
/** New velocity for first particle */
|
|
49
|
+
v1: VelocityResult;
|
|
50
|
+
/** New velocity for second particle */
|
|
51
|
+
v2: VelocityResult;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* 3D bounding box
|
|
56
|
+
*/
|
|
57
|
+
export interface Bounds3D {
|
|
58
|
+
minX: number;
|
|
59
|
+
maxX: number;
|
|
60
|
+
minY: number;
|
|
61
|
+
maxY: number;
|
|
62
|
+
minZ?: number;
|
|
63
|
+
maxZ?: number;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Sphere definition
|
|
68
|
+
*/
|
|
69
|
+
export interface Sphere {
|
|
70
|
+
x: number;
|
|
71
|
+
y: number;
|
|
72
|
+
z?: number;
|
|
73
|
+
radius: number;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Position in 3D space
|
|
78
|
+
*/
|
|
79
|
+
export interface Position3D {
|
|
80
|
+
x: number;
|
|
81
|
+
y: number;
|
|
82
|
+
z?: number;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Particle with physics properties
|
|
87
|
+
*/
|
|
88
|
+
export interface PhysicsParticle extends Position3D {
|
|
89
|
+
vx: number;
|
|
90
|
+
vy: number;
|
|
91
|
+
vz?: number;
|
|
92
|
+
size?: number;
|
|
93
|
+
radius?: number;
|
|
94
|
+
mass?: number;
|
|
95
|
+
alive?: boolean;
|
|
96
|
+
custom?: {
|
|
97
|
+
mass?: number;
|
|
98
|
+
[key: string]: any;
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Particle updater function signature
|
|
104
|
+
*/
|
|
105
|
+
export type ParticleUpdater = (
|
|
106
|
+
particle: PhysicsParticle,
|
|
107
|
+
dt: number,
|
|
108
|
+
system?: any
|
|
109
|
+
) => void;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Static physics calculations
|
|
113
|
+
*/
|
|
114
|
+
export class Physics {
|
|
115
|
+
/**
|
|
116
|
+
* Calculate attraction/repulsion force using inverse square law
|
|
117
|
+
*/
|
|
118
|
+
static attract(
|
|
119
|
+
p1: Position3D,
|
|
120
|
+
p2: Position3D,
|
|
121
|
+
strength?: number,
|
|
122
|
+
minDist?: number
|
|
123
|
+
): ForceResult;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Calculate linear attraction force (constant strength)
|
|
127
|
+
*/
|
|
128
|
+
static attractLinear(
|
|
129
|
+
p1: Position3D,
|
|
130
|
+
p2: Position3D,
|
|
131
|
+
strength?: number
|
|
132
|
+
): ForceResult;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Check if two particles are colliding
|
|
136
|
+
*/
|
|
137
|
+
static checkCollision(
|
|
138
|
+
p1: PhysicsParticle,
|
|
139
|
+
p2: PhysicsParticle,
|
|
140
|
+
threshold?: number
|
|
141
|
+
): CollisionResult | null;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Calculate elastic collision response
|
|
145
|
+
*/
|
|
146
|
+
static elasticCollision(
|
|
147
|
+
p1: PhysicsParticle,
|
|
148
|
+
p2: PhysicsParticle,
|
|
149
|
+
collision: CollisionResult,
|
|
150
|
+
restitution?: number
|
|
151
|
+
): ElasticCollisionResult | null;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Separate overlapping particles
|
|
155
|
+
*/
|
|
156
|
+
static separate(
|
|
157
|
+
p1: PhysicsParticle,
|
|
158
|
+
p2: PhysicsParticle,
|
|
159
|
+
collision: CollisionResult,
|
|
160
|
+
separationFactor?: number
|
|
161
|
+
): void;
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Check and respond to 3D boundary collision
|
|
165
|
+
*/
|
|
166
|
+
static boundsCollision(
|
|
167
|
+
p: PhysicsParticle,
|
|
168
|
+
bounds: Bounds3D,
|
|
169
|
+
restitution?: number
|
|
170
|
+
): boolean;
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Check collision with spherical boundary
|
|
174
|
+
*/
|
|
175
|
+
static sphereBoundsCollision(
|
|
176
|
+
p: PhysicsParticle,
|
|
177
|
+
sphere: Sphere,
|
|
178
|
+
restitution?: number,
|
|
179
|
+
inside?: boolean
|
|
180
|
+
): boolean;
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Calculate kinetic energy
|
|
184
|
+
*/
|
|
185
|
+
static kineticEnergy(p: PhysicsParticle): number;
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Calculate speed (velocity magnitude)
|
|
189
|
+
*/
|
|
190
|
+
static speed(p: PhysicsParticle): number;
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Calculate distance between two positions
|
|
194
|
+
*/
|
|
195
|
+
static distance(p1: Position3D, p2: Position3D): number;
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Calculate squared distance (faster)
|
|
199
|
+
*/
|
|
200
|
+
static distanceSquared(p1: Position3D, p2: Position3D): number;
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Clamp velocity to maximum speed
|
|
204
|
+
*/
|
|
205
|
+
static clampVelocity(p: PhysicsParticle, maxSpeed: number): void;
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Apply force to particle
|
|
209
|
+
*/
|
|
210
|
+
static applyForce(
|
|
211
|
+
p: PhysicsParticle,
|
|
212
|
+
fx: number,
|
|
213
|
+
fy: number,
|
|
214
|
+
fz: number,
|
|
215
|
+
dt: number
|
|
216
|
+
): void;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Composable physics updaters for ParticleSystem
|
|
221
|
+
*/
|
|
222
|
+
export const PhysicsUpdaters: {
|
|
223
|
+
/**
|
|
224
|
+
* Apply mutual attraction/repulsion between particles
|
|
225
|
+
*/
|
|
226
|
+
mutualAttraction(
|
|
227
|
+
strength?: number,
|
|
228
|
+
cutoffDistance?: number,
|
|
229
|
+
minDistance?: number
|
|
230
|
+
): ParticleUpdater;
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Apply linear mutual attraction
|
|
234
|
+
*/
|
|
235
|
+
mutualAttractionLinear(
|
|
236
|
+
strength?: number,
|
|
237
|
+
cutoffDistance?: number
|
|
238
|
+
): ParticleUpdater;
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Handle particle-particle elastic collisions
|
|
242
|
+
*/
|
|
243
|
+
particleCollisions(
|
|
244
|
+
restitution?: number,
|
|
245
|
+
threshold?: number
|
|
246
|
+
): ParticleUpdater;
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Bounce off 3D box boundaries
|
|
250
|
+
*/
|
|
251
|
+
bounds3D(bounds: Bounds3D, restitution?: number): ParticleUpdater;
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Bounce inside spherical boundary
|
|
255
|
+
*/
|
|
256
|
+
sphereBounds(sphere: Sphere, restitution?: number): ParticleUpdater;
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Attract toward a point
|
|
260
|
+
*/
|
|
261
|
+
attractToPoint(
|
|
262
|
+
target: Position3D | (() => Position3D),
|
|
263
|
+
strength?: number,
|
|
264
|
+
minDist?: number
|
|
265
|
+
): ParticleUpdater;
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Apply uniform gravity
|
|
269
|
+
*/
|
|
270
|
+
gravity(gx?: number, gy?: number, gz?: number): ParticleUpdater;
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Limit maximum speed
|
|
274
|
+
*/
|
|
275
|
+
maxSpeed(maxSpeed: number): ParticleUpdater;
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Apply velocity drag
|
|
279
|
+
*/
|
|
280
|
+
drag(coefficient?: number): ParticleUpdater;
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Apply separation force to prevent overlap
|
|
284
|
+
*/
|
|
285
|
+
separation(strength?: number, threshold?: number): ParticleUpdater;
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Apply thermal motion (random jitter)
|
|
289
|
+
*/
|
|
290
|
+
thermal(
|
|
291
|
+
temperature: number | (() => number),
|
|
292
|
+
scale?: number
|
|
293
|
+
): ParticleUpdater;
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Apply orbital motion around center
|
|
297
|
+
*/
|
|
298
|
+
orbital(center: Position3D, strength?: number): ParticleUpdater;
|
|
299
|
+
};
|
package/types/shapes.d.ts
CHANGED
|
@@ -684,6 +684,14 @@ export class BezierShape extends Shape {
|
|
|
684
684
|
* SVG path shape.
|
|
685
685
|
*/
|
|
686
686
|
export class SVGShape extends Shape {
|
|
687
|
+
/**
|
|
688
|
+
* Load an SVG file from a URL and create an SVGShape
|
|
689
|
+
* @param url - URL to the SVG file
|
|
690
|
+
* @param options - Shape options
|
|
691
|
+
* @returns Promise that resolves to the SVGShape instance
|
|
692
|
+
*/
|
|
693
|
+
static fromURL(url: string, options?: ShapeOptions): Promise<SVGShape>;
|
|
694
|
+
|
|
687
695
|
/**
|
|
688
696
|
* @param svgPath - SVG path string (d attribute)
|
|
689
697
|
* @param options - Shape options
|
package/types/webgl.d.ts
CHANGED
|
@@ -1,109 +1,188 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GCanvas WebGL Module
|
|
3
|
-
* Optional WebGL rendering capabilities for enhanced visual effects.
|
|
4
|
-
* @module webgl
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
1
|
+
/**
|
|
2
|
+
* GCanvas WebGL Module
|
|
3
|
+
* Optional WebGL rendering capabilities for enhanced visual effects.
|
|
4
|
+
* @module webgl
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* WebGL renderer for enhanced visual effects.
|
|
9
|
+
* Provides shader-based rendering for complex effects.
|
|
10
|
+
*/
|
|
11
|
+
export class WebGLRenderer {
|
|
12
|
+
constructor(width: number, height: number);
|
|
13
|
+
|
|
14
|
+
isAvailable(): boolean;
|
|
15
|
+
resize(width: number, height: number): void;
|
|
16
|
+
useProgram(name: string, vertexSource: string, fragmentSource: string): WebGLProgram | null;
|
|
17
|
+
setUniforms(uniforms: Record<string, number | number[] | Float32Array>): void;
|
|
18
|
+
setColorUniform(name: string, color: string): void;
|
|
19
|
+
clear(r?: number, g?: number, b?: number, a?: number): void;
|
|
20
|
+
render(): void;
|
|
21
|
+
compositeOnto(ctx: CanvasRenderingContext2D, x: number, y: number, width?: number, height?: number): void;
|
|
22
|
+
getCanvas(): HTMLCanvasElement;
|
|
23
|
+
destroy(): void;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type WebGLBlendMode = "alpha" | "additive";
|
|
27
|
+
export type PointSpriteShape = "circle" | "glow" | "square" | "softSquare";
|
|
28
|
+
|
|
29
|
+
export class WebGLParticleRenderer {
|
|
30
|
+
constructor(
|
|
31
|
+
maxParticles?: number,
|
|
32
|
+
options?: {
|
|
33
|
+
width?: number;
|
|
34
|
+
height?: number;
|
|
35
|
+
shape?: PointSpriteShape;
|
|
36
|
+
blendMode?: WebGLBlendMode;
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
isAvailable(): boolean;
|
|
41
|
+
setBlendMode(mode: WebGLBlendMode): void;
|
|
42
|
+
setShape(shape: PointSpriteShape): void;
|
|
43
|
+
resize(width: number, height: number): void;
|
|
44
|
+
updateParticles(particles: Array<{ x: number; y: number; size: number; color: { r: number; g: number; b: number; a: number } }>): number;
|
|
45
|
+
clear(r?: number, g?: number, b?: number, a?: number): void;
|
|
46
|
+
render(count: number): void;
|
|
47
|
+
compositeOnto(ctx: CanvasRenderingContext2D, x?: number, y?: number, width?: number, height?: number): void;
|
|
48
|
+
destroy(): void;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export class WebGLLineRenderer {
|
|
52
|
+
constructor(
|
|
53
|
+
maxSegments?: number,
|
|
54
|
+
options?: {
|
|
55
|
+
width?: number;
|
|
56
|
+
height?: number;
|
|
57
|
+
blendMode?: WebGLBlendMode;
|
|
58
|
+
}
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
isAvailable(): boolean;
|
|
62
|
+
setBlendMode(mode: WebGLBlendMode): void;
|
|
63
|
+
resize(width: number, height: number): void;
|
|
64
|
+
updateLines(segments: any[]): number;
|
|
65
|
+
clear(r?: number, g?: number, b?: number, a?: number): void;
|
|
66
|
+
render(count: number): void;
|
|
67
|
+
compositeOnto(ctx: CanvasRenderingContext2D, x?: number, y?: number): void;
|
|
68
|
+
destroy(): void;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export const DEJONG_MAX_ITERATIONS: number;
|
|
72
|
+
export const DEJONG_POINT_VERTEX: string;
|
|
73
|
+
export const DEJONG_POINT_FRAGMENTS: Record<PointSpriteShape, string>;
|
|
74
|
+
|
|
75
|
+
export const CLIFFORD_MAX_ITERATIONS: number;
|
|
76
|
+
export const CLIFFORD_POINT_VERTEX: string;
|
|
77
|
+
export const CLIFFORD_POINT_FRAGMENTS: Record<PointSpriteShape, string>;
|
|
78
|
+
|
|
79
|
+
export class WebGLDeJongRenderer {
|
|
80
|
+
constructor(
|
|
81
|
+
seedCount?: number,
|
|
82
|
+
options?: {
|
|
83
|
+
width?: number;
|
|
84
|
+
height?: number;
|
|
85
|
+
shape?: PointSpriteShape;
|
|
86
|
+
blendMode?: WebGLBlendMode;
|
|
87
|
+
pointSize?: number;
|
|
88
|
+
pointScale?: number;
|
|
89
|
+
iterations?: number;
|
|
90
|
+
params?: { a: number; b: number; c: number; d: number };
|
|
91
|
+
color?: { r: number; g: number; b: number; a: number };
|
|
92
|
+
colorMode?: 0 | 1;
|
|
93
|
+
hueRange?: { minHue: number; maxHue: number };
|
|
94
|
+
maxSpeed?: number;
|
|
95
|
+
saturation?: number; // 0..1
|
|
96
|
+
lightness?: number; // 0..1
|
|
97
|
+
alpha?: number; // 0..1
|
|
98
|
+
hueShiftSpeed?: number; // degrees/sec
|
|
99
|
+
}
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
static identityMat3(): Float32Array;
|
|
103
|
+
static rotationMat3(angle: number): Float32Array;
|
|
104
|
+
|
|
105
|
+
isAvailable(): boolean;
|
|
106
|
+
resize(width: number, height: number): void;
|
|
107
|
+
setSeedCount(seedCount: number): void;
|
|
108
|
+
regenerateSeeds(): void;
|
|
109
|
+
setShape(shape: PointSpriteShape): void;
|
|
110
|
+
setBlendMode(mode: WebGLBlendMode): void;
|
|
111
|
+
setParams(params: { a?: number; b?: number; c?: number; d?: number }): void;
|
|
112
|
+
setIterations(iterations: number): void;
|
|
113
|
+
setZoom(zoom: number): void;
|
|
114
|
+
setTransform(mat3: Float32Array): void;
|
|
115
|
+
setPointSize(size: number): void;
|
|
116
|
+
setColor(color: { r?: number; g?: number; b?: number; a?: number }): void;
|
|
117
|
+
setColorMode(mode: 0 | 1): void;
|
|
118
|
+
setColorRamp(options: {
|
|
119
|
+
minHue?: number;
|
|
120
|
+
maxHue?: number;
|
|
121
|
+
maxSpeed?: number;
|
|
122
|
+
saturation?: number;
|
|
123
|
+
lightness?: number;
|
|
124
|
+
alpha?: number;
|
|
125
|
+
hueShiftSpeed?: number;
|
|
126
|
+
}): void;
|
|
127
|
+
clear(r?: number, g?: number, b?: number, a?: number): void;
|
|
128
|
+
render(timeSeconds?: number): void;
|
|
129
|
+
compositeOnto(ctx: CanvasRenderingContext2D, x?: number, y?: number, width?: number, height?: number): void;
|
|
130
|
+
destroy(): void;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export class WebGLCliffordRenderer {
|
|
134
|
+
constructor(
|
|
135
|
+
seedCount?: number,
|
|
136
|
+
options?: {
|
|
137
|
+
width?: number;
|
|
138
|
+
height?: number;
|
|
139
|
+
shape?: PointSpriteShape;
|
|
140
|
+
blendMode?: WebGLBlendMode;
|
|
141
|
+
pointSize?: number;
|
|
142
|
+
pointScale?: number;
|
|
143
|
+
iterations?: number;
|
|
144
|
+
params?: { a: number; b: number; c: number; d: number };
|
|
145
|
+
color?: { r: number; g: number; b: number; a: number };
|
|
146
|
+
colorMode?: 0 | 1;
|
|
147
|
+
hueRange?: { minHue: number; maxHue: number };
|
|
148
|
+
maxSpeed?: number;
|
|
149
|
+
saturation?: number; // 0..1
|
|
150
|
+
lightness?: number; // 0..1
|
|
151
|
+
alpha?: number; // 0..1
|
|
152
|
+
hueShiftSpeed?: number; // degrees/sec
|
|
153
|
+
}
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
static identityMat3(): Float32Array;
|
|
157
|
+
static rotationMat3(angle: number): Float32Array;
|
|
158
|
+
|
|
159
|
+
isAvailable(): boolean;
|
|
160
|
+
resize(width: number, height: number): void;
|
|
161
|
+
setSeedCount(seedCount: number): void;
|
|
162
|
+
regenerateSeeds(): void;
|
|
163
|
+
setShape(shape: PointSpriteShape): void;
|
|
164
|
+
setBlendMode(mode: WebGLBlendMode): void;
|
|
165
|
+
setParams(params: { a?: number; b?: number; c?: number; d?: number }): void;
|
|
166
|
+
setIterations(iterations: number): void;
|
|
167
|
+
setZoom(zoom: number): void;
|
|
168
|
+
setTransform(mat3: Float32Array): void;
|
|
169
|
+
setPointSize(size: number): void;
|
|
170
|
+
setColor(color: { r?: number; g?: number; b?: number; a?: number }): void;
|
|
171
|
+
setColorMode(mode: 0 | 1): void;
|
|
172
|
+
setColorRamp(options: {
|
|
173
|
+
minHue?: number;
|
|
174
|
+
maxHue?: number;
|
|
175
|
+
maxSpeed?: number;
|
|
176
|
+
saturation?: number;
|
|
177
|
+
lightness?: number;
|
|
178
|
+
alpha?: number;
|
|
179
|
+
hueShiftSpeed?: number;
|
|
180
|
+
}): void;
|
|
181
|
+
clear(r?: number, g?: number, b?: number, a?: number): void;
|
|
182
|
+
render(timeSeconds?: number): void;
|
|
183
|
+
compositeOnto(ctx: CanvasRenderingContext2D, x?: number, y?: number, width?: number, height?: number): void;
|
|
184
|
+
destroy(): void;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export const SPHERE_SHADERS: any;
|
|
188
|
+
|