@luma.gl/engine 8.5.7 → 8.6.0-alpha.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/dist/animation/key-frames.d.ts +18 -0
- package/dist/animation/key-frames.d.ts.map +1 -0
- package/dist/{esm/animation → animation}/key-frames.js +13 -6
- package/dist/animation/key-frames.js.map +1 -0
- package/dist/animation/timeline.d.ts +51 -0
- package/dist/animation/timeline.d.ts.map +1 -0
- package/dist/{esm/animation → animation}/timeline.js +10 -5
- package/dist/animation/timeline.js.map +1 -0
- package/dist/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +5 -0
- package/dist/bundle.js.map +1 -0
- package/dist/geometries/cone-geometry.d.ts +10 -0
- package/dist/geometries/cone-geometry.d.ts.map +1 -0
- package/dist/{esm/geometries → geometries}/cone-geometry.js +2 -2
- package/dist/geometries/cone-geometry.js.map +1 -0
- package/dist/geometries/cube-geometry.d.ts +9 -0
- package/dist/geometries/cube-geometry.d.ts.map +1 -0
- package/dist/{esm/geometries → geometries}/cube-geometry.js +18 -18
- package/dist/geometries/cube-geometry.js.map +1 -0
- package/dist/geometries/cylinder-geometry.d.ts +10 -0
- package/dist/geometries/cylinder-geometry.d.ts.map +1 -0
- package/dist/{esm/geometries → geometries}/cylinder-geometry.js +2 -2
- package/dist/geometries/cylinder-geometry.js.map +1 -0
- package/dist/geometries/ico-sphere-geometry.d.ts +11 -0
- package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -0
- package/dist/{esm/geometries → geometries}/ico-sphere-geometry.js +2 -2
- package/dist/geometries/ico-sphere-geometry.js.map +1 -0
- package/dist/geometries/plane-geometry.d.ts +10 -0
- package/dist/geometries/plane-geometry.d.ts.map +1 -0
- package/dist/{esm/geometries → geometries}/plane-geometry.js +5 -5
- package/dist/geometries/plane-geometry.js.map +1 -0
- package/dist/geometries/sphere-geometry.d.ts +12 -0
- package/dist/geometries/sphere-geometry.d.ts.map +1 -0
- package/dist/{esm/geometries → geometries}/sphere-geometry.js +2 -9
- package/dist/geometries/sphere-geometry.js.map +1 -0
- package/dist/geometries/truncated-cone-geometry.d.ts +13 -0
- package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -0
- package/dist/{esm/geometries → geometries}/truncated-cone-geometry.js +1 -1
- package/dist/geometries/truncated-cone-geometry.js.map +1 -0
- package/dist/geometry/geometry-utils.d.ts +2 -0
- package/dist/geometry/geometry-utils.d.ts.map +1 -0
- package/dist/{esm/geometry → geometry}/geometry-utils.js +0 -0
- package/dist/geometry/geometry-utils.js.map +1 -0
- package/dist/geometry/geometry.d.ts +44 -0
- package/dist/geometry/geometry.d.ts.map +1 -0
- package/dist/{esm/geometry → geometry}/geometry.js +28 -19
- package/dist/geometry/geometry.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/animation-loop.d.ts +120 -0
- package/dist/lib/animation-loop.d.ts.map +1 -0
- package/dist/{esm/lib → lib}/animation-loop.js +135 -97
- package/dist/lib/animation-loop.js.map +1 -0
- package/dist/lib/model-utils.d.ts +4 -0
- package/dist/lib/model-utils.d.ts.map +1 -0
- package/dist/{esm/lib → lib}/model-utils.js +3 -2
- package/dist/lib/model-utils.js.map +1 -0
- package/dist/lib/model.d.ts +97 -0
- package/dist/lib/model.d.ts.map +1 -0
- package/dist/{esm/lib → lib}/model.js +63 -13
- package/dist/lib/model.js.map +1 -0
- package/dist/lib/program-manager.d.ts +38 -0
- package/dist/lib/program-manager.d.ts.map +1 -0
- package/dist/{esm/lib → lib}/program-manager.js +22 -10
- package/dist/lib/program-manager.js.map +1 -0
- package/dist/transform/buffer-transform.d.ts +36 -0
- package/dist/transform/buffer-transform.d.ts.map +1 -0
- package/dist/{esm/transform → transform}/buffer-transform.js +13 -5
- package/dist/transform/buffer-transform.js.map +1 -0
- package/dist/transform/texture-transform.d.ts +57 -0
- package/dist/transform/texture-transform.d.ts.map +1 -0
- package/dist/{esm/transform → transform}/texture-transform.js +48 -16
- package/dist/transform/texture-transform.js.map +1 -0
- package/dist/transform/transform-shader-utils.d.ts +26 -0
- package/dist/transform/transform-shader-utils.d.ts.map +1 -0
- package/dist/{esm/transform → transform}/transform-shader-utils.js +38 -46
- package/dist/transform/transform-shader-utils.js.map +1 -0
- package/dist/transform/transform-types.d.ts +43 -0
- package/dist/transform/transform-types.d.ts.map +1 -0
- package/dist/transform/transform-types.js +2 -0
- package/dist/transform/transform-types.js.map +1 -0
- package/dist/transform/transform.d.ts +28 -0
- package/dist/transform/transform.d.ts.map +1 -0
- package/dist/{esm/transform → transform}/transform.js +39 -34
- package/dist/transform/transform.js.map +1 -0
- package/dist/utils/clip-space.d.ts +5 -0
- package/dist/utils/clip-space.d.ts.map +1 -0
- package/dist/{esm/utils → utils}/clip-space.js +3 -17
- package/dist/utils/clip-space.js.map +1 -0
- package/package.json +10 -10
- package/src/animation/{key-frames.js → key-frames.ts} +18 -16
- package/src/animation/{timeline.js → timeline.ts} +54 -18
- package/src/bundle.ts +4 -0
- package/src/geometries/{cone-geometry.js → cone-geometry.ts} +9 -3
- package/src/geometries/{cube-geometry.js → cube-geometry.ts} +17 -12
- package/src/geometries/cylinder-geometry.ts +20 -0
- package/src/geometries/{ico-sphere-geometry.js → ico-sphere-geometry.ts} +10 -3
- package/src/geometries/{plane-geometry.js → plane-geometry.ts} +11 -6
- package/src/geometries/{sphere-geometry.js → sphere-geometry.ts} +15 -11
- package/src/geometries/{truncated-cone-geometry.js → truncated-cone-geometry.ts} +14 -5
- package/src/geometry/{geometry-utils.js → geometry-utils.ts} +2 -0
- package/src/geometry/{geometry.js → geometry.ts} +47 -34
- package/src/index.ts +30 -0
- package/src/lib/{animation-loop.js → animation-loop.ts} +237 -130
- package/src/lib/{model-utils.js → model-utils.ts} +2 -2
- package/src/lib/{model.js → model.ts} +148 -57
- package/src/lib/{program-manager.js → program-manager.ts} +46 -26
- package/src/transform/{buffer-transform.js → buffer-transform.ts} +40 -24
- package/src/transform/{texture-transform.js → texture-transform.ts} +34 -23
- package/src/transform/{transform-shader-utils.js → transform-shader-utils.ts} +55 -27
- package/src/transform/transform-types.ts +41 -0
- package/src/transform/{transform.js → transform.ts} +45 -49
- package/src/utils/{clip-space.js → clip-space.ts} +4 -3
- package/dist/dist.js +0 -32248
- package/dist/dist.min.js +0 -1
- package/dist/es5/animation/key-frames.d.ts +0 -19
- package/dist/es5/animation/key-frames.js +0 -95
- package/dist/es5/animation/key-frames.js.map +0 -1
- package/dist/es5/animation/timeline.d.ts +0 -39
- package/dist/es5/animation/timeline.js +0 -211
- package/dist/es5/animation/timeline.js.map +0 -1
- package/dist/es5/bundle.js +0 -9
- package/dist/es5/bundle.js.map +0 -1
- package/dist/es5/geometries/cone-geometry.d.ts +0 -5
- package/dist/es5/geometries/cone-geometry.js +0 -59
- package/dist/es5/geometries/cone-geometry.js.map +0 -1
- package/dist/es5/geometries/cube-geometry.d.ts +0 -5
- package/dist/es5/geometries/cube-geometry.js +0 -75
- package/dist/es5/geometries/cube-geometry.js.map +0 -1
- package/dist/es5/geometries/cylinder-geometry.d.ts +0 -5
- package/dist/es5/geometries/cylinder-geometry.js +0 -55
- package/dist/es5/geometries/cylinder-geometry.js.map +0 -1
- package/dist/es5/geometries/ico-sphere-geometry.d.ts +0 -5
- package/dist/es5/geometries/ico-sphere-geometry.js +0 -217
- package/dist/es5/geometries/ico-sphere-geometry.js.map +0 -1
- package/dist/es5/geometries/index.d.ts +0 -7
- package/dist/es5/geometries/index.js +0 -64
- package/dist/es5/geometries/index.js.map +0 -1
- package/dist/es5/geometries/plane-geometry.d.ts +0 -5
- package/dist/es5/geometries/plane-geometry.js +0 -168
- package/dist/es5/geometries/plane-geometry.js.map +0 -1
- package/dist/es5/geometries/sphere-geometry.d.ts +0 -5
- package/dist/es5/geometries/sphere-geometry.js +0 -152
- package/dist/es5/geometries/sphere-geometry.js.map +0 -1
- package/dist/es5/geometries/truncated-cone-geometry.d.ts +0 -5
- package/dist/es5/geometries/truncated-cone-geometry.js +0 -171
- package/dist/es5/geometries/truncated-cone-geometry.js.map +0 -1
- package/dist/es5/geometry/geometry-utils.d.ts +0 -1
- package/dist/es5/geometry/geometry-utils.js +0 -49
- package/dist/es5/geometry/geometry-utils.js.map +0 -1
- package/dist/es5/geometry/geometry.d.ts +0 -25
- package/dist/es5/geometry/geometry.js +0 -150
- package/dist/es5/geometry/geometry.js.map +0 -1
- package/dist/es5/index.d.ts +0 -19
- package/dist/es5/index.js +0 -128
- package/dist/es5/index.js.map +0 -1
- package/dist/es5/lib/animation-loop.d.ts +0 -158
- package/dist/es5/lib/animation-loop.js +0 -642
- package/dist/es5/lib/animation-loop.js.map +0 -1
- package/dist/es5/lib/model-utils.d.ts +0 -3
- package/dist/es5/lib/model-utils.js +0 -110
- package/dist/es5/lib/model-utils.js.map +0 -1
- package/dist/es5/lib/model.d.ts +0 -214
- package/dist/es5/lib/model.js +0 -584
- package/dist/es5/lib/model.js.map +0 -1
- package/dist/es5/lib/program-manager.d.ts +0 -79
- package/dist/es5/lib/program-manager.js +0 -238
- package/dist/es5/lib/program-manager.js.map +0 -1
- package/dist/es5/transform/buffer-transform.d.ts +0 -13
- package/dist/es5/transform/buffer-transform.js +0 -294
- package/dist/es5/transform/buffer-transform.js.map +0 -1
- package/dist/es5/transform/resource-transform.d.ts +0 -16
- package/dist/es5/transform/texture-transform.d.ts +0 -16
- package/dist/es5/transform/texture-transform.js +0 -405
- package/dist/es5/transform/texture-transform.js.map +0 -1
- package/dist/es5/transform/transform-shader-utils.d.ts +0 -31
- package/dist/es5/transform/transform-shader-utils.js +0 -160
- package/dist/es5/transform/transform-shader-utils.js.map +0 -1
- package/dist/es5/transform/transform.d.ts +0 -33
- package/dist/es5/transform/transform.js +0 -274
- package/dist/es5/transform/transform.js.map +0 -1
- package/dist/es5/utils/clip-space.d.ts +0 -5
- package/dist/es5/utils/clip-space.js +0 -72
- package/dist/es5/utils/clip-space.js.map +0 -1
- package/dist/esm/animation/key-frames.d.ts +0 -19
- package/dist/esm/animation/key-frames.js.map +0 -1
- package/dist/esm/animation/timeline.d.ts +0 -39
- package/dist/esm/animation/timeline.js.map +0 -1
- package/dist/esm/bundle.js +0 -7
- package/dist/esm/bundle.js.map +0 -1
- package/dist/esm/geometries/cone-geometry.d.ts +0 -5
- package/dist/esm/geometries/cone-geometry.js.map +0 -1
- package/dist/esm/geometries/cube-geometry.d.ts +0 -5
- package/dist/esm/geometries/cube-geometry.js.map +0 -1
- package/dist/esm/geometries/cylinder-geometry.d.ts +0 -5
- package/dist/esm/geometries/cylinder-geometry.js.map +0 -1
- package/dist/esm/geometries/ico-sphere-geometry.d.ts +0 -5
- package/dist/esm/geometries/ico-sphere-geometry.js.map +0 -1
- package/dist/esm/geometries/index.d.ts +0 -7
- package/dist/esm/geometries/index.js +0 -8
- package/dist/esm/geometries/index.js.map +0 -1
- package/dist/esm/geometries/plane-geometry.d.ts +0 -5
- package/dist/esm/geometries/plane-geometry.js.map +0 -1
- package/dist/esm/geometries/sphere-geometry.d.ts +0 -5
- package/dist/esm/geometries/sphere-geometry.js.map +0 -1
- package/dist/esm/geometries/truncated-cone-geometry.d.ts +0 -5
- package/dist/esm/geometries/truncated-cone-geometry.js.map +0 -1
- package/dist/esm/geometry/geometry-utils.d.ts +0 -1
- package/dist/esm/geometry/geometry-utils.js.map +0 -1
- package/dist/esm/geometry/geometry.d.ts +0 -25
- package/dist/esm/geometry/geometry.js.map +0 -1
- package/dist/esm/index.d.ts +0 -19
- package/dist/esm/index.js +0 -16
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/lib/animation-loop.d.ts +0 -158
- package/dist/esm/lib/animation-loop.js.map +0 -1
- package/dist/esm/lib/model-utils.d.ts +0 -3
- package/dist/esm/lib/model-utils.js.map +0 -1
- package/dist/esm/lib/model.d.ts +0 -214
- package/dist/esm/lib/model.js.map +0 -1
- package/dist/esm/lib/program-manager.d.ts +0 -79
- package/dist/esm/lib/program-manager.js.map +0 -1
- package/dist/esm/transform/buffer-transform.d.ts +0 -13
- package/dist/esm/transform/buffer-transform.js.map +0 -1
- package/dist/esm/transform/resource-transform.d.ts +0 -16
- package/dist/esm/transform/texture-transform.d.ts +0 -16
- package/dist/esm/transform/texture-transform.js.map +0 -1
- package/dist/esm/transform/transform-shader-utils.d.ts +0 -31
- package/dist/esm/transform/transform-shader-utils.js.map +0 -1
- package/dist/esm/transform/transform.d.ts +0 -33
- package/dist/esm/transform/transform.js.map +0 -1
- package/dist/esm/utils/clip-space.d.ts +0 -5
- package/dist/esm/utils/clip-space.js.map +0 -1
- package/src/animation/key-frames.d.ts +0 -19
- package/src/animation/timeline.d.ts +0 -39
- package/src/bundle.js +0 -7
- package/src/geometries/cone-geometry.d.ts +0 -5
- package/src/geometries/cube-geometry.d.ts +0 -5
- package/src/geometries/cylinder-geometry.d.ts +0 -5
- package/src/geometries/cylinder-geometry.js +0 -14
- package/src/geometries/ico-sphere-geometry.d.ts +0 -5
- package/src/geometries/index.d.ts +0 -7
- package/src/geometries/index.js +0 -7
- package/src/geometries/plane-geometry.d.ts +0 -5
- package/src/geometries/sphere-geometry.d.ts +0 -5
- package/src/geometries/truncated-cone-geometry.d.ts +0 -5
- package/src/geometry/geometry-utils.d.ts +0 -1
- package/src/geometry/geometry.d.ts +0 -25
- package/src/index.d.ts +0 -19
- package/src/index.js +0 -22
- package/src/lib/animation-loop.d.ts +0 -158
- package/src/lib/model-utils.d.ts +0 -3
- package/src/lib/model.d.ts +0 -214
- package/src/lib/program-manager.d.ts +0 -79
- package/src/transform/buffer-transform.d.ts +0 -13
- package/src/transform/resource-transform.d.ts +0 -16
- package/src/transform/texture-transform.d.ts +0 -16
- package/src/transform/transform-shader-utils.d.ts +0 -31
- package/src/transform/transform.d.ts +0 -33
- package/src/utils/clip-space.d.ts +0 -5
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
// keyframes
|
|
2
|
+
export type KeyFrame<T> = [number, T];
|
|
2
3
|
|
|
3
|
-
export class KeyFrames {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
export class KeyFrames<T = number> {
|
|
5
|
+
startIndex: number = -1;
|
|
6
|
+
endIndex: number = -1;
|
|
7
|
+
factor: number = 0;
|
|
8
|
+
times: number[] = [];
|
|
9
|
+
values: T[] = [];
|
|
10
|
+
private _lastTime = -1;
|
|
11
|
+
|
|
12
|
+
constructor(keyFrames: KeyFrame<T>[]) {
|
|
11
13
|
this.setKeyFrames(keyFrames);
|
|
12
14
|
this.setTime(0);
|
|
13
15
|
}
|
|
14
16
|
|
|
15
|
-
setKeyFrames(keyFrames) {
|
|
17
|
+
setKeyFrames(keyFrames: KeyFrame<T>[]): void {
|
|
16
18
|
const numKeys = keyFrames.length;
|
|
17
19
|
this.times.length = numKeys;
|
|
18
20
|
this.values.length = numKeys;
|
|
@@ -25,7 +27,7 @@ export class KeyFrames {
|
|
|
25
27
|
this._calculateKeys(this._lastTime);
|
|
26
28
|
}
|
|
27
29
|
|
|
28
|
-
setTime(time) {
|
|
30
|
+
setTime(time: number): void {
|
|
29
31
|
time = Math.max(0, time);
|
|
30
32
|
|
|
31
33
|
if (time !== this._lastTime) {
|
|
@@ -34,23 +36,23 @@ export class KeyFrames {
|
|
|
34
36
|
}
|
|
35
37
|
}
|
|
36
38
|
|
|
37
|
-
getStartTime() {
|
|
39
|
+
getStartTime(): number {
|
|
38
40
|
return this.times[this.startIndex];
|
|
39
41
|
}
|
|
40
42
|
|
|
41
|
-
getEndTime() {
|
|
43
|
+
getEndTime(): number {
|
|
42
44
|
return this.times[this.endIndex];
|
|
43
45
|
}
|
|
44
46
|
|
|
45
|
-
getStartData() {
|
|
47
|
+
getStartData(): T {
|
|
46
48
|
return this.values[this.startIndex];
|
|
47
49
|
}
|
|
48
50
|
|
|
49
|
-
getEndData() {
|
|
51
|
+
getEndData(): T {
|
|
50
52
|
return this.values[this.endIndex];
|
|
51
53
|
}
|
|
52
54
|
|
|
53
|
-
_calculateKeys(time) {
|
|
55
|
+
_calculateKeys(time: number): void {
|
|
54
56
|
let index = 0;
|
|
55
57
|
const numKeys = this.times.length;
|
|
56
58
|
|
|
@@ -1,20 +1,56 @@
|
|
|
1
|
+
// luma.gl, MIT license
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Timeline channel properties
|
|
5
|
+
* @param delay = 0;
|
|
6
|
+
* @param duration = Number.POSITIVE_INFINITY;
|
|
7
|
+
* @param rate = 1
|
|
8
|
+
* @param repeat = 1
|
|
9
|
+
*/
|
|
10
|
+
export type ChannelOptions = {
|
|
11
|
+
delay?: number
|
|
12
|
+
duration?: number
|
|
13
|
+
rate?: number
|
|
14
|
+
repeat?: number
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type AnimationOptions = {
|
|
18
|
+
setTime: (time: number) => void
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
type Channel = {
|
|
22
|
+
time: number
|
|
23
|
+
delay: number
|
|
24
|
+
duration: number
|
|
25
|
+
rate: number
|
|
26
|
+
repeat: number
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
type Animation = {
|
|
30
|
+
channel: number;
|
|
31
|
+
animation: {
|
|
32
|
+
setTime: (time: number) => void
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
1
36
|
let channelHandles = 1;
|
|
2
37
|
let animationHandles = 1;
|
|
3
38
|
|
|
4
39
|
export class Timeline {
|
|
40
|
+
time: number = 0;
|
|
41
|
+
channels = new Map<number, Channel>();
|
|
42
|
+
animations = new Map<number, Animation>();
|
|
43
|
+
playing: boolean = false;
|
|
44
|
+
lastEngineTime: number = -1;
|
|
45
|
+
|
|
5
46
|
constructor() {
|
|
6
|
-
this.time = 0;
|
|
7
|
-
this.channels = new Map();
|
|
8
|
-
this.animations = new Map();
|
|
9
|
-
this.playing = false;
|
|
10
|
-
this.lastEngineTime = -1;
|
|
11
47
|
}
|
|
12
48
|
|
|
13
|
-
addChannel(props) {
|
|
49
|
+
addChannel(props: ChannelOptions): number {
|
|
14
50
|
const {delay = 0, duration = Number.POSITIVE_INFINITY, rate = 1, repeat = 1} = props;
|
|
15
51
|
|
|
16
52
|
const handle = channelHandles++;
|
|
17
|
-
const channel = {
|
|
53
|
+
const channel: Channel = {
|
|
18
54
|
time: 0,
|
|
19
55
|
delay,
|
|
20
56
|
duration,
|
|
@@ -27,7 +63,7 @@ export class Timeline {
|
|
|
27
63
|
return handle;
|
|
28
64
|
}
|
|
29
65
|
|
|
30
|
-
removeChannel(handle) {
|
|
66
|
+
removeChannel(handle: number): void {
|
|
31
67
|
this.channels.delete(handle);
|
|
32
68
|
|
|
33
69
|
for (const [animationHandle, animation] of this.animations) {
|
|
@@ -37,7 +73,7 @@ export class Timeline {
|
|
|
37
73
|
}
|
|
38
74
|
}
|
|
39
75
|
|
|
40
|
-
isFinished(handle) {
|
|
76
|
+
isFinished(handle: number): boolean {
|
|
41
77
|
const channel = this.channels.get(handle);
|
|
42
78
|
if (channel === undefined) {
|
|
43
79
|
return false;
|
|
@@ -46,7 +82,7 @@ export class Timeline {
|
|
|
46
82
|
return this.time >= channel.delay + channel.duration * channel.repeat;
|
|
47
83
|
}
|
|
48
84
|
|
|
49
|
-
getTime(handle) {
|
|
85
|
+
getTime(handle?: number): number {
|
|
50
86
|
if (handle === undefined) {
|
|
51
87
|
return this.time;
|
|
52
88
|
}
|
|
@@ -60,7 +96,7 @@ export class Timeline {
|
|
|
60
96
|
return channel.time;
|
|
61
97
|
}
|
|
62
98
|
|
|
63
|
-
setTime(time) {
|
|
99
|
+
setTime(time: number): void {
|
|
64
100
|
this.time = Math.max(0, time);
|
|
65
101
|
|
|
66
102
|
const channels = this.channels.values();
|
|
@@ -75,20 +111,20 @@ export class Timeline {
|
|
|
75
111
|
}
|
|
76
112
|
}
|
|
77
113
|
|
|
78
|
-
play() {
|
|
114
|
+
play(): void {
|
|
79
115
|
this.playing = true;
|
|
80
116
|
}
|
|
81
117
|
|
|
82
|
-
pause() {
|
|
118
|
+
pause(): void {
|
|
83
119
|
this.playing = false;
|
|
84
120
|
this.lastEngineTime = -1;
|
|
85
121
|
}
|
|
86
122
|
|
|
87
|
-
reset() {
|
|
123
|
+
reset(): void {
|
|
88
124
|
this.setTime(0);
|
|
89
125
|
}
|
|
90
126
|
|
|
91
|
-
attachAnimation(animation, channelHandle) {
|
|
127
|
+
attachAnimation(animation: AnimationOptions, channelHandle: number): number {
|
|
92
128
|
const animationHandle = animationHandles++;
|
|
93
129
|
|
|
94
130
|
this.animations.set(animationHandle, {
|
|
@@ -101,11 +137,11 @@ export class Timeline {
|
|
|
101
137
|
return animationHandle;
|
|
102
138
|
}
|
|
103
139
|
|
|
104
|
-
detachAnimation(handle) {
|
|
140
|
+
detachAnimation(handle: number): void {
|
|
105
141
|
this.animations.delete(handle);
|
|
106
142
|
}
|
|
107
143
|
|
|
108
|
-
update(engineTime) {
|
|
144
|
+
update(engineTime: number): void {
|
|
109
145
|
if (this.playing) {
|
|
110
146
|
if (this.lastEngineTime === -1) {
|
|
111
147
|
this.lastEngineTime = engineTime;
|
|
@@ -115,7 +151,7 @@ export class Timeline {
|
|
|
115
151
|
}
|
|
116
152
|
}
|
|
117
153
|
|
|
118
|
-
_setChannelTime(channel, time) {
|
|
154
|
+
_setChannelTime(channel: Channel, time: number): void {
|
|
119
155
|
const offsetTime = time - channel.delay;
|
|
120
156
|
const totalDuration = channel.duration * channel.repeat;
|
|
121
157
|
// Note(Tarek): Don't loop on final repeat.
|
package/src/bundle.ts
ADDED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import TruncatedConeGeometry from './truncated-cone-geometry';
|
|
1
|
+
import {TruncatedConeGeometry} from './truncated-cone-geometry';
|
|
2
2
|
import {uid} from '@luma.gl/webgl';
|
|
3
3
|
|
|
4
|
-
export
|
|
5
|
-
|
|
4
|
+
export type ConeGeometryProps = {
|
|
5
|
+
id?: string;
|
|
6
|
+
radius?: number;
|
|
7
|
+
cap?: boolean;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export class ConeGeometry extends TruncatedConeGeometry {
|
|
11
|
+
constructor(props: ConeGeometryProps = {}) {
|
|
6
12
|
const {id = uid('cone-geometry'), radius = 1, cap = true} = props;
|
|
7
13
|
super({
|
|
8
14
|
...props,
|
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
import Geometry from '../geometry/geometry';
|
|
2
2
|
import {uid} from '@luma.gl/webgl';
|
|
3
3
|
|
|
4
|
+
export type CubeGeometryProps = {
|
|
5
|
+
id?: string;
|
|
6
|
+
attributes?
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export class CubeGeometry extends Geometry {
|
|
10
|
+
constructor(props: CubeGeometryProps = {}) {
|
|
11
|
+
const {id = uid('cube-geometry')} = props;
|
|
12
|
+
super({
|
|
13
|
+
...props,
|
|
14
|
+
id,
|
|
15
|
+
indices: {size: 1, value: new Uint16Array(CUBE_INDICES)},
|
|
16
|
+
attributes: {...ATTRIBUTES, ...props.attributes}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
4
21
|
// prettier-ignore
|
|
5
22
|
const CUBE_INDICES = new Uint16Array([
|
|
6
23
|
0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13,
|
|
@@ -55,15 +72,3 @@ const ATTRIBUTES = {
|
|
|
55
72
|
NORMAL: {size: 3, value: new Float32Array(CUBE_NORMALS)},
|
|
56
73
|
TEXCOORD_0: {size: 2, value: new Float32Array(CUBE_TEX_COORDS)}
|
|
57
74
|
};
|
|
58
|
-
|
|
59
|
-
export default class CubeGeometry extends Geometry {
|
|
60
|
-
constructor(props = {}) {
|
|
61
|
-
const {id = uid('cube-geometry')} = props;
|
|
62
|
-
super({
|
|
63
|
-
...props,
|
|
64
|
-
id,
|
|
65
|
-
indices: {size: 1, value: new Uint16Array(CUBE_INDICES)},
|
|
66
|
-
attributes: {...ATTRIBUTES, ...props.attributes}
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import {TruncatedConeGeometry} from './truncated-cone-geometry';
|
|
2
|
+
import {uid} from '@luma.gl/webgl';
|
|
3
|
+
|
|
4
|
+
export type CylinderGeometryProps = {
|
|
5
|
+
id?: string;
|
|
6
|
+
radius?: number;
|
|
7
|
+
attributes?
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export class CylinderGeometry extends TruncatedConeGeometry {
|
|
11
|
+
constructor(props: CylinderGeometryProps = {}) {
|
|
12
|
+
const {id = uid('cylinder-geometry'), radius = 1} = props;
|
|
13
|
+
super({
|
|
14
|
+
...props,
|
|
15
|
+
id,
|
|
16
|
+
bottomRadius: radius,
|
|
17
|
+
topRadius: radius
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -7,8 +7,15 @@ import {uid} from '@luma.gl/webgl';
|
|
|
7
7
|
const ICO_POSITIONS = [-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 1, 0, -1, 0, 1, 0, 0];
|
|
8
8
|
const ICO_INDICES = [3, 4, 5, 3, 5, 1, 3, 1, 0, 3, 0, 4, 4, 0, 2, 4, 2, 5, 2, 0, 1, 5, 2, 1];
|
|
9
9
|
|
|
10
|
-
export
|
|
11
|
-
|
|
10
|
+
export type IcoSphereGeometryProps = {
|
|
11
|
+
id?: string;
|
|
12
|
+
radius?: number;
|
|
13
|
+
iterations?: number;
|
|
14
|
+
attributes?
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export class IcoSphereGeometry extends Geometry {
|
|
18
|
+
constructor(props: IcoSphereGeometryProps = {}) {
|
|
12
19
|
const {id = uid('ico-sphere-geometry')} = props;
|
|
13
20
|
const {indices, attributes} = tesselateIcosaHedron(props);
|
|
14
21
|
super({
|
|
@@ -20,7 +27,7 @@ export default class IcoSphereGeometry extends Geometry {
|
|
|
20
27
|
}
|
|
21
28
|
}
|
|
22
29
|
|
|
23
|
-
function tesselateIcosaHedron(props) {
|
|
30
|
+
function tesselateIcosaHedron(props: IcoSphereGeometryProps) {
|
|
24
31
|
const {iterations = 0} = props;
|
|
25
32
|
|
|
26
33
|
const PI = Math.PI;
|
|
@@ -2,8 +2,17 @@ import Geometry from '../geometry/geometry';
|
|
|
2
2
|
import {unpackIndexedGeometry} from '../geometry/geometry-utils';
|
|
3
3
|
import {uid} from '@luma.gl/webgl';
|
|
4
4
|
|
|
5
|
-
export
|
|
6
|
-
|
|
5
|
+
export type PlaneGeometryProps = {
|
|
6
|
+
id?: string;
|
|
7
|
+
radius?: number;
|
|
8
|
+
attributes?
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
// Primitives inspired by TDL http://code.google.com/p/webglsamples/,
|
|
12
|
+
// copyright 2011 Google Inc. new BSD License
|
|
13
|
+
// (http://www.opensource.org/licenses/bsd-license.php).
|
|
14
|
+
export class PlaneGeometry extends Geometry {
|
|
15
|
+
constructor(props: PlaneGeometryProps = {}) {
|
|
7
16
|
const {id = uid('plane-geometry')} = props;
|
|
8
17
|
|
|
9
18
|
const {indices, attributes} = tesselatePlane(props);
|
|
@@ -16,10 +25,6 @@ export default class PlaneGeometry extends Geometry {
|
|
|
16
25
|
}
|
|
17
26
|
}
|
|
18
27
|
|
|
19
|
-
// Primitives inspired by TDL http://code.google.com/p/webglsamples/,
|
|
20
|
-
// copyright 2011 Google Inc. new BSD License
|
|
21
|
-
// (http://www.opensource.org/licenses/bsd-license.php).
|
|
22
|
-
/* eslint-disable max-statements, complexity */
|
|
23
28
|
/* eslint-disable complexity, max-statements */
|
|
24
29
|
function tesselatePlane(props) {
|
|
25
30
|
const {type = 'x,y', offset = 0, flipCull = false, unpack = false} = props;
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
import Geometry from '../geometry/geometry';
|
|
2
2
|
import {uid} from '@luma.gl/webgl';
|
|
3
3
|
|
|
4
|
-
export
|
|
5
|
-
|
|
4
|
+
export type SphereGeometryProps = {
|
|
5
|
+
id?: string;
|
|
6
|
+
radius?: number;
|
|
7
|
+
nlat?: number;
|
|
8
|
+
nlong?: number;
|
|
9
|
+
attributes?
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
// Primitives inspired by TDL http://code.google.com/p/webglsamples/,
|
|
13
|
+
// copyright 2011 Google Inc. new BSD License
|
|
14
|
+
// (http://www.opensource.org/licenses/bsd-license.php).
|
|
15
|
+
export class SphereGeometry extends Geometry {
|
|
16
|
+
constructor(props: SphereGeometryProps = {}) {
|
|
6
17
|
const {id = uid('sphere-geometry')} = props;
|
|
7
18
|
const {indices, attributes} = tesselateSphere(props);
|
|
8
19
|
super({
|
|
@@ -14,13 +25,9 @@ export default class SphereGeometry extends Geometry {
|
|
|
14
25
|
}
|
|
15
26
|
}
|
|
16
27
|
|
|
17
|
-
// Primitives inspired by TDL http://code.google.com/p/webglsamples/,
|
|
18
|
-
// copyright 2011 Google Inc. new BSD License
|
|
19
|
-
// (http://www.opensource.org/licenses/bsd-license.php).
|
|
20
28
|
/* eslint-disable max-statements, complexity */
|
|
21
|
-
function tesselateSphere(props) {
|
|
29
|
+
function tesselateSphere(props: SphereGeometryProps) {
|
|
22
30
|
const {nlat = 10, nlong = 10} = props;
|
|
23
|
-
let {radius = 1} = props;
|
|
24
31
|
|
|
25
32
|
const startLat = 0;
|
|
26
33
|
const endLat = Math.PI;
|
|
@@ -30,10 +37,7 @@ function tesselateSphere(props) {
|
|
|
30
37
|
const longRange = endLong - startLong;
|
|
31
38
|
const numVertices = (nlat + 1) * (nlong + 1);
|
|
32
39
|
|
|
33
|
-
|
|
34
|
-
const value = radius;
|
|
35
|
-
radius = (n1, n2, n3, u, v) => value;
|
|
36
|
-
}
|
|
40
|
+
const radius = (n1, n2, n3, u, v) => props.radius || 1;
|
|
37
41
|
|
|
38
42
|
const positions = new Float32Array(numVertices * 3);
|
|
39
43
|
const normals = new Float32Array(numVertices * 3);
|
|
@@ -7,8 +7,20 @@ const INDEX_OFFSETS = {
|
|
|
7
7
|
z: [1, 2, 0]
|
|
8
8
|
};
|
|
9
9
|
|
|
10
|
-
export
|
|
11
|
-
|
|
10
|
+
export type TruncatedConeGeometryProps = {
|
|
11
|
+
id?: string;
|
|
12
|
+
topRadius?: number;
|
|
13
|
+
bottomRadius?: number;
|
|
14
|
+
topCap?: boolean;
|
|
15
|
+
bottomCap?: boolean;
|
|
16
|
+
attributes?
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// Primitives inspired by TDL http://code.google.com/p/webglsamples/,
|
|
20
|
+
// copyright 2011 Google Inc. new BSD License
|
|
21
|
+
// (http://www.opensource.org/licenses/bsd-license.php).
|
|
22
|
+
export class TruncatedConeGeometry extends Geometry {
|
|
23
|
+
constructor(props: TruncatedConeGeometryProps = {}) {
|
|
12
24
|
const {id = uid('truncated-code-geometry')} = props;
|
|
13
25
|
const {indices, attributes} = tesselateTruncatedCone(props);
|
|
14
26
|
super({
|
|
@@ -20,9 +32,6 @@ export default class TruncatedConeGeometry extends Geometry {
|
|
|
20
32
|
}
|
|
21
33
|
}
|
|
22
34
|
|
|
23
|
-
// Primitives inspired by TDL http://code.google.com/p/webglsamples/,
|
|
24
|
-
// copyright 2011 Google Inc. new BSD License
|
|
25
|
-
// (http://www.opensource.org/licenses/bsd-license.php).
|
|
26
35
|
/* eslint-disable max-statements, complexity */
|
|
27
36
|
function tesselateTruncatedCone(props) {
|
|
28
37
|
const {
|
|
@@ -1,57 +1,70 @@
|
|
|
1
|
+
// luma.gl, MIT license
|
|
2
|
+
import GL from '@luma.gl/constants';
|
|
1
3
|
import {uid, assert} from '@luma.gl/webgl';
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
//
|
|
5
|
+
/**
|
|
6
|
+
* Rendering primitives - "opology" specifies how to extract primitives from vertices.
|
|
7
|
+
*/
|
|
8
|
+
export type Topology =
|
|
9
|
+
GL.POINTS | // draw single points.
|
|
10
|
+
GL.LINES | // draw lines. Each vertex connects to the one after it.
|
|
11
|
+
GL.LINE_LOOP | // draw lines. Each set of two vertices is treated as a separate line segment.
|
|
12
|
+
GL.LINE_STRIP | // draw a connected group of line segments from the first vertex to the last
|
|
13
|
+
GL.TRIANGLES | // draw triangles. Each set of three vertices creates a separate triangle.
|
|
14
|
+
GL.TRIANGLE_STRIP | // draw a connected group of triangles.
|
|
15
|
+
GL.TRIANGLE_FAN // draw a connected group of triangles.
|
|
16
|
+
;
|
|
17
|
+
|
|
18
|
+
export type GeometryProps = {
|
|
19
|
+
id?: string;
|
|
20
|
+
drawMode?: Topology,
|
|
21
|
+
attributes?: {},
|
|
22
|
+
indices?;
|
|
23
|
+
vertexCount?: number
|
|
14
24
|
};
|
|
15
25
|
|
|
16
26
|
export default class Geometry {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
27
|
+
/** @deprecated */
|
|
28
|
+
static DRAW_MODE = {
|
|
29
|
+
POINTS: GL.POINTS, // draw single points.
|
|
30
|
+
LINES: GL.LINES, // draw lines. Each vertex connects to the one after it.
|
|
31
|
+
LINE_LOOP: GL.LINE_LOOP, // draw lines. Each set of two vertices is treated as a separate line segment.
|
|
32
|
+
LINE_STRIP: GL.LINE_STRIP, // draw a connected group of line segments from the first vertex to the last
|
|
33
|
+
TRIANGLES: GL.TRIANGLES, // draw triangles. Each set of three vertices creates a separate triangle.
|
|
34
|
+
TRIANGLE_STRIP: GL.TRIANGLE_STRIP, // draw a connected group of triangles.
|
|
35
|
+
TRIANGLE_FAN: GL.TRIANGLE_FAN // draw a connected group of triangles.
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
readonly id: string;
|
|
39
|
+
readonly drawMode: Topology = GL.TRIANGLES;
|
|
40
|
+
|
|
41
|
+
vertexCount: number;
|
|
42
|
+
attributes = {};
|
|
43
|
+
indices;
|
|
44
|
+
userData: Record<string, any> = {};
|
|
45
|
+
|
|
46
|
+
constructor(props: GeometryProps = {}) {
|
|
22
47
|
const {
|
|
23
48
|
id = uid('geometry'),
|
|
24
|
-
drawMode =
|
|
49
|
+
drawMode = GL.TRIANGLES,
|
|
25
50
|
attributes = {},
|
|
26
51
|
indices = null,
|
|
27
52
|
vertexCount = null
|
|
28
53
|
} = props;
|
|
29
54
|
|
|
30
55
|
this.id = id;
|
|
31
|
-
this.drawMode = drawMode
|
|
32
|
-
this.attributes = {};
|
|
33
|
-
this.userData = {};
|
|
56
|
+
this.drawMode = drawMode;
|
|
34
57
|
|
|
35
58
|
this._setAttributes(attributes, indices);
|
|
36
59
|
|
|
37
60
|
this.vertexCount = vertexCount || this._calculateVertexCount(this.attributes, this.indices);
|
|
38
|
-
|
|
39
|
-
// stubRemovedMethods(this, [
|
|
40
|
-
// 'setNeedsRedraw', 'needsRedraw', 'setAttributes'
|
|
41
|
-
// ], 'Immutable');
|
|
42
|
-
|
|
43
|
-
// stubRemovedMethods(this, [
|
|
44
|
-
// 'hasAttribute', 'getAttribute', 'getArray'
|
|
45
|
-
// ], 'Use geometry.attributes and geometry.indices');
|
|
46
|
-
|
|
47
|
-
// deprecateMethods(this, ['getAttributes'])
|
|
48
61
|
}
|
|
49
62
|
|
|
50
63
|
get mode() {
|
|
51
64
|
return this.drawMode;
|
|
52
65
|
}
|
|
53
66
|
|
|
54
|
-
getVertexCount() {
|
|
67
|
+
getVertexCount(): number {
|
|
55
68
|
return this.vertexCount;
|
|
56
69
|
}
|
|
57
70
|
|
|
@@ -62,7 +75,7 @@ export default class Geometry {
|
|
|
62
75
|
|
|
63
76
|
// PRIVATE
|
|
64
77
|
|
|
65
|
-
_print(attributeName) {
|
|
78
|
+
_print(attributeName): string {
|
|
66
79
|
return `Geometry ${this.id} attribute ${attributeName}`;
|
|
67
80
|
}
|
|
68
81
|
|
|
@@ -71,7 +84,7 @@ export default class Geometry {
|
|
|
71
84
|
// type: indices, vertices, uvs
|
|
72
85
|
// size: elements per vertex
|
|
73
86
|
// target: WebGL buffer type (string or constant)
|
|
74
|
-
_setAttributes(attributes, indices) {
|
|
87
|
+
_setAttributes(attributes, indices): this {
|
|
75
88
|
if (indices) {
|
|
76
89
|
this.indices = ArrayBuffer.isView(indices) ? {value: indices, size: 1} : indices;
|
|
77
90
|
}
|
|
@@ -108,7 +121,7 @@ export default class Geometry {
|
|
|
108
121
|
return this;
|
|
109
122
|
}
|
|
110
123
|
|
|
111
|
-
_calculateVertexCount(attributes, indices) {
|
|
124
|
+
_calculateVertexCount(attributes, indices): number {
|
|
112
125
|
if (indices) {
|
|
113
126
|
return indices.value.length;
|
|
114
127
|
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// CORE
|
|
2
|
+
export {default as AnimationLoop} from './lib/animation-loop';
|
|
3
|
+
export {default as Model} from './lib/model';
|
|
4
|
+
export {default as ProgramManager} from './lib/program-manager';
|
|
5
|
+
export {default as Transform} from './transform/transform';
|
|
6
|
+
|
|
7
|
+
// Geometries
|
|
8
|
+
export {default as Geometry} from './geometry/geometry';
|
|
9
|
+
|
|
10
|
+
// Primitives
|
|
11
|
+
export {ConeGeometry, ConeGeometryProps} from './geometries/cone-geometry';
|
|
12
|
+
export {CubeGeometry, CubeGeometryProps} from './geometries/cube-geometry';
|
|
13
|
+
export {CylinderGeometry, CylinderGeometryProps} from './geometries/cylinder-geometry';
|
|
14
|
+
export {
|
|
15
|
+
IcoSphereGeometry,
|
|
16
|
+
IcoSphereGeometryProps
|
|
17
|
+
} from './geometries/ico-sphere-geometry';
|
|
18
|
+
export {PlaneGeometry, PlaneGeometryProps} from './geometries/plane-geometry';
|
|
19
|
+
export {SphereGeometry, SphereGeometryProps} from './geometries/sphere-geometry';
|
|
20
|
+
export {
|
|
21
|
+
TruncatedConeGeometry,
|
|
22
|
+
TruncatedConeGeometryProps
|
|
23
|
+
} from './geometries/truncated-cone-geometry';
|
|
24
|
+
|
|
25
|
+
// Animation
|
|
26
|
+
export {Timeline} from './animation/timeline';
|
|
27
|
+
export {KeyFrames} from './animation/key-frames';
|
|
28
|
+
|
|
29
|
+
// Utils
|
|
30
|
+
export {default as ClipSpace} from './utils/clip-space';
|