dylanebert HF staff commited on
Commit
5f32ba4
·
1 Parent(s): 1b5e137

reformat export

Browse files
viewer/src/lib/splat.js/cameras/Camera.ts CHANGED
@@ -1,7 +1,7 @@
1
  import { Object3D } from "../core/Object3D";
2
  import { Matrix4 } from "../math/Matrix4";
3
 
4
- export class Camera extends Object3D {
5
  projectionMatrix: Matrix4;
6
 
7
  constructor() {
@@ -10,3 +10,5 @@ export class Camera extends Object3D {
10
  this.projectionMatrix = new Matrix4();
11
  }
12
  }
 
 
 
1
  import { Object3D } from "../core/Object3D";
2
  import { Matrix4 } from "../math/Matrix4";
3
 
4
+ class Camera extends Object3D {
5
  projectionMatrix: Matrix4;
6
 
7
  constructor() {
 
10
  this.projectionMatrix = new Matrix4();
11
  }
12
  }
13
+
14
+ export { Camera };
viewer/src/lib/splat.js/cameras/PerspectiveCamera.ts CHANGED
@@ -1,7 +1,6 @@
1
  import { Camera } from "./Camera";
2
- import { Matrix4 } from "../math/Matrix4";
3
 
4
- export class PerspectiveCamera extends Camera {
5
  fx: number;
6
  fy: number;
7
 
@@ -27,3 +26,5 @@ export class PerspectiveCamera extends Camera {
27
  );
28
  }
29
  }
 
 
 
1
  import { Camera } from "./Camera";
 
2
 
3
+ class PerspectiveCamera extends Camera {
4
  fx: number;
5
  fy: number;
6
 
 
26
  );
27
  }
28
  }
29
+
30
+ export { PerspectiveCamera };
viewer/src/lib/splat.js/core/EventDispatcher.ts ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class EventDispatcher {
2
+ listeners: { [key: string]: Function[] } = {};
3
+
4
+ addEventListener(type: string, listener: Function): void {
5
+ if (this.listeners[type] === undefined) {
6
+ this.listeners[type] = [];
7
+ }
8
+ if (this.listeners[type].indexOf(listener) === -1) {
9
+ this.listeners[type].push(listener);
10
+ }
11
+ }
12
+
13
+ hasEventListener(type: string, listener: Function): boolean {
14
+ return this.listeners[type] !== undefined && this.listeners[type].indexOf(listener) !== -1;
15
+ }
16
+
17
+ removeEventListener(type: string, listener: Function): void {
18
+ const listenerArray = this.listeners[type];
19
+ if (listenerArray !== undefined) {
20
+ const index = listenerArray.indexOf(listener);
21
+ if (index !== -1) {
22
+ listenerArray.splice(index, 1);
23
+ }
24
+ }
25
+ }
26
+
27
+ dispatchEvent(event: { type: string }): void {
28
+ const listenerArray = this.listeners[event.type];
29
+ if (listenerArray !== undefined) {
30
+ const array = listenerArray.slice(0);
31
+ for (let i = 0, l = array.length; i < l; i++) {
32
+ array[i].call(this, event);
33
+ }
34
+ }
35
+ }
36
+ }
37
+
38
+ export { EventDispatcher };
viewer/src/lib/splat.js/core/Object3D.ts CHANGED
@@ -1,7 +1,7 @@
1
  import { Vector3 } from "../math/Vector3";
2
  import { Quaternion } from "../math/Quaternion";
3
 
4
- export class Object3D {
5
  position: Vector3;
6
  rotation: Quaternion;
7
 
@@ -10,3 +10,5 @@ export class Object3D {
10
  this.rotation = new Quaternion();
11
  }
12
  }
 
 
 
1
  import { Vector3 } from "../math/Vector3";
2
  import { Quaternion } from "../math/Quaternion";
3
 
4
+ class Object3D {
5
  position: Vector3;
6
  rotation: Quaternion;
7
 
 
10
  this.rotation = new Quaternion();
11
  }
12
  }
13
+
14
+ export { Object3D };
viewer/src/lib/splat.js/core/Renderer.ts DELETED
@@ -1,6 +0,0 @@
1
- import type { Camera } from "../cameras/Camera";
2
-
3
- export interface Renderer {
4
- render(camera: Camera): void;
5
- setData(data: Uint8Array): void;
6
- }
 
 
 
 
 
 
 
viewer/src/lib/splat.js/core/Scene.ts ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Object3D } from "./Object3D";
2
+
3
+ class Scene extends Object3D {
4
+ data: Uint8Array;
5
+
6
+ constructor() {
7
+ super();
8
+
9
+ this.data = new Uint8Array(0);
10
+ }
11
+
12
+ setData(data: Uint8Array): void {
13
+ this.data = data;
14
+ console.log(data);
15
+ }
16
+ }
17
+
18
+ export { Scene };
viewer/src/lib/splat.js/index.ts CHANGED
@@ -1,10 +1,11 @@
1
- export * from "./cameras/Camera";
2
- export * from "./core/Renderer";
 
3
 
4
- export * from "./loaders/Loader";
5
 
6
- export * from "./renderers/WebGLRenderer";
7
 
8
- export * from "./math/Quaternion";
9
- export * from "./math/Vector3";
10
- export * from "./math/Matrix4";
 
1
+ export { Camera } from "./cameras/Camera";
2
+ export { Renderer } from "./renderers/Renderer";
3
+ export { Scene } from "./core/Scene";
4
 
5
+ export { Loader } from "./loaders/Loader";
6
 
7
+ export { WebGLRenderer } from "./renderers/WebGLRenderer";
8
 
9
+ export { Quaternion } from "./math/Quaternion";
10
+ export { Vector3 } from "./math/Vector3";
11
+ export { Matrix4 } from "./math/Matrix4";
viewer/src/lib/splat.js/loaders/Loader.ts CHANGED
@@ -1,7 +1,7 @@
1
- import type { Renderer } from "../core/Renderer";
2
 
3
- export class Loader {
4
- static async LoadAsync(url: string, renderer: Renderer, onProgress?: (progress: number) => void): Promise<void> {
5
  const req = await fetch(url, {
6
  mode: "cors",
7
  credentials: "omit",
@@ -27,6 +27,8 @@ export class Loader {
27
  onProgress?.(bytesRead / contentLength);
28
  }
29
 
30
- renderer.setData(data);
31
  }
32
  }
 
 
 
1
+ import type { Scene } from "../core/Scene";
2
 
3
+ class Loader {
4
+ static async LoadAsync(url: string, scene: Scene, onProgress?: (progress: number) => void): Promise<void> {
5
  const req = await fetch(url, {
6
  mode: "cors",
7
  credentials: "omit",
 
27
  onProgress?.(bytesRead / contentLength);
28
  }
29
 
30
+ scene.setData(data);
31
  }
32
  }
33
+
34
+ export { Loader };
viewer/src/lib/splat.js/math/Matrix4.ts CHANGED
@@ -1,4 +1,4 @@
1
- export class Matrix4 {
2
  elements: number[];
3
 
4
  // prettier-ignore
@@ -31,3 +31,5 @@ export class Matrix4 {
31
  return this;
32
  }
33
  }
 
 
 
1
+ class Matrix4 {
2
  elements: number[];
3
 
4
  // prettier-ignore
 
31
  return this;
32
  }
33
  }
34
+
35
+ export { Matrix4 };
viewer/src/lib/splat.js/math/Quaternion.ts CHANGED
@@ -1,4 +1,4 @@
1
- export class Quaternion {
2
  x: number;
3
  y: number;
4
  z: number;
@@ -20,3 +20,5 @@ export class Quaternion {
20
  return this;
21
  }
22
  }
 
 
 
1
+ class Quaternion {
2
  x: number;
3
  y: number;
4
  z: number;
 
20
  return this;
21
  }
22
  }
23
+
24
+ export { Quaternion };
viewer/src/lib/splat.js/math/Vector3.ts CHANGED
@@ -1,4 +1,4 @@
1
- export class Vector3 {
2
  x: number;
3
  y: number;
4
  z: number;
@@ -17,3 +17,5 @@ export class Vector3 {
17
  return this;
18
  }
19
  }
 
 
 
1
+ class Vector3 {
2
  x: number;
3
  y: number;
4
  z: number;
 
17
  return this;
18
  }
19
  }
20
+
21
+ export { Vector3 };
viewer/src/lib/splat.js/renderers/Renderer.ts ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ import type { Camera } from "../cameras/Camera";
2
+ import type { Scene } from "../core/Scene";
3
+
4
+ class Renderer {
5
+ render(scene: Scene, camera: Camera): void {}
6
+ dispose(): void {}
7
+ }
8
+
9
+ export { Renderer };
viewer/src/lib/splat.js/renderers/WebGLRenderer.ts CHANGED
@@ -1,17 +1,20 @@
1
  import type { Camera } from "../cameras/Camera";
2
- import type { Renderer } from "../core/Renderer";
 
3
 
4
  export class WebGLRenderer implements Renderer {
5
  canvas: HTMLCanvasElement;
6
 
 
 
 
7
  constructor(canvas?: HTMLCanvasElement) {
8
  this.canvas =
9
  canvas ?? (document.createElementNS("http://www.w3.org/1999/xhtml", "canvas") as HTMLCanvasElement);
 
 
10
  }
11
 
12
- render(camera: Camera): void {}
13
-
14
- setData(data: Uint8Array): void {
15
- console.log("setData", data);
16
- }
17
  }
 
1
  import type { Camera } from "../cameras/Camera";
2
+ import type { Scene } from "../core/Scene";
3
+ import type { Renderer } from "./Renderer";
4
 
5
  export class WebGLRenderer implements Renderer {
6
  canvas: HTMLCanvasElement;
7
 
8
+ gl: WebGLRenderingContext;
9
+ ext: ANGLE_instanced_arrays;
10
+
11
  constructor(canvas?: HTMLCanvasElement) {
12
  this.canvas =
13
  canvas ?? (document.createElementNS("http://www.w3.org/1999/xhtml", "canvas") as HTMLCanvasElement);
14
+ this.gl = this.canvas.getContext("webgl") as WebGLRenderingContext;
15
+ this.ext = this.gl.getExtension("ANGLE_instanced_arrays") as ANGLE_instanced_arrays;
16
  }
17
 
18
+ render(scene: Scene, camera: Camera): void {}
19
+ dispose(): void {}
 
 
 
20
  }
viewer/src/lib/splat.js/renderers/webgl/shaders/frag.glsl.ts ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export const frag = /* glsl */ `
2
+ precision mediump float;
3
+
4
+ varying vec4 vColor;
5
+ varying vec2 vPosition;
6
+
7
+ void main () {
8
+ float A = -dot(vPosition, vPosition);
9
+ if (A < -4.0) discard;
10
+ float B = exp(A) * vColor.a;
11
+ gl_FragColor = vec4(B * vColor.rgb, B);
12
+ }
13
+ `;
viewer/src/lib/splat.js/renderers/webgl/shaders/vertex.glsl.ts ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export const vertex = /* glsl */ `
2
+ precision mediump float;
3
+ attribute vec2 position;
4
+
5
+ attribute vec4 color;
6
+ attribute vec3 center;
7
+ attribute vec3 covA;
8
+ attribute vec3 covB;
9
+
10
+ uniform mat4 projection, view;
11
+ uniform vec2 focal;
12
+ uniform vec2 viewport;
13
+
14
+ varying vec4 vColor;
15
+ varying vec2 vPosition;
16
+
17
+ mat3 transpose(mat3 m) {
18
+ return mat3(
19
+ m[0][0], m[1][0], m[2][0],
20
+ m[0][1], m[1][1], m[2][1],
21
+ m[0][2], m[1][2], m[2][2]
22
+ );
23
+ }
24
+
25
+ void main () {
26
+ vec4 camspace = view * vec4(center, 1);
27
+ vec4 pos2d = projection * camspace;
28
+
29
+ float bounds = 1.2 * pos2d.w;
30
+ if (pos2d.z < -pos2d.w || pos2d.x < -bounds || pos2d.x > bounds
31
+ || pos2d.y < -bounds || pos2d.y > bounds) {
32
+ gl_Position = vec4(0.0, 0.0, 2.0, 1.0);
33
+ return;
34
+ }
35
+
36
+ mat3 Vrk = mat3(
37
+ covA.x, covA.y, covA.z,
38
+ covA.y, covB.x, covB.y,
39
+ covA.z, covB.y, covB.z
40
+ );
41
+
42
+ mat3 J = mat3(
43
+ focal.x / camspace.z, 0., -(focal.x * camspace.x) / (camspace.z * camspace.z),
44
+ 0., -focal.y / camspace.z, (focal.y * camspace.y) / (camspace.z * camspace.z),
45
+ 0., 0., 0.
46
+ );
47
+
48
+ mat3 W = transpose(mat3(view));
49
+ mat3 T = W * J;
50
+ mat3 cov = transpose(T) * Vrk * T;
51
+
52
+ vec2 vCenter = vec2(pos2d) / pos2d.w;
53
+
54
+ float diagonal1 = cov[0][0] + 0.3;
55
+ float offDiagonal = cov[0][1];
56
+ float diagonal2 = cov[1][1] + 0.3;
57
+
58
+ float mid = 0.5 * (diagonal1 + diagonal2);
59
+ float radius = length(vec2((diagonal1 - diagonal2) / 2.0, offDiagonal));
60
+ float lambda1 = mid + radius;
61
+ float lambda2 = max(mid - radius, 0.1);
62
+ vec2 diagonalVector = normalize(vec2(offDiagonal, lambda1 - diagonal1));
63
+ vec2 v1 = min(sqrt(2.0 * lambda1), 1024.0) * diagonalVector;
64
+ vec2 v2 = min(sqrt(2.0 * lambda2), 1024.0) * vec2(diagonalVector.y, -diagonalVector.x);
65
+
66
+ vColor = color;
67
+ vPosition = position;
68
+
69
+ gl_Position = vec4(
70
+ vCenter
71
+ + position.x * v1 / viewport * 2.0
72
+ + position.y * v2 / viewport * 2.0, 0.0, 1.0
73
+ );
74
+ }
75
+ `;