@tolokoban/tgd 2.0.69 → 2.0.70

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.
@@ -3,7 +3,7 @@ import { TgdVec3, TgdVec4 } from "../math";
3
3
  import { TgdMaterial } from "./material";
4
4
  import { TgdLight } from "../light";
5
5
  import { TgdTexture2D, TgdTextureCube } from "../texture";
6
- export type TgdMaterialPrincipledOptions = Partial<{
6
+ export type TgdMaterialGlassOptions = Partial<{
7
7
  color: TgdVec4 | ArrayNumber4 | TgdTexture2D;
8
8
  lights: TgdLight[];
9
9
  ambientColor: TgdVec3 | ArrayNumber3 | TgdTextureCube;
@@ -12,14 +12,16 @@ export type TgdMaterialPrincipledOptions = Partial<{
12
12
  specularIntensity: number;
13
13
  normalMap: TgdTexture2D;
14
14
  }>;
15
- export declare class TgdMaterialPrincipled extends TgdMaterial {
15
+ export declare class TgdMaterialGlass extends TgdMaterial {
16
16
  private readonly options;
17
17
  specularExponent: number;
18
18
  specularIntensity: number;
19
+ opacityMin: number;
20
+ opacityMax: number;
19
21
  private textureColor;
20
22
  private mustDeleteTextureColor;
21
23
  private textureAmbient;
22
24
  private mustDeleteTextureAmbient;
23
- constructor(options?: TgdMaterialPrincipledOptions);
25
+ constructor(options?: TgdMaterialGlassOptions);
24
26
  }
25
- //# sourceMappingURL=principled.d.ts.map
27
+ //# sourceMappingURL=glass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glass.d.ts","sourceRoot":"","sources":["../../src/material/glass.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EACZ,YAAY,EAGf,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAS3D,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC;IAC1C,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,YAAY,CAAA;IAC5C,MAAM,EAAE,QAAQ,EAAE,CAAA;IAClB,YAAY,EAAE,OAAO,GAAG,YAAY,GAAG,cAAc,CAAA;IACrD,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,SAAS,EAAE,YAAY,CAAA;CAC1B,CAAC,CAAA;AAKF,qBAAa,gBAAiB,SAAQ,WAAW;IAWjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAV7B,gBAAgB,SAAM;IACtB,iBAAiB,SAAI;IACrB,UAAU,SAAI;IACd,UAAU,SAAO;IAExB,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,sBAAsB,CAAQ;IACtC,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,wBAAwB,CAAQ;gBAEX,OAAO,GAAE,uBAA4B;CAqHrE"}
@@ -0,0 +1,116 @@
1
+ import { TgdVec3, TgdVec4 } from "./../math/index.js";
2
+ import { TgdMaterial } from "./material.js";
3
+ import { TgdTexture2D, TgdTextureCube } from "./../texture/index.js";
4
+ import { tgdCanvasCreateFill, webglPresetBlend, webglPresetDepth, } from "./../utils/index.js";
5
+ const DEFAULT_COLOR = new TgdVec4(0.8, 0.6, 0.1, 1);
6
+ const DEFAULT_AMBIENT = new TgdVec3(0.8, 0.8, 0.8);
7
+ export class TgdMaterialGlass extends TgdMaterial {
8
+ constructor(options = {}) {
9
+ const uniforms = {
10
+ uniTransfoMatrix: "mat4",
11
+ uniSpecularExponent: "float",
12
+ uniSpecularIntensity: "float",
13
+ uniOpacityBase: "float",
14
+ uniOpacityFactor: "float",
15
+ texColor: "sampler2D",
16
+ texAmbient: "samplerCube",
17
+ uniCameraPosition: "vec3",
18
+ };
19
+ const fragmentShaderCode = [
20
+ `vec3 N = normalize(varNormal);`,
21
+ `vec3 L = normalize(varPosition.xyz - uniCameraPosition);`,
22
+ `vec3 R = reflect(L, N);`,
23
+ `vec3 color = texture(texAmbient, R).rgb;`,
24
+ `color = pow(color, vec3(uniSpecularExponent));`,
25
+ `color *= uniSpecularIntensity;`,
26
+ `return vec4(color, uniOpacityBase + uniOpacityFactor * dot(color, color)) * texture(texColor, varUV);`,
27
+ ];
28
+ const varyings = {
29
+ varUV: "vec2",
30
+ varNormal: "vec3",
31
+ varPosition: "vec4",
32
+ };
33
+ const vertexShaderCode = () => {
34
+ const code = [
35
+ `varUV = ${this.attUV};`,
36
+ `varNormal = mat3(uniTransfoMatrix) * ${this.attNormal};`,
37
+ `varPosition = uniTransfoMatrix * ${this.attPosition};`,
38
+ ];
39
+ return code;
40
+ };
41
+ super({
42
+ state: {
43
+ blend: webglPresetBlend.alpha,
44
+ depth: webglPresetDepth.writeOnly,
45
+ },
46
+ delete: () => {
47
+ var _a, _b;
48
+ if (this.mustDeleteTextureAmbient)
49
+ (_a = this.textureAmbient) === null || _a === void 0 ? void 0 : _a.delete();
50
+ if (this.mustDeleteTextureColor)
51
+ (_b = this.textureColor) === null || _b === void 0 ? void 0 : _b.delete();
52
+ },
53
+ uniforms,
54
+ varyings,
55
+ vertexShaderCode,
56
+ fragmentShaderCode,
57
+ setUniforms: ({ program, camera, }) => {
58
+ var _a, _b;
59
+ if (!this.textureColor) {
60
+ // Lazy creation of a texture from an unique color.
61
+ this.textureColor = new TgdTexture2D(program);
62
+ const color = (_a = this.options.color) !== null && _a !== void 0 ? _a : DEFAULT_COLOR;
63
+ if (!(color instanceof TgdTexture2D)) {
64
+ this.textureColor.loadBitmap(tgdCanvasCreateFill(1, 1, color));
65
+ }
66
+ this.mustDeleteTextureColor = true;
67
+ }
68
+ if (!this.textureAmbient) {
69
+ // Lazy creation of a texture from an unique color.
70
+ const color = (_b = this.options.ambientColor) !== null && _b !== void 0 ? _b : DEFAULT_AMBIENT;
71
+ const canvas = tgdCanvasCreateFill(1, 1, color instanceof TgdTextureCube
72
+ ? DEFAULT_AMBIENT
73
+ : color);
74
+ this.textureAmbient = new TgdTextureCube(program, {
75
+ imagePosX: canvas,
76
+ imagePosY: canvas,
77
+ imagePosZ: canvas,
78
+ imageNegX: canvas,
79
+ imageNegY: canvas,
80
+ imageNegZ: canvas,
81
+ });
82
+ this.mustDeleteTextureAmbient = true;
83
+ }
84
+ this.textureColor.activate(0, program, "texColor");
85
+ this.textureAmbient.activate(1, program, "texAmbient");
86
+ program.uniform3fv("uniCameraPosition", camera.transfo.actualPosition);
87
+ program.uniform1f("uniSpecularExponent", this.specularExponent);
88
+ program.uniform1f("uniSpecularIntensity", this.specularIntensity);
89
+ program.uniform1f("uniOpacityBase", this.opacityMin);
90
+ program.uniform1f("uniOpacityFactor", this.opacityMax - this.opacityMin);
91
+ },
92
+ });
93
+ this.options = options;
94
+ this.specularExponent = 2.2;
95
+ this.specularIntensity = 2;
96
+ this.opacityMin = 0;
97
+ this.opacityMax = 0.05;
98
+ this.textureColor = null;
99
+ this.mustDeleteTextureColor = false;
100
+ this.textureAmbient = null;
101
+ this.mustDeleteTextureAmbient = false;
102
+ if (typeof options.specularExponent === "number") {
103
+ this.specularExponent = options.specularExponent;
104
+ }
105
+ if (typeof options.specularIntensity === "number") {
106
+ this.specularIntensity = options.specularIntensity;
107
+ }
108
+ if (options.color instanceof TgdTexture2D) {
109
+ this.textureColor = options.color;
110
+ }
111
+ if (options.ambientColor instanceof TgdTextureCube) {
112
+ this.textureAmbient = options.ambientColor;
113
+ }
114
+ }
115
+ }
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWF0ZXJpYWwvZ2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUd4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUUzRCxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixnQkFBZ0IsR0FDbkIsTUFBTSxZQUFZLENBQUE7QUFhbkIsTUFBTSxhQUFhLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFDbkQsTUFBTSxlQUFlLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtBQUVsRCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsV0FBVztJQVc3QyxZQUE2QixVQUFtQyxFQUFFO1FBQzlELE1BQU0sUUFBUSxHQUF5QztZQUNuRCxnQkFBZ0IsRUFBRSxNQUFNO1lBQ3hCLG1CQUFtQixFQUFFLE9BQU87WUFDNUIsb0JBQW9CLEVBQUUsT0FBTztZQUM3QixjQUFjLEVBQUUsT0FBTztZQUN2QixnQkFBZ0IsRUFBRSxPQUFPO1lBQ3pCLFFBQVEsRUFBRSxXQUFXO1lBQ3JCLFVBQVUsRUFBRSxhQUFhO1lBQ3pCLGlCQUFpQixFQUFFLE1BQU07U0FDNUIsQ0FBQTtRQUNELE1BQU0sa0JBQWtCLEdBQWdCO1lBQ3BDLGdDQUFnQztZQUNoQywwREFBMEQ7WUFDMUQseUJBQXlCO1lBQ3pCLDBDQUEwQztZQUMxQyxnREFBZ0Q7WUFDaEQsZ0NBQWdDO1lBQ2hDLHVHQUF1RztTQUMxRyxDQUFBO1FBQ0QsTUFBTSxRQUFRLEdBQTJDO1lBQ3JELEtBQUss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
@@ -3,6 +3,7 @@ export * from "./diffuse";
3
3
  export * from "./face-orientation";
4
4
  export * from "./flat";
5
5
  export * from "./ghost";
6
+ export * from "./glass";
6
7
  export * from "./global";
7
8
  export * from "./hull";
8
9
  export * from "./material";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/material/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA;AAClC,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,QAAQ,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/material/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA;AAClC,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,QAAQ,CAAA"}
@@ -3,10 +3,11 @@ export * from "./diffuse.js";
3
3
  export * from "./face-orientation.js";
4
4
  export * from "./flat.js";
5
5
  export * from "./ghost.js";
6
+ export * from "./glass.js";
6
7
  export * from "./global.js";
7
8
  export * from "./hull.js";
8
9
  export * from "./material.js";
9
10
  export * from "./normals.js";
10
11
  export * from "./normal-map.js";
11
12
  export * from "./toon.js";
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWF0ZXJpYWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxTQUFTLENBQUE7QUFDdkIsY0FBYyxXQUFXLENBQUE7QUFDekIsY0FBYyxvQkFBb0IsQ0FBQTtBQUNsQyxjQUFjLFFBQVEsQ0FBQTtBQUN0QixjQUFjLFNBQVMsQ0FBQTtBQUN2QixjQUFjLFVBQVUsQ0FBQTtBQUN4QixjQUFjLFFBQVEsQ0FBQTtBQUN0QixjQUFjLFlBQVksQ0FBQTtBQUMxQixjQUFjLFdBQVcsQ0FBQTtBQUN6QixjQUFjLGNBQWMsQ0FBQTtBQUM1QixjQUFjLFFBQVEsQ0FBQSJ9
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWF0ZXJpYWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxTQUFTLENBQUE7QUFDdkIsY0FBYyxXQUFXLENBQUE7QUFDekIsY0FBYyxvQkFBb0IsQ0FBQTtBQUNsQyxjQUFjLFFBQVEsQ0FBQTtBQUN0QixjQUFjLFNBQVMsQ0FBQTtBQUN2QixjQUFjLFNBQVMsQ0FBQTtBQUN2QixjQUFjLFVBQVUsQ0FBQTtBQUN4QixjQUFjLFFBQVEsQ0FBQTtBQUN0QixjQUFjLFlBQVksQ0FBQTtBQUMxQixjQUFjLFdBQVcsQ0FBQTtBQUN6QixjQUFjLGNBQWMsQ0FBQTtBQUM1QixjQUFjLFFBQVEsQ0FBQSJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tolokoban/tgd",
3
- "version": "2.0.69",
3
+ "version": "2.0.70",
4
4
  "description": "ToloGameDev library for WebGL2",
5
5
  "homepage": "https://tolokoban.github.io/tgd2",
6
6
  "main": "./lib/dist/index.js",
@@ -1,25 +0,0 @@
1
- import { ArrayNumber3, ArrayNumber4 } from "../types";
2
- import { TgdVec3, TgdVec4 } from "../math";
3
- import { TgdMaterial } from "./material";
4
- import { TgdLight } from "../light";
5
- import { TgdTexture2D, TgdTextureCube } from "../texture";
6
- export type TgdMaterialBSDFOptions = Partial<{
7
- color: TgdVec4 | ArrayNumber4 | TgdTexture2D;
8
- lights: TgdLight[];
9
- ambientColor: TgdVec3 | ArrayNumber3 | TgdTextureCube;
10
- ambientIntensity: number;
11
- specularExponent: number;
12
- specularIntensity: number;
13
- normalMap: TgdVec3 | ArrayNumber3 | TgdTexture2D;
14
- }>;
15
- export declare class TgdMaterialBSDF extends TgdMaterial {
16
- light: TgdLight;
17
- ambient: TgdLight;
18
- specularExponent: number;
19
- specularIntensity: number;
20
- private readonly texture;
21
- private readonly lightColor;
22
- private readonly ambientColor;
23
- constructor(options?: TgdMaterialBSDFOptions);
24
- }
25
- //# sourceMappingURL=bsdf.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bsdf.d.ts","sourceRoot":"","sources":["../../src/material/bsdf.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EACZ,YAAY,EAGf,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAG3D,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC;IACzC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,YAAY,CAAA;IAC5C,MAAM,EAAE,QAAQ,EAAE,CAAA;IAClB,YAAY,EAAE,OAAO,GAAG,YAAY,GAAG,cAAc,CAAA;IACrD,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,SAAS,EAAE,OAAO,GAAG,YAAY,GAAG,YAAY,CAAA;CACnD,CAAC,CAAA;AAIF,qBAAa,eAAgB,SAAQ,WAAW;IACrC,KAAK,WAAiB;IACtB,OAAO,WAAuD;IAC9D,gBAAgB,SAAK;IACrB,iBAAiB,SAAI;IAE5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;gBAEjC,OAAO,GAAE,sBAA2B;CAyFnD"}
@@ -1,98 +0,0 @@
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 TgdMaterialBSDF extends TgdMaterial {
7
- constructor(options = {}) {
8
- var _a;
9
- const color = options.color instanceof TgdTexture2D
10
- ? options.color
11
- : new TgdVec4((_a = options.color) !== null && _a !== void 0 ? _a : DEFAULT_COLOR);
12
- const hasTexture = !(color instanceof TgdVec4);
13
- const uniforms = {
14
- uniLight: "vec3",
15
- uniLightDir: "vec3",
16
- uniAmbient: "vec3",
17
- uniSpecularExponent: "float",
18
- uniSpecularIntensity: "float",
19
- uniModelViewMatrix: "mat4",
20
- };
21
- const fragmentShaderCode = [
22
- `vec3 normal = ${options.lockLightsToCamera ? "mat3(uniModelViewMatrix) * " : ""}normalize(varNormal);`,
23
- `float light = 1.0 - dot(normal, uniLightDir);`,
24
- options.lockLightsToCamera
25
- ? "light = max(0.0, light - 1.0);"
26
- : "light *= .5;",
27
- hasTexture
28
- ? `vec4 color = texture(texDiffuse, varUV);`
29
- : `vec4 color = vec4(${color.join(", ")});`,
30
- `vec3 reflection = ${options.lockLightsToCamera ? "" : "mat3(uniModelViewMatrix) * "}reflect(uniLightDir, normal);`,
31
- `float spec = max(0.0, reflection.z);`,
32
- `spec = pow(spec, uniSpecularExponent) * uniSpecularIntensity;`,
33
- `color = vec4(`,
34
- ` color.rgb * (`,
35
- ` uniAmbient + uniLight * light`,
36
- ` ) + vec3(spec),`,
37
- ` 1.0`,
38
- `);`,
39
- `return color;`,
40
- ];
41
- const varyings = {
42
- varNormal: "vec3",
43
- };
44
- if (hasTexture) {
45
- varyings.varUV = "vec2";
46
- uniforms.texDiffuse = "sampler2D";
47
- }
48
- const vertexShaderCode = () => {
49
- const code = [
50
- `varNormal = mat3(uniTransfoMatrix) * ${this.attNormal};`,
51
- ];
52
- if (hasTexture) {
53
- code.push(`varUV = ${this.attUV};`);
54
- }
55
- return code;
56
- };
57
- super({
58
- uniforms,
59
- varyings,
60
- vertexShaderCode,
61
- fragmentShaderCode,
62
- setUniforms: (program) => {
63
- program.uniform3fv("uniLightDir", this.light.direction);
64
- this.lightColor.from(this.light.color).scale(this.light.color.w);
65
- program.uniform3fv("uniLight", this.lightColor);
66
- this.ambientColor
67
- .from(this.ambient.color)
68
- .scale(this.ambient.color.w);
69
- program.uniform3fv("uniAmbient", this.ambientColor);
70
- program.uniform1f("uniSpecularExponent", this.specularExponent);
71
- program.uniform1f("uniSpecularIntensity", this.specularIntensity);
72
- const { texture } = this;
73
- if (texture)
74
- texture.activate(0, program, "texDiffuse");
75
- },
76
- });
77
- this.light = new TgdLight();
78
- this.ambient = new TgdLight({ color: new TgdVec4(0.2, 0.1, 0, 0) });
79
- this.specularExponent = 20;
80
- this.specularIntensity = 1;
81
- this.lightColor = new TgdVec3();
82
- this.ambientColor = new TgdVec3();
83
- this.texture = hasTexture ? color : null;
84
- if (options.light) {
85
- this.light = options.light;
86
- }
87
- if (options.ambient) {
88
- this.ambient = options.ambient;
89
- }
90
- if (typeof options.specularExponent === "number") {
91
- this.specularExponent = options.specularExponent;
92
- }
93
- if (typeof options.specularIntensity === "number") {
94
- this.specularIntensity = options.specularIntensity;
95
- }
96
- }
97
- }
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnNkZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXRlcmlhbC9ic2RmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNyQyxPQUFPLEVBQUUsWUFBWSxFQUFrQixNQUFNLGNBQWMsQ0FBQTtBQWEzRCxNQUFNLGFBQWEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUVuRCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxXQUFXO0lBVTVDLFlBQVksVUFBa0MsRUFBRTs7UUFDNUMsTUFBTSxLQUFLLEdBQ1AsT0FBTyxDQUFDLEtBQUssWUFBWSxZQUFZO1lBQ2pDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSztZQUNmLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFBLE9BQU8sQ0FBQyxLQUFLLG1DQUFJLGFBQWEsQ0FBQyxDQUFBO1FBQ3JELE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLFlBQVksT0FBTyxDQUFDLENBQUE7UUFDOUMsTUFBTSxRQUFRLEdBQXlDO1lBQ25ELFFBQVEsRUFBRSxNQUFNO1lBQ2hCLFdBQVcsRUFBRSxNQUFNO1lBQ25CLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLG1CQUFtQixFQUFFLE9BQU87WUFDNUIsb0JBQW9CLEVBQUUsT0FBTztZQUM3QixrQkFBa0IsRUFBRSxNQUFNO1NBQzdCLENBQUE7UUFDRCxNQUFNLGtCQUFrQixHQUFnQjtZQUNwQyxpQkFBaUIsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsRUFBRSx1QkFBdUI7WUFDdkcsK0NB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
@@ -1 +0,0 @@
1
- {"version":3,"file":"principled.d.ts","sourceRoot":"","sources":["../../src/material/principled.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EACZ,YAAY,EAGf,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAK3D,MAAM,MAAM,4BAA4B,GAAG,OAAO,CAAC;IAC/C,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,YAAY,CAAA;IAC5C,MAAM,EAAE,QAAQ,EAAE,CAAA;IAClB,YAAY,EAAE,OAAO,GAAG,YAAY,GAAG,cAAc,CAAA;IACrD,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,SAAS,EAAE,YAAY,CAAA;CAC1B,CAAC,CAAA;AAKF,qBAAa,qBAAsB,SAAQ,WAAW;IAStC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAR7B,gBAAgB,SAAM;IACtB,iBAAiB,SAAI;IAE5B,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,sBAAsB,CAAQ;IACtC,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,wBAAwB,CAAQ;gBAEX,OAAO,GAAE,4BAAiC;CAgH1E"}
@@ -1,112 +0,0 @@
1
- import { TgdVec3, TgdVec4 } from "./../math/index.js";
2
- import { TgdMaterial } from "./material.js";
3
- import { TgdTexture2D, TgdTextureCube } from "./../texture/index.js";
4
- import { tgdCanvasCreateFill } from "./../utils/index.js";
5
- const DEFAULT_COLOR = new TgdVec4(0.8, 0.6, 0.1, 1);
6
- const DEFAULT_AMBIENT = new TgdVec3(0.8, 0.8, 0.8);
7
- export class TgdMaterialPrincipled extends TgdMaterial {
8
- constructor(options = {}) {
9
- const uniforms = {
10
- uniTransfoMatrix: "mat4",
11
- uniSpecularExponent: "float",
12
- uniSpecularIntensity: "float",
13
- texColor: "sampler2D",
14
- texAmbient: "samplerCube",
15
- uniCameraPosition: "vec3",
16
- };
17
- const fragmentShaderCode = [
18
- `vec3 N = normalize(varNormal);`,
19
- `vec3 L = normalize(varPosition.xyz - uniCameraPosition);`,
20
- `vec3 R = reflect(L, N);`,
21
- `vec3 color = texture(texAmbient, R).rgb;`,
22
- `color = pow(color, vec3(uniSpecularExponent));`,
23
- `color *= uniSpecularIntensity;`,
24
- `return vec4(color, 1) * texture(texColor, varUV);`,
25
- ];
26
- const varyings = {
27
- varUV: "vec2",
28
- varNormal: "vec3",
29
- varPosition: "vec4",
30
- };
31
- const vertexShaderCode = () => {
32
- const code = [
33
- `varUV = ${this.attUV};`,
34
- `varNormal = mat3(uniTransfoMatrix) * ${this.attNormal};`,
35
- `varPosition = uniTransfoMatrix * ${this.attPosition};`,
36
- ];
37
- return code;
38
- };
39
- super({
40
- delete: () => {
41
- var _a, _b;
42
- if (this.mustDeleteTextureAmbient)
43
- (_a = this.textureAmbient) === null || _a === void 0 ? void 0 : _a.delete();
44
- if (this.mustDeleteTextureColor)
45
- (_b = this.textureColor) === null || _b === void 0 ? void 0 : _b.delete();
46
- },
47
- uniforms,
48
- varyings,
49
- vertexShaderCode,
50
- fragmentShaderCode,
51
- setUniforms: ({ program, camera, }) => {
52
- var _a, _b;
53
- if (!this.textureColor) {
54
- // Lazy creation of a texture from an unique color.
55
- this.textureColor = new TgdTexture2D(program);
56
- const color = (_a = this.options.color) !== null && _a !== void 0 ? _a : DEFAULT_COLOR;
57
- if (!(color instanceof TgdTexture2D)) {
58
- this.textureColor.loadBitmap(tgdCanvasCreateFill(1, 1, color));
59
- }
60
- this.mustDeleteTextureColor = true;
61
- }
62
- if (!this.textureAmbient) {
63
- // Lazy creation of a texture from an unique color.
64
- const color = (_b = this.options.ambientColor) !== null && _b !== void 0 ? _b : DEFAULT_AMBIENT;
65
- const canvas = tgdCanvasCreateFill(1, 1, color instanceof TgdTextureCube
66
- ? DEFAULT_AMBIENT
67
- : color);
68
- this.textureAmbient = new TgdTextureCube(program, {
69
- imagePosX: canvas,
70
- imagePosY: canvas,
71
- imagePosZ: canvas,
72
- imageNegX: canvas,
73
- imageNegY: canvas,
74
- imageNegZ: canvas,
75
- });
76
- this.mustDeleteTextureAmbient = true;
77
- }
78
- this.textureColor.activate(0, program, "texColor");
79
- this.textureAmbient.activate(1, program, "texAmbient");
80
- program.uniform3fv("uniCameraPosition", camera.transfo.actualPosition);
81
- program.uniform1f("uniSpecularExponent", this.specularExponent);
82
- program.uniform1f("uniSpecularIntensity", this.specularIntensity);
83
- },
84
- });
85
- this.options = options;
86
- this.specularExponent = 2.2;
87
- this.specularIntensity = 2;
88
- this.textureColor = null;
89
- this.mustDeleteTextureColor = false;
90
- this.textureAmbient = null;
91
- this.mustDeleteTextureAmbient = false;
92
- // if (options.light) {
93
- // this.light = options.light
94
- // }
95
- // if (options.ambient) {
96
- // this.ambient = options.ambient
97
- // }
98
- if (typeof options.specularExponent === "number") {
99
- this.specularExponent = options.specularExponent;
100
- }
101
- if (typeof options.specularIntensity === "number") {
102
- this.specularIntensity = options.specularIntensity;
103
- }
104
- if (options.color instanceof TgdTexture2D) {
105
- this.textureColor = options.color;
106
- }
107
- if (options.ambientColor instanceof TgdTextureCube) {
108
- this.textureAmbient = options.ambientColor;
109
- }
110
- }
111
- }
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbmNpcGxlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXRlcmlhbC9wcmluY2lwbGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFHeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFBO0FBYWhELE1BQU0sYUFBYSxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ25ELE1BQU0sZUFBZSxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7QUFFbEQsTUFBTSxPQUFPLHFCQUFzQixTQUFRLFdBQVc7SUFTbEQsWUFBNkIsVUFBd0MsRUFBRTtRQUNuRSxNQUFNLFFBQVEsR0FBeUM7WUFDbkQsZ0JBQWdCLEVBQUUsTUFBTTtZQUN4QixtQkFBbUIsRUFBRSxPQUFPO1lBQzVCLG9CQUFvQixFQUFFLE9BQU87WUFDN0IsUUFBUSxFQUFFLFdBQVc7WUFDckIsVUFBVSxFQUFFLGFBQWE7WUFDekIsaUJBQWlCLEVBQUUsTUFBTTtTQUM1QixDQUFBO1FBQ0QsTUFBTSxrQkFBa0IsR0FBZ0I7WUFDcEMsZ0NBQWdDO1lBQ2hDLDBEQUEwRDtZQUMxRCx5QkFBeUI7WUFDekIsMENBQTBDO1lBQzFDLGdEQUFnRDtZQUNoRCxnQ0FBZ0M7WUFDaEMsbURBQW1EO1NBQ3RELENBQUE7UUFDRCxNQUFNLFFBQVEsR0FBMkM7WUFDckQsS0FBSyxFQUFFLE1BQU07WUFDYixTQUFTLEVBQUUsTUFBTTtZQUNqQixXQUFXLEVBQUUsTUFBTTtTQUN0QixDQUFB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
@@ -1,22 +0,0 @@
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 { TgdProgram } from "../program";
6
- export type TgdMaterialSolidOptions = Partial<{
7
- color: ArrayNumber4 | TgdVec4;
8
- }>;
9
- export declare class TgdMaterialSolid extends TgdMaterial {
10
- color: TgdVec4;
11
- readonly varyings: {
12
- [name: string]: WebglAttributeType;
13
- };
14
- readonly uniforms: {
15
- [name: string]: WebglUniformType;
16
- };
17
- readonly fragmentShaderCode: TgdCodeBloc;
18
- readonly vertexShaderCode: TgdCodeBloc;
19
- constructor(options?: TgdMaterialSolidOptions);
20
- setUniforms(program: TgdProgram): void;
21
- }
22
- //# sourceMappingURL=solid.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"solid.d.ts","sourceRoot":"","sources":["../../src/material/solid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC;IAC1C,KAAK,EAAE,YAAY,GAAG,OAAO,CAAA;CAChC,CAAC,CAAA;AAIF,qBAAa,gBAAiB,SAAQ,WAAW;IACtC,KAAK,EAAE,OAAO,CAAA;IAErB,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,CAE7D;IACD,SAAgB,kBAAkB,EAAE,WAAW,CAAA;IAC/C,SAAgB,gBAAgB,EAAE,WAAW,CAAA;gBAEjC,OAAO,GAAE,uBAA4B;IAQjD,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;CAGzC"}
@@ -1,20 +0,0 @@
1
- import { TgdVec4 } from "./../math/index.js";
2
- import { TgdMaterial } from "./material.js";
3
- const DEFAULT_COLOR = [0.111, 0.333, 0.999, 1];
4
- export class TgdMaterialSolid extends TgdMaterial {
5
- constructor(options = {}) {
6
- var _a;
7
- super();
8
- this.uniforms = {
9
- uniColor: "vec4",
10
- };
11
- this.color = new TgdVec4((_a = options.color) !== null && _a !== void 0 ? _a : DEFAULT_COLOR);
12
- this.fragmentShaderCode = [`return uniColor;`];
13
- this.vertexShaderCode = [];
14
- this.varyings = {};
15
- }
16
- setUniforms(program) {
17
- program.uniform4fv("uniColor", this.color);
18
- }
19
- }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29saWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWF0ZXJpYWwvc29saWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNuQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBUXhDLE1BQU0sYUFBYSxHQUFpQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBRTVELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxXQUFXO0lBVTdDLFlBQVksVUFBbUMsRUFBRTs7UUFDN0MsS0FBSyxFQUFFLENBQUE7UUFQSyxhQUFRLEdBQXlDO1lBQzdELFFBQVEsRUFBRSxNQUFNO1NBQ25CLENBQUE7UUFNRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksT0FBTyxDQUFDLE1BQUEsT0FBTyxDQUFDLEtBQUssbUNBQUksYUFBYSxDQUFDLENBQUE7UUFDeEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUM5QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFBO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO0lBQ3RCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBbUI7UUFDM0IsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzlDLENBQUM7Q0FDSiJ9
@@ -1,8 +0,0 @@
1
- import { TgdEvent } from "../event";
2
- export interface TgdInputKeyboard {
3
- readonly eventKeyPress: TgdEvent<KeyboardEvent>;
4
- isDown(...keys: string[]): boolean;
5
- isUp(...keys: string[]): boolean;
6
- hasClicked(key: string): boolean;
7
- }
8
- //# sourceMappingURL=input-keyboard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-keyboard.d.ts","sourceRoot":"","sources":["../../src/types/input-keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAA;IAC/C,MAAM,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAClC,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAChC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACnC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQta2V5Ym9hcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5wdXQta2V5Ym9hcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -1,19 +0,0 @@
1
- export declare function tgdCalcClamp(value: number, min: number, max: number): number;
2
- export declare function tgdCalcMapRange(value: number, fromMin: number, fromMax: number, toMin: number, toMax: number, clamp?: boolean): number;
3
- export declare function tgdCalcMix(valueAtT0: number, valueAtT1: number, t: number): number;
4
- export declare function tgdCalcDegToRad(deg: number): number;
5
- export declare function tgdCalcRadToDeg(rad: number): number;
6
- export declare function tgdCalcSmoothStep(boundFor0: number, boundFor1: number, value: number): number;
7
- export declare function tgdCalcRandom(min?: number, max?: number): number;
8
- /**
9
- * Force `value` to be between `min` and `max` by shifting it
10
- * by `max - min` as many times as needed.
11
- * @example
12
- * ```ts
13
- * tgdCalcModulo(3, 10, 20) === 13
14
- * tgdCalcModulo(13, 10, 20) === 13
15
- * tgdCalcModulo(23, 10, 20) === 13
16
- * ```
17
- */
18
- export declare function tgdCalcModulo(value: number, min: number, max: number): number;
19
- //# sourceMappingURL=math.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/utils/math.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAI5E;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,UAAQ,GACZ,MAAM,CAMR;AAED,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,CAAC,EAAE,MAAM,GACR,MAAM,CAER;AAKD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,UAE1C;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,UAE1C;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,MAAM,CAGR;AAED,wBAAgB,aAAa,CAAC,GAAG,SAAI,EAAE,GAAG,CAAC,EAAE,MAAM,UAGlD;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,UAepE"}
@@ -1,59 +0,0 @@
1
- export function tgdCalcClamp(value, min, max) {
2
- if (value < min)
3
- return min;
4
- if (value > max)
5
- return max;
6
- return value;
7
- }
8
- export function tgdCalcMapRange(value, fromMin, fromMax, toMin, toMax, clamp = false) {
9
- const v = clamp ? tgdCalcClamp(value, fromMin, fromMax) : value;
10
- if (fromMin === fromMax)
11
- return v;
12
- const alpha = (v - fromMin) / (fromMax - fromMin);
13
- return toMin + alpha * (toMax - toMin);
14
- }
15
- export function tgdCalcMix(valueAtT0, valueAtT1, t) {
16
- return (1 - t) * valueAtT0 + t * valueAtT1;
17
- }
18
- const DEG_PER_RAD = 180 / Math.PI;
19
- const RAD_PER_DEG = Math.PI / 180;
20
- export function tgdCalcDegToRad(deg) {
21
- return deg * RAD_PER_DEG;
22
- }
23
- export function tgdCalcRadToDeg(rad) {
24
- return rad * DEG_PER_RAD;
25
- }
26
- export function tgdCalcSmoothStep(boundFor0, boundFor1, value) {
27
- const t = tgdCalcClamp((value - boundFor0) / (boundFor1 - boundFor0), 0, 1);
28
- return t * t * (3 - 2 * t);
29
- }
30
- export function tgdCalcRandom(min = 1, max) {
31
- if (typeof max !== "number")
32
- return Math.random() * min;
33
- return min + (max - min) * Math.random();
34
- }
35
- /**
36
- * Force `value` to be between `min` and `max` by shifting it
37
- * by `max - min` as many times as needed.
38
- * @example
39
- * ```ts
40
- * tgdCalcModulo(3, 10, 20) === 13
41
- * tgdCalcModulo(13, 10, 20) === 13
42
- * tgdCalcModulo(23, 10, 20) === 13
43
- * ```
44
- */
45
- export function tgdCalcModulo(value, min, max) {
46
- const range = max - min;
47
- if (range === 0)
48
- return min;
49
- if (value < min) {
50
- const n = Math.ceil((min - value) / range);
51
- return value + n * range;
52
- }
53
- if (value > max) {
54
- const n = Math.ceil((value - max) / range);
55
- return value - n * range;
56
- }
57
- return value;
58
- }
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9tYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxHQUFXO0lBQ2xFLElBQUksS0FBSyxHQUFHLEdBQUc7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUM1QixJQUFJLEtBQUssR0FBRyxHQUFHO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDNUIsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsS0FBYSxFQUNiLE9BQWUsRUFDZixPQUFlLEVBQ2YsS0FBYSxFQUNiLEtBQWEsRUFDYixLQUFLLEdBQUcsS0FBSztJQUViLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNoRSxJQUFJLE9BQU8sS0FBSyxPQUFPO1FBQUUsT0FBTyxDQUFDLENBQUM7SUFFbEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDbEQsT0FBTyxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUN4QixTQUFpQixFQUNqQixTQUFpQixFQUNqQixDQUFTO0lBRVQsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsTUFBTSxXQUFXLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDbEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFFbEMsTUFBTSxVQUFVLGVBQWUsQ0FBQyxHQUFXO0lBQ3pDLE9BQU8sR0FBRyxHQUFHLFdBQVcsQ0FBQztBQUMzQixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxHQUFXO0lBQ3pDLE9BQU8sR0FBRyxHQUFHLFdBQVcsQ0FBQztBQUMzQixDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixTQUFpQixFQUNqQixTQUFpQixFQUNqQixLQUFhO0lBRWIsTUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBWTtJQUNqRCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7UUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUM7SUFDeEQsT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzNDLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQWEsRUFBRSxHQUFXLEVBQUUsR0FBVztJQUNuRSxNQUFNLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ3hCLElBQUksS0FBSyxLQUFLLENBQUM7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUU1QixJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNoQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQzNDLE9BQU8sS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDM0MsT0FBTyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIn0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=math.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"math.test.d.ts","sourceRoot":"","sources":["../../src/utils/math.test.ts"],"names":[],"mappings":""}
@@ -1,22 +0,0 @@
1
- import { tgdCalcModulo, tgdCalcRandom } from "./math.js";
2
- describe(`tgdCalc*()`, () => {
3
- describe(`tgdCalcModulo()`, () => {
4
- const cases = [
5
- [-3, 10, 20, 17],
6
- [3, 10, 20, 13],
7
- [13, 10, 20, 13],
8
- [13, 20, 10, 13],
9
- [23, 10, 20, 13],
10
- [3.14, 1, 1.5, 1.14],
11
- [3.64, 1, 1.5, 1.14],
12
- [tgdCalcRandom(-100, 100), 1.618, 1.618, 1.618],
13
- [7, 20, 10, 17],
14
- ];
15
- for (const [value, min, max, expected] of cases) {
16
- it(`should have (${value}, ${min}, ${max}) === ${expected}`, () => {
17
- expect(tgdCalcModulo(value, min, max)).toBeCloseTo(expected, 6);
18
- });
19
- }
20
- });
21
- });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL21hdGgudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUVyRCxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtJQUN4QixRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO1FBQzdCLE1BQU0sS0FBSyxHQUVQO1lBQ0EsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNoQixDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNmLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ2hCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ2hCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ2hCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO1lBQ3BCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO1lBQ3BCLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQ2xCLENBQUE7UUFDRCxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUM5QyxFQUFFLENBQUMsZ0JBQWdCLEtBQUssS0FBSyxHQUFHLEtBQUssR0FBRyxTQUFTLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRTtnQkFDOUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUNuRSxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFBIn0=