@tolokoban/tgd 2.0.32 → 2.0.33

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.
@@ -5,14 +5,14 @@ export function tgdLoadGlb(urlOrFile) {
5
5
  try {
6
6
  if (urlOrFile instanceof File) {
7
7
  const data = yield urlOrFile.arrayBuffer();
8
- return new TgdDataGlb(data);
8
+ return TgdDataGlb.parse(data);
9
9
  }
10
10
  const resp = yield fetch(urlOrFile);
11
11
  if (!resp.ok) {
12
12
  throw new Error(`Unable to load GLB from url "${urlOrFile}"!\nError #${resp.status}: ${resp.statusText}`);
13
13
  }
14
14
  const data = yield resp.arrayBuffer();
15
- return new TgdDataGlb(data);
15
+ return TgdDataGlb.parse(data);
16
16
  }
17
17
  catch (error) {
18
18
  console.error("Unable to load GLB:", urlOrFile);
@@ -54,4 +54,4 @@ export function tgdLoadText(urlOrFile) {
54
54
  }
55
55
  });
56
56
  }
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvYWRlci9iaW5hcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFeEMsTUFBTSxVQUFnQixVQUFVLENBQzVCLFNBQXdCOztRQUV4QixJQUFJLENBQUM7WUFDRCxJQUFJLFNBQVMsWUFBWSxJQUFJLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUE7Z0JBQzFDLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDL0IsQ0FBQztZQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ1gsTUFBTSxJQUFJLEtBQUssQ0FDWCxnQ0FBZ0MsU0FBUyxjQUFjLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUMzRixDQUFBO1lBQ0wsQ0FBQztZQUNELE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBQ3JDLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDL0IsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLFNBQVMsQ0FBQyxDQUFBO1lBQy9DLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDcEIsT0FBTyxJQUFJLENBQUE7UUFDZixDQUFDO0lBQ0wsQ0FBQztDQUFBO0FBRUQsTUFBTSxVQUFnQixrQkFBa0IsQ0FDcEMsU0FBd0I7O1FBRXhCLElBQUksU0FBUyxZQUFZLElBQUksRUFBRSxDQUFDO1lBQzVCLE9BQU8sTUFBTSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDeEMsQ0FBQztRQUNELElBQUksQ0FBQztZQUNELE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ25DLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBQ3JDLE9BQU8sSUFBSSxDQUFBO1FBQ2YsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLFNBQVMsQ0FBQyxDQUFBO1lBQ3hELE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDcEIsT0FBTyxJQUFJLENBQUE7UUFDZixDQUFDO0lBQ0wsQ0FBQztDQUFBO0FBRUQsTUFBTSxVQUFnQixXQUFXLENBQzdCLFNBQXdCOztRQUV4QixJQUFJLFNBQVMsWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUM1QixPQUFPLE1BQU0sU0FBUyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ2pDLENBQUM7UUFDRCxJQUFJLENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUNuQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUM5QixPQUFPLElBQUksQ0FBQTtRQUNmLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNwQixPQUFPLElBQUksQ0FBQTtRQUNmLENBQUM7SUFDTCxDQUFDO0NBQUEifQ==
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvYWRlci9iaW5hcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFeEMsTUFBTSxVQUFnQixVQUFVLENBQzVCLFNBQXdCOztRQUV4QixJQUFJLENBQUM7WUFDRCxJQUFJLFNBQVMsWUFBWSxJQUFJLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUE7Z0JBQzFDLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNqQyxDQUFDO1lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDWCxNQUFNLElBQUksS0FBSyxDQUNYLGdDQUFnQyxTQUFTLGNBQWMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQzNGLENBQUE7WUFDTCxDQUFDO1lBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7WUFDckMsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2pDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxTQUFTLENBQUMsQ0FBQTtZQUMvQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3BCLE9BQU8sSUFBSSxDQUFBO1FBQ2YsQ0FBQztJQUNMLENBQUM7Q0FBQTtBQUVELE1BQU0sVUFBZ0Isa0JBQWtCLENBQ3BDLFNBQXdCOztRQUV4QixJQUFJLFNBQVMsWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUM1QixPQUFPLE1BQU0sU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ3hDLENBQUM7UUFDRCxJQUFJLENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUNuQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUNyQyxPQUFPLElBQUksQ0FBQTtRQUNmLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxTQUFTLENBQUMsQ0FBQTtZQUN4RCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3BCLE9BQU8sSUFBSSxDQUFBO1FBQ2YsQ0FBQztJQUNMLENBQUM7Q0FBQTtBQUVELE1BQU0sVUFBZ0IsV0FBVyxDQUM3QixTQUF3Qjs7UUFFeEIsSUFBSSxTQUFTLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDNUIsT0FBTyxNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNqQyxDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDbkMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7WUFDOUIsT0FBTyxJQUFJLENBQUE7UUFDZixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDcEIsT0FBTyxJQUFJLENBQUE7UUFDZixDQUFDO0lBQ0wsQ0FBQztDQUFBIn0=
@@ -3,6 +3,7 @@
3
3
  * @param url URL of the image to load.
4
4
  */
5
5
  export declare function tgdLoadImage(url: string): Promise<HTMLImageElement | null>;
6
+ export declare function tgdLoadImageFromArrayBuffer(buffer: ArrayBuffer): Promise<HTMLImageElement | null>;
6
7
  export declare function tgdLoadImages(urls: string[]): Promise<Array<HTMLImageElement | null>>;
7
8
  export declare function tgdLoadCanvas(url: string): Promise<HTMLCanvasElement | null>;
8
9
  //# sourceMappingURL=image.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/loader/image.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAsB,YAAY,CAC9B,GAAG,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAUlC;AAED,wBAAsB,aAAa,CAC/B,IAAI,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAIzC;AAED,wBAAsB,aAAa,CAC/B,GAAG,EAAE,MAAM,GACZ,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAYnC"}
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/loader/image.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAsB,YAAY,CACjC,GAAG,EAAE,MAAM,GACT,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAUlC;AAED,wBAAsB,2BAA2B,CAChD,MAAM,EAAE,WAAW,GACjB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAgBlC;AAED,wBAAsB,aAAa,CAClC,IAAI,EAAE,MAAM,EAAE,GACZ,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAIzC;AAED,wBAAsB,aAAa,CAClC,GAAG,EAAE,MAAM,GACT,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAYnC"}
@@ -5,7 +5,7 @@ import { __awaiter } from "tslib";
5
5
  */
6
6
  export function tgdLoadImage(url) {
7
7
  return __awaiter(this, void 0, void 0, function* () {
8
- return new Promise(resolve => {
8
+ return new Promise((resolve) => {
9
9
  const img = new Image();
10
10
  img.addEventListener("load", () => resolve(img));
11
11
  img.addEventListener("error", () => {
@@ -16,9 +16,28 @@ export function tgdLoadImage(url) {
16
16
  });
17
17
  });
18
18
  }
19
+ export function tgdLoadImageFromArrayBuffer(buffer) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ return new Promise((resolve) => {
22
+ const blob = new Blob([buffer]);
23
+ const url = URL.createObjectURL(blob);
24
+ const img = new Image();
25
+ img.addEventListener("load", () => {
26
+ URL.revokeObjectURL(url);
27
+ resolve(img);
28
+ });
29
+ img.addEventListener("error", () => {
30
+ URL.revokeObjectURL(url);
31
+ console.error("Unable to load image:", url);
32
+ resolve(null);
33
+ });
34
+ img.src = url;
35
+ });
36
+ });
37
+ }
19
38
  export function tgdLoadImages(urls) {
20
39
  return __awaiter(this, void 0, void 0, function* () {
21
- return Promise.all(urls.map(url => tgdLoadImage(url)));
40
+ return Promise.all(urls.map((url) => tgdLoadImage(url)));
22
41
  });
23
42
  }
24
43
  export function tgdLoadCanvas(url) {
@@ -36,4 +55,4 @@ export function tgdLoadCanvas(url) {
36
55
  return canvas;
37
56
  });
38
57
  }
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG9hZGVyL2ltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7QUFDSCxNQUFNLFVBQWdCLFlBQVksQ0FDOUIsR0FBVzs7UUFFWCxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pCLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUE7WUFDdkIsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUNoRCxHQUFHLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQkFDL0IsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLENBQUMsQ0FBQTtnQkFDM0MsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ2pCLENBQUMsQ0FBQyxDQUFBO1lBQ0YsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakIsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0NBQUE7QUFFRCxNQUFNLFVBQWdCLGFBQWEsQ0FDL0IsSUFBYzs7UUFFZCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNyQyxDQUFBO0lBQ0wsQ0FBQztDQUFBO0FBRUQsTUFBTSxVQUFnQixhQUFhLENBQy9CLEdBQVc7O1FBRVgsTUFBTSxHQUFHLEdBQUcsTUFBTSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDbkMsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLElBQUksQ0FBQTtRQUVyQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQy9DLE1BQU0sQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQTtRQUMvQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUE7UUFDakMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN2QyxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtRQUU1RCxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDNUIsT0FBTyxNQUFNLENBQUE7SUFDakIsQ0FBQztDQUFBIn0=
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG9hZGVyL2ltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7QUFDSCxNQUFNLFVBQWdCLFlBQVksQ0FDakMsR0FBVzs7UUFFWCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDOUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQTtZQUN2QixHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQ2hELEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO2dCQUNsQyxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFBO2dCQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDZCxDQUFDLENBQUMsQ0FBQTtZQUNGLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2QsQ0FBQyxDQUFDLENBQUE7SUFDSCxDQUFDO0NBQUE7QUFFRCxNQUFNLFVBQWdCLDJCQUEyQixDQUNoRCxNQUFtQjs7UUFFbkIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtZQUMvQixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3JDLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUE7WUFDdkIsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7Z0JBQ2pDLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNiLENBQUMsQ0FBQyxDQUFBO1lBQ0YsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQ2xDLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ3hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUE7Z0JBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNkLENBQUMsQ0FBQyxDQUFBO1lBQ0YsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDZCxDQUFDLENBQUMsQ0FBQTtJQUNILENBQUM7Q0FBQTtBQUVELE1BQU0sVUFBZ0IsYUFBYSxDQUNsQyxJQUFjOztRQUVkLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FDakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3BDLENBQUE7SUFDRixDQUFDO0NBQUE7QUFFRCxNQUFNLFVBQWdCLGFBQWEsQ0FDbEMsR0FBVzs7UUFFWCxNQUFNLEdBQUcsR0FBRyxNQUFNLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNuQyxJQUFJLENBQUMsR0FBRztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRXJCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDL0MsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFBO1FBQy9CLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQTtRQUNqQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3ZDLElBQUksQ0FBQyxPQUFPO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO1FBRTVELE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUM1QixPQUFPLE1BQU0sQ0FBQTtJQUNkLENBQUM7Q0FBQSJ9
@@ -0,0 +1,34 @@
1
+ import { ArrayNumber4, WebglAttributeType, WebglUniformType } from "../types";
2
+ import { TgdVec4 } from "../math";
3
+ import { TgdMaterial } from "./material";
4
+ import { TgdCodeBloc } from "../shader/code";
5
+ import { TgdLight } from "../light";
6
+ import { TgdTexture2D } from "../texture";
7
+ import { TgdProgram } from "../program";
8
+ export type TgdMaterialCameraLightOptions = Partial<{
9
+ color: TgdVec4 | ArrayNumber4 | TgdTexture2D;
10
+ light: TgdLight;
11
+ ambient: TgdLight;
12
+ specularExponent: number;
13
+ specularIntensity: number;
14
+ }>;
15
+ export declare class TgdMaterialCameraLight extends TgdMaterial {
16
+ light: TgdLight;
17
+ ambient: TgdLight;
18
+ specularExponent: number;
19
+ specularIntensity: number;
20
+ readonly varyings: {
21
+ [name: string]: WebglAttributeType;
22
+ };
23
+ readonly uniforms: {
24
+ [name: string]: WebglUniformType;
25
+ };
26
+ readonly fragmentShaderCode: TgdCodeBloc;
27
+ readonly vertexShaderCode: TgdCodeBloc;
28
+ private readonly texture;
29
+ private readonly lightColor;
30
+ private readonly ambientColor;
31
+ constructor(options?: TgdMaterialCameraLightOptions);
32
+ setUniforms(program: TgdProgram): void;
33
+ }
34
+ //# sourceMappingURL=camera-light.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera-light.d.ts","sourceRoot":"","sources":["../../src/material/camera-light.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC/E,OAAO,EAAW,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,MAAM,6BAA6B,GAAG,OAAO,CAAC;IACnD,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,YAAY,CAAA;IAC5C,KAAK,EAAE,QAAQ,CAAA;IACf,OAAO,EAAE,QAAQ,CAAA;IACjB,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;CACzB,CAAC,CAAA;AAIF,qBAAa,sBAAuB,SAAQ,WAAW;IAC/C,KAAK,WAAiB;IACtB,OAAO,WAAuD;IAC9D,gBAAgB,SAAK;IACrB,iBAAiB,SAAM;IAE9B,SAAgB,QAAQ,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAA;KAAE,CAAA;IAChE,SAAgB,QAAQ,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAA;KAAE,CAO7D;IACD,SAAgB,kBAAkB,EAAE,WAAW,CAAA;IAC/C,SAAgB,gBAAgB,EAAE,WAAW,CAAA;IAE7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;gBAEjC,OAAO,GAAE,6BAAkC;IA+CvD,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;CAYtC"}
@@ -0,0 +1,80 @@
1
+ import { TgdVec3, TgdVec4 } from "./../math/index.js";
2
+ import { TgdMaterial } from "./material.js";
3
+ import { TgdLight } from "./../light/index.js";
4
+ import { TgdTexture2D } from "./../texture/index.js";
5
+ const DEFAULT_COLOR = new TgdVec4(0.8, 0.6, 0.1, 1);
6
+ export class TgdMaterialCameraLight extends TgdMaterial {
7
+ constructor(options = {}) {
8
+ var _a;
9
+ super();
10
+ this.light = new TgdLight();
11
+ this.ambient = new TgdLight({ color: new TgdVec4(0.2, 0.1, 0, 0) });
12
+ this.specularExponent = 32;
13
+ this.specularIntensity = 0.8;
14
+ this.uniforms = {
15
+ uniLight: "vec3",
16
+ uniLightDir: "vec3",
17
+ uniAmbient: "vec3",
18
+ uniSpecularExponent: "float",
19
+ uniSpecularIntensity: "float",
20
+ uniModelViewMatrix: "mat4",
21
+ };
22
+ this.lightColor = new TgdVec3();
23
+ this.ambientColor = new TgdVec3();
24
+ const color = options.color instanceof TgdTexture2D
25
+ ? options.color
26
+ : new TgdVec4((_a = options.color) !== null && _a !== void 0 ? _a : DEFAULT_COLOR);
27
+ if (options.light) {
28
+ this.light = options.light;
29
+ }
30
+ if (options.ambient) {
31
+ this.ambient = options.ambient;
32
+ }
33
+ if (typeof options.specularExponent === "number") {
34
+ this.specularExponent = options.specularExponent;
35
+ }
36
+ if (typeof options.specularIntensity === "number") {
37
+ this.specularIntensity = options.specularIntensity;
38
+ }
39
+ const hasTexture = !(color instanceof TgdVec4);
40
+ this.texture = hasTexture ? color : null;
41
+ this.fragmentShaderCode = [
42
+ "vec3 normal = mat3(uniModelViewMatrix) * varNormal;",
43
+ "float light = 1.0 - dot(normal, uniLightDir);",
44
+ hasTexture
45
+ ? "vec4 color = texture(texDiffuse, varUV);"
46
+ : `vec4 color = vec4(${color.join(", ")});`,
47
+ "float spec = max(0.0, reflect(uniLightDir, normal).z);",
48
+ "spec = pow(spec, uniSpecularExponent) * uniSpecularIntensity;",
49
+ "color = vec4(",
50
+ " color.rgb * (",
51
+ " uniAmbient + uniLight * light",
52
+ " ) + vec3(spec),",
53
+ " 1.0",
54
+ ");",
55
+ "return color;",
56
+ ];
57
+ this.vertexShaderCode = ["varNormal = mat3(uniTransfoMatrix) * NORMAL;"];
58
+ this.varyings = {
59
+ varNormal: "vec3",
60
+ };
61
+ if (hasTexture) {
62
+ this.vertexShaderCode.push("varUV = TEXCOORD_0;");
63
+ this.varyings.varUV = "vec2";
64
+ this.uniforms.texDiffuse = "sampler2D";
65
+ }
66
+ }
67
+ setUniforms(program) {
68
+ program.uniform3fv("uniLightDir", this.light.direction);
69
+ this.lightColor.from(this.light.color).scale(this.light.color.w);
70
+ program.uniform3fv("uniLight", this.lightColor);
71
+ this.ambientColor.from(this.ambient.color).scale(this.ambient.color.w);
72
+ program.uniform3fv("uniAmbient", this.ambientColor);
73
+ program.uniform1f("uniSpecularExponent", this.specularExponent);
74
+ program.uniform1f("uniSpecularIntensity", this.specularIntensity);
75
+ const { texture } = this;
76
+ if (texture)
77
+ texture.activate(0, program, "texDiffuse");
78
+ }
79
+ }
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZXJhLWxpZ2h0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hdGVyaWFsL2NhbWVyYS1saWdodC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRXhDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQVczQyxNQUFNLGFBQWEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUVuRCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsV0FBVztJQXNCdEQsWUFBWSxVQUF5QyxFQUFFOztRQUN0RCxLQUFLLEVBQUUsQ0FBQTtRQXRCRCxVQUFLLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQTtRQUN0QixZQUFPLEdBQUcsSUFBSSxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzlELHFCQUFnQixHQUFHLEVBQUUsQ0FBQTtRQUNyQixzQkFBaUIsR0FBRyxHQUFHLENBQUE7UUFHZCxhQUFRLEdBQXlDO1lBQ2hFLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLFdBQVcsRUFBRSxNQUFNO1lBQ25CLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLG1CQUFtQixFQUFFLE9BQU87WUFDNUIsb0JBQW9CLEVBQUUsT0FBTztZQUM3QixrQkFBa0IsRUFBRSxNQUFNO1NBQzFCLENBQUE7UUFLZ0IsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7UUFDMUIsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO1FB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
@@ -1 +1 @@
1
- {"version":3,"file":"gltf.d.ts","sourceRoot":"","sources":["../../../../src/painter/mesh/gltf/gltf.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAW,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAsB,MAAM,eAAe,CAAA;AAG/D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,MAAM,WAAW,yBAAyB;IACtC,KAAK,EAAE,UAAU,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EACH,WAAW,GACX,CAAC,CACG,IAAI,EAAE,IAAI,EACV,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;KAAE,KAC1C,WAAW,CAAC,CAAA;CAC1B;AAED;GACG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;gBAE9C,OAAO,EAAE;QACL,EAAE,EAAE,sBAAsB,CAAA;QAC1B,MAAM,EAAE,SAAS,CAAA;QACjB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;KACrB,EACD,OAAO,EAAE,yBAAyB;CAgDzC"}
1
+ {"version":3,"file":"gltf.d.ts","sourceRoot":"","sources":["../../../../src/painter/mesh/gltf/gltf.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAW,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAsB,MAAM,eAAe,CAAA;AAG/D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAIvC,MAAM,WAAW,yBAAyB;IACzC,KAAK,EAAE,UAAU,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EACN,WAAW,GACX,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;KAAE,KAAK,WAAW,CAAC,CAAA;CAC7E;AAED;GACG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;gBAEpD,OAAO,EAAE;QACR,EAAE,EAAE,sBAAsB,CAAA;QAC1B,MAAM,EAAE,SAAS,CAAA;QACjB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;KAClB,EACD,OAAO,EAAE,yBAAyB;CA6CnC"}
@@ -1,9 +1,10 @@
1
1
  import { TgdGeometry } from "./../../../geometry/index.js";
2
2
  import { TgdDataset } from "./../../../dataset/index.js";
3
3
  import { TgdVec3, TgdVec4 } from "./../../../math/index.js";
4
- import { TgdMaterial, TgdMaterialDiffuse } from "./../../../material/index.js";
4
+ import { TgdMaterial } from "./../../../material/index.js";
5
5
  import { TgdLight } from "./../../../light/index.js";
6
6
  import { TgdPainterMesh } from "../mesh/index.js";
7
+ import { TgdMaterialCameraLight } from "./../../../material/camera-light.js";
7
8
  /**
8
9
  */
9
10
  export class TgdPainterMeshGltf extends TgdPainterMesh {
@@ -75,7 +76,7 @@ function figureColor(asset, meshIndex, primitiveIndex, context) {
75
76
  return DEFAULT_COLOR;
76
77
  }
77
78
  function makeMaterial({ color }) {
78
- const material = new TgdMaterialDiffuse({
79
+ const material = new TgdMaterialCameraLight({
79
80
  color,
80
81
  specularIntensity: 0.3,
81
82
  specularExponent: 80,
@@ -99,4 +100,4 @@ function getTextureEmissive(context, asset, material) {
99
100
  color.eventChange.addListener(context.paint);
100
101
  return color;
101
102
  }
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2x0Zi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYWludGVyL21lc2gvZ2x0Zi9nbHRmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBd0IsTUFBTSxjQUFjLENBQUE7QUFFL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMvRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRXJDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFrQnhDO0dBQ0c7QUFDSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsY0FBYztJQUNsRCxZQUNJLE9BSUMsRUFDRCxPQUFrQzs7UUFFbEMsTUFBTSxFQUNGLEtBQUssRUFDTCxTQUFTLEdBQUcsQ0FBQyxFQUNiLGNBQWMsR0FBRyxDQUFDLEVBQ2xCLFFBQVEsRUFBRSxlQUFlLEdBQUcsWUFBWSxHQUMzQyxHQUFHLE9BQU8sQ0FBQTtRQUNYLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNwRSxNQUFNLFFBQVEsR0FDVixlQUFlLFlBQVksV0FBVztZQUNsQyxDQUFDLENBQUMsZUFBZTtZQUNqQixDQUFDLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUNwQyxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUE7UUFDMUIsTUFBTSxVQUFVLEdBQXlCO1lBQ3JDLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLE1BQU0sRUFBRSxNQUFNO1NBQ2pCLENBQUE7UUFDRCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxD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
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2x0Zi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYWludGVyL21lc2gvZ2x0Zi9nbHRmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBd0IsTUFBTSxjQUFjLENBQUE7QUFFL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBc0IsTUFBTSxlQUFlLENBQUE7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVyQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBSXhDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBWW5FO0dBQ0c7QUFDSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsY0FBYztJQUNyRCxZQUNDLE9BSUMsRUFDRCxPQUFrQzs7UUFFbEMsTUFBTSxFQUNMLEtBQUssRUFDTCxTQUFTLEdBQUcsQ0FBQyxFQUNiLGNBQWMsR0FBRyxDQUFDLEVBQ2xCLFFBQVEsRUFBRSxlQUFlLEdBQUcsWUFBWSxHQUN4QyxHQUFHLE9BQU8sQ0FBQTtRQUNYLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNwRSxNQUFNLFFBQVEsR0FDYixlQUFlLFlBQVksV0FBVztZQUNyQyxDQUFDLENBQUMsZUFBZTtZQUNqQixDQUFDLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUM5QixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUE7UUFDMUIsTUFBTSxVQUFVLEdBQXlCO1lBQ3hDLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLE1BQU0sRUFBRSxNQUFNO1NBQ2QsQ0FBQTtR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
@@ -0,0 +1,22 @@
1
+ #version 300 es
2
+
3
+ precision highp float;
4
+
5
+ uniform float uniContrast;
6
+ uniform float uniSpecularIntensity;
7
+ uniform float uniSpecularExponent;
8
+
9
+ in vec4 varColor;
10
+ in vec3 varNormal;
11
+
12
+ out vec4 FragColor;
13
+
14
+
15
+ void main() {
16
+ if (varColor.a < 1.0) discard;
17
+
18
+ float z = normalize(varNormal).z;
19
+ float light = z * uniContrast + (1.0 - uniContrast);
20
+ float spec = pow(z, uniSpecularExponent) * uniSpecularIntensity;
21
+ FragColor =vec4(varColor.rgb * light + vec3(spec), varColor.w); // varColor;
22
+ }
@@ -0,0 +1,121 @@
1
+ #version 300 es
2
+
3
+ precision highp float;
4
+
5
+ uniform sampler2D uniTexture;
6
+ uniform mat4 uniModelViewMatrix;
7
+ uniform mat4 uniProjectionMatrix;
8
+ // Minimal value for the radius.
9
+ uniform float uniMinRadius;
10
+ // Multiply all radii by this value.
11
+ uniform float uniRadiusMultiplier;
12
+ // When uniRadiusSwitch == 1.0,
13
+ // we use uniRadiusConstant as radius.
14
+ uniform float uniRadiusConstant;
15
+ // 0.0 means we will use the radius defined
16
+ // in the attribute attAxyzr or attBaxyz.
17
+ // 1.0 means we use uniRadiusConstant for
18
+ // all vertices.
19
+ uniform float uniRadiusSwitch;
20
+ // Multiply the color by this value;
21
+ uniform float uniLight;
22
+ // Push the segments away from camera of `uniShiftZ`.
23
+ // This can be used if you want contours on the segments:
24
+ // just increase `uniRadiusMultiplier`, set a low `uniLight`,
25
+ // and set a small positive `uniShiftZ`.
26
+ uniform float uniShiftZ;
27
+
28
+ //===================
29
+ // Vertex attributes
30
+ //-------------------
31
+
32
+ // Position of the vertex, relative to
33
+ // the current center and assuming a
34
+ // radius of 1.
35
+ // Z tells you what tip is your center: 0 for A and 1 for B.
36
+ in vec3 attOffset;
37
+ // Normals of the tube that represents the segment.
38
+ in vec3 attNormal;
39
+
40
+ //=====================
41
+ // Instance attributes
42
+ //---------------------
43
+
44
+ // Coords and radious of tip A.
45
+ in vec4 attAxyzr;
46
+ // Coords and radious of tip B.
47
+ in vec4 attBxyzr;
48
+ // The color is taken from a texture.
49
+ in vec2 attAuv;
50
+ in vec2 attBuv;
51
+ // 0 means that nothing modifies the initial radius,
52
+ // except the minRadius.
53
+ in float attAinfluence;
54
+ in float attBinfluence;
55
+
56
+
57
+ out vec4 varColor;
58
+ out vec3 varNormal;
59
+
60
+
61
+ vec3 worldToCamera(vec3 v);
62
+ float getRadius(float tip);
63
+ mat3 getTransfoMatrix(float tip, vec3 camA, vec3 camB);
64
+
65
+ void main() {
66
+ vec3 camA = worldToCamera(attAxyzr.xyz);
67
+ vec3 camB = worldToCamera(attBxyzr.xyz);
68
+ float tip = attOffset.z;
69
+ float radius = getRadius(tip);
70
+ mat3 transfo = getTransfoMatrix(tip, camA, camB);
71
+ vec3 point = transfo * vec3(attOffset.xy * radius, 1.0);
72
+ varNormal = attNormal;
73
+ point.z -= uniShiftZ + abs(attOffset.y) * radius;
74
+ gl_Position =
75
+ uniProjectionMatrix
76
+ * vec4(point, 1);
77
+ vec2 uv = mix(attAuv, attBuv, tip);
78
+ // float Z = 1.0 - abs(point.z) * 0.0001;
79
+ // Z = pow(Z, 0.025);
80
+ float light = uniLight; // * Z;
81
+ varColor = texture(uniTexture, uv) * vec4(vec3(light), 1.0);
82
+ // varColor = vec4(vec3(1.0 - Z, Z, 0.0), varColor.a);
83
+ }
84
+
85
+ float getRadius(float tip) {
86
+ float influence = mix(attAinfluence, attBinfluence, tip);
87
+ float originalRadius = mix(
88
+ attAxyzr.w,
89
+ attBxyzr.w,
90
+ tip
91
+ );
92
+ float modifiedRadius = mix(
93
+ originalRadius,
94
+ uniRadiusConstant,
95
+ uniRadiusSwitch
96
+ ) * uniRadiusMultiplier;
97
+ float radius = mix(
98
+ originalRadius,
99
+ modifiedRadius,
100
+ influence
101
+ );
102
+ return max(uniMinRadius, radius);
103
+ }
104
+
105
+ vec3 worldToCamera(vec3 v) {
106
+ vec4 result = uniModelViewMatrix * vec4(v, 1.0);
107
+ return result.xyz;
108
+ }
109
+
110
+ mat3 getTransfoMatrix(float tip, vec3 camA, vec3 camB) {
111
+ // What is the current tip?
112
+ vec3 camO = mix(camA, camB, tip);
113
+ vec2 A = camA.xy;
114
+ vec2 B = camB.xy;
115
+ vec3 Y = vec3(
116
+ A == B ? vec2(0, 1) : normalize(A - B),
117
+ 0
118
+ );
119
+ vec3 X = vec3(Y.y, -Y.x, 0);
120
+ return mat3(X, Y, camO);
121
+ }
@@ -1,54 +1,45 @@
1
- /**
2
- * GLTF specs can be found here:
3
- * https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html
4
- */
5
1
  import { TgdDataset } from "../../dataset";
6
- import { TgdFormatGltf, TgdFormatGltfAccessor, TgdFormatGltfCamera, TgdFormatGltfMaterial, TgdFormatGltfMesh, TgdFormatGltfMeshPrimitive, TgdFormatGltfNode, TgdFormatGltfScene } from "../../types/gltf";
7
- import { TgdTypeArrayForElements } from "../../types";
2
+ import type { TgdFormatGltf, TgdFormatGltfAccessor, TgdFormatGltfBufferView, TgdFormatGltfCamera, TgdFormatGltfEmbededData, TgdFormatGltfImage, TgdFormatGltfMaterial, TgdFormatGltfMesh, TgdFormatGltfMeshPrimitive, TgdFormatGltfNode, TgdFormatGltfScene } from "../../types/gltf";
3
+ import { type TgdTypeArrayForElements } from "../../types";
8
4
  import { TgdGeometry } from "../../geometry";
9
5
  import { TgdTexture2D } from "../../texture";
10
- import { TgdCamera } from "../../camera";
6
+ import { type TgdCamera } from "../../camera";
11
7
  import { TgdTransfo } from "../../math";
12
8
  export declare class TgdDataGlb {
13
- readonly gltf: Readonly<TgdFormatGltf>;
14
9
  private readonly chunks;
15
- private readonly chunkDetails;
16
- private readonly cacheImages;
17
- private readonly cacheImageURLs;
10
+ private readonly images;
11
+ readonly fileSize: number;
12
+ static parse(content: ArrayBuffer): Promise<TgdDataGlb>;
13
+ readonly json: Readonly<TgdFormatGltf>;
18
14
  private readonly cacheBufferViewDatas;
19
15
  /**
20
16
  * @param content The binary content of a GLB file.
21
17
  */
22
- constructor(content: ArrayBuffer);
18
+ private constructor();
19
+ getJson(): Readonly<TgdFormatGltf>;
23
20
  createTransfoFromNode(node: TgdFormatGltfNode): TgdTransfo;
24
21
  createCameraByName(name: string): TgdCamera;
22
+ getBufferViews(): TgdFormatGltfBufferView[];
23
+ getBufferView(bufferViewIndex: number): TgdFormatGltfBufferView | undefined;
25
24
  getCamera(cameraIndex: number): TgdFormatGltfCamera;
26
- getChunkDetails(): {
27
- size: number;
28
- type: "JSON" | "BIN";
29
- }[];
30
- get fileSize(): number;
25
+ getImages(): TgdFormatGltfImage[];
26
+ getImage(imageIndex: number): TgdFormatGltfImage | undefined;
27
+ getImageAsHTMLElement(imageIndex: number): HTMLImageElement;
31
28
  getScenes(): TgdFormatGltfScene[];
32
29
  getScene(sceneIndex: number): TgdFormatGltfScene;
30
+ getNodes(): TgdFormatGltfNode[];
33
31
  getNode(nodeIndex: number): TgdFormatGltfNode;
34
32
  getNodeByName(nodeName: string): TgdFormatGltfNode | undefined;
35
33
  getNodeByNameOrThrow(nodeName: string): TgdFormatGltfNode;
36
34
  getAccessor(accessorIndex?: number): TgdFormatGltfAccessor;
37
35
  getMaterial(materialIndex: number): TgdFormatGltfMaterial;
38
36
  getMesh(meshIndexOrName?: TgdFormatGltfMesh | number | string): TgdFormatGltfMesh;
39
- getMeshPrimitive(meshIndexOrName?: TgdFormatGltfMesh | number | string, primitiveIndex?: number): {
40
- attributes: Record<string, number>;
41
- indices?: number;
42
- mode?: number;
43
- material?: number;
44
- };
37
+ getMeshPrimitive(meshIndexOrName?: TgdFormatGltfMesh | number | string, primitiveIndex?: number): TgdFormatGltfMeshPrimitive;
45
38
  getMeshPrimitiveIndices(meshIndexOrName?: TgdFormatGltfMesh | number | string, primitiveIndex?: number): TgdTypeArrayForElements;
46
- getAccessorByAttributeName(primitive: TgdFormatGltfMeshPrimitive, attribName: string): TgdFormatGltfAccessor;
39
+ getAccessorByAttributeName(primitive: TgdFormatGltfMeshPrimitive, attribName: string): TgdFormatGltfAccessor | TgdFormatGltfEmbededData;
47
40
  createTexture2D(context: {
48
41
  gl: WebGL2RenderingContext;
49
42
  }, textureIndex: number): TgdTexture2D;
50
- loadImage(imageIndex: number): Promise<HTMLImageElement | undefined>;
51
- getImageURL(imageIndex: number): string | undefined;
52
43
  getBufferViewData(accessor: TgdFormatGltfAccessor): Int8Array | Uint8Array | Int16Array | Uint16Array | Uint32Array | Float32Array;
53
44
  getBufferViewData(bufferViewIndex: number, type?: number | "Int8" | "Uint8" | "Int16" | "Uint16" | "Uint32" | "Float32"): Int8Array | Uint8Array | Int16Array | Uint16Array | Uint32Array | Float32Array;
54
45
  findAccessorForBufferView(bufferViewIndex: number): TgdFormatGltfAccessor | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"gltf.d.ts","sourceRoot":"","sources":["../../../src/parser/gltf/gltf.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gltf.d.ts","sourceRoot":"","sources":["../../../src/parser/gltf/gltf.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAA6B,MAAM,cAAc,CAAC;AAErE,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,KAAK,SAAS,EAAwB,MAAM,aAAa,CAAC;AACnE,OAAO,EAEL,UAAU,EAGX,MAAM,WAAW,CAAC;AAMnB,qBAAa,UAAU;IA+EnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;aACP,QAAQ,EAAE,MAAM;WAhFd,KAAK,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA6DpE,SAAgB,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IAE9C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAQjC;IAEJ;;OAEG;IACH,OAAO;IAoBP,OAAO;IAIP,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,UAAU;IAW1D,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAsB3C,cAAc,IAAI,uBAAuB,EAAE;IAI3C,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS;IAI3E,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB;IASnD,SAAS,IAAI,kBAAkB,EAAE;IAIjC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI5D,qBAAqB,CAAC,UAAU,EAAE,MAAM;IAIxC,SAAS,IAAI,kBAAkB,EAAE;IAIjC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB;IAShD,QAAQ,IAAI,iBAAiB,EAAE;IAI/B,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB;IAS7C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAS9D,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB;IAkBzD,WAAW,CAAC,aAAa,SAAI,GAAG,qBAAqB;IASrD,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,qBAAqB;IASzD,OAAO,CACL,eAAe,GAAE,iBAAiB,GAAG,MAAM,GAAG,MAAU,GACvD,iBAAiB;IAsBpB,gBAAgB,CACd,eAAe,GAAE,iBAAiB,GAAG,MAAM,GAAG,MAAU,EACxD,cAAc,SAAI,GACjB,0BAA0B;IAsB7B,uBAAuB,CACrB,eAAe,GAAE,iBAAiB,GAAG,MAAM,GAAG,MAAU,EACxD,cAAc,SAAI,GACjB,uBAAuB;IAoB1B,0BAA0B,CACxB,SAAS,EAAE,0BAA0B,EACrC,UAAU,EAAE,MAAM,GACjB,qBAAqB,GAAG,wBAAwB;IA8BnD,eAAe,CACb,OAAO,EAAE;QAAE,EAAE,EAAE,sBAAsB,CAAA;KAAE,EACvC,YAAY,EAAE,MAAM,GACnB,YAAY;IAYf,iBAAiB,CACf,QAAQ,EAAE,qBAAqB,GAE7B,SAAS,GACT,UAAU,GACV,UAAU,GACV,WAAW,GACX,WAAW,GACX,YAAY;IAChB,iBAAiB,CACf,eAAe,EAAE,MAAM,EACvB,IAAI,CAAC,EACD,MAAM,GACN,MAAM,GACN,OAAO,GACP,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,SAAS,GAEX,SAAS,GACT,UAAU,GACV,UAAU,GACV,WAAW,GACX,WAAW,GACX,YAAY;IAiDhB,yBAAyB,CACvB,eAAe,EAAE,MAAM,GACtB,qBAAqB,GAAG,SAAS;IAMpC,SAAS,CACP,OAAO,EAAE,UAAU,EACnB,UAAU,EAAE,MAAM,EAClB,eAAe,GAAE,iBAAiB,GAAG,MAAM,GAAG,MAAU,EACxD,cAAc,SAAI,EAClB,mBAAmB,CAAC,EAAE,MAAM;IAyC9B,YAAY,CAAC,EACX,cAAc,EACd,SAAa,EACb,cAAkB,EAClB,eAA4B,EAC5B,aAAwB,EACxB,oBAAmC,GACpC,GAAE;QACD,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,WAAW;CA4DrB"}