@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.
- package/lib/dist/loader/binary.js +3 -3
- package/lib/dist/loader/image.d.ts +1 -0
- package/lib/dist/loader/image.d.ts.map +1 -1
- package/lib/dist/loader/image.js +22 -3
- package/lib/dist/material/camera-light.d.ts +34 -0
- package/lib/dist/material/camera-light.d.ts.map +1 -0
- package/lib/dist/material/camera-light.js +80 -0
- package/lib/dist/painter/mesh/gltf/gltf.d.ts.map +1 -1
- package/lib/dist/painter/mesh/gltf/gltf.js +4 -3
- package/lib/dist/painter/segments/segments.frag +22 -0
- package/lib/dist/painter/segments/segments.vert +121 -0
- package/lib/dist/parser/gltf/gltf.d.ts +17 -26
- package/lib/dist/parser/gltf/gltf.d.ts.map +1 -1
- package/lib/dist/parser/gltf/gltf.js +147 -128
- package/lib/dist/types/gltf.d.ts +69 -51
- package/lib/dist/types/gltf.d.ts.map +1 -1
- package/lib/dist/types/gltf.js +17 -3
- package/package.json +2 -2
|
@@ -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
|
|
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
|
|
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,
|
|
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,
|
|
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"}
|
package/lib/dist/loader/image.js
CHANGED
|
@@ -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,
|
|
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;
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
16
|
-
|
|
17
|
-
|
|
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(
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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":"
|
|
1
|
+
{"version":3,"file":"gltf.d.ts","sourceRoot":"","sources":["../../../src/parser/gltf/gltf.ts"],"names":[],"mappings":"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"}
|