@tolokoban/tgd 2.0.29 → 2.0.31

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.
Files changed (112) hide show
  1. package/lib/dist/canvas/gizmo/gizmo.js +2 -2
  2. package/lib/dist/canvas/landscape/landscape.js +2 -2
  3. package/lib/dist/context/context.d.ts +14 -31
  4. package/lib/dist/context/context.d.ts.map +1 -1
  5. package/lib/dist/context/context.js +54 -69
  6. package/lib/dist/factory/mesh-glb.js +2 -2
  7. package/lib/dist/geometry/gltf.d.ts +12 -0
  8. package/lib/dist/geometry/gltf.d.ts.map +1 -0
  9. package/lib/dist/geometry/gltf.js +36 -0
  10. package/lib/dist/geometry/index.d.ts +1 -0
  11. package/lib/dist/geometry/index.d.ts.map +1 -1
  12. package/lib/dist/geometry/index.js +2 -1
  13. package/lib/dist/geometry/tools/marching-cubes/marching-cubes.js +15 -5
  14. package/lib/dist/index.d.ts +1 -0
  15. package/lib/dist/index.d.ts.map +1 -1
  16. package/lib/dist/index.js +2 -1
  17. package/lib/dist/loader/binary.d.ts.map +1 -1
  18. package/lib/dist/loader/binary.js +3 -1
  19. package/lib/dist/material/face-orientation.d.ts +4 -0
  20. package/lib/dist/material/face-orientation.d.ts.map +1 -1
  21. package/lib/dist/material/face-orientation.js +6 -2
  22. package/lib/dist/material/ghost.d.ts +2 -2
  23. package/lib/dist/material/ghost.d.ts.map +1 -1
  24. package/lib/dist/material/ghost.js +1 -1
  25. package/lib/dist/material/hull.d.ts +14 -1
  26. package/lib/dist/material/hull.d.ts.map +1 -1
  27. package/lib/dist/material/hull.js +18 -6
  28. package/lib/dist/material/index.d.ts +1 -0
  29. package/lib/dist/material/index.d.ts.map +1 -1
  30. package/lib/dist/material/index.js +2 -1
  31. package/lib/dist/material/material.d.ts +7 -2
  32. package/lib/dist/material/material.d.ts.map +1 -1
  33. package/lib/dist/material/material.js +9 -1
  34. package/lib/dist/material/toon.d.ts +38 -0
  35. package/lib/dist/material/toon.d.ts.map +1 -0
  36. package/lib/dist/material/toon.js +95 -0
  37. package/lib/dist/math/mat4.d.ts +1 -0
  38. package/lib/dist/math/mat4.d.ts.map +1 -1
  39. package/lib/dist/math/mat4.js +18 -1
  40. package/lib/dist/math/transfo.d.ts.map +1 -1
  41. package/lib/dist/math/transfo.js +13 -4
  42. package/lib/dist/painter/axes/axes.d.ts +4 -0
  43. package/lib/dist/painter/axes/axes.d.ts.map +1 -1
  44. package/lib/dist/painter/axes/axes.js +14 -1
  45. package/lib/dist/painter/framebuffer-msaa.d.ts +85 -0
  46. package/lib/dist/painter/framebuffer-msaa.d.ts.map +1 -0
  47. package/lib/dist/painter/framebuffer-msaa.js +216 -0
  48. package/lib/dist/painter/framebuffer.js +11 -5
  49. package/lib/dist/painter/group.d.ts +9 -3
  50. package/lib/dist/painter/group.d.ts.map +1 -1
  51. package/lib/dist/painter/group.js +42 -4
  52. package/lib/dist/painter/index.d.ts +3 -1
  53. package/lib/dist/painter/index.d.ts.map +1 -1
  54. package/lib/dist/painter/index.js +4 -2
  55. package/lib/dist/painter/mesh/gltf/gltf.d.ts +2 -2
  56. package/lib/dist/painter/mesh/gltf/gltf.d.ts.map +1 -1
  57. package/lib/dist/painter/mesh/gltf/gltf.js +6 -4
  58. package/lib/dist/painter/mesh/mesh/mesh.d.ts.map +1 -1
  59. package/lib/dist/painter/mesh/mesh/mesh.js +22 -16
  60. package/lib/dist/painter/node/node.d.ts +1 -1
  61. package/lib/dist/painter/node/node.d.ts.map +1 -1
  62. package/lib/dist/painter/node/node.js +1 -1
  63. package/lib/dist/painter/painter.d.ts +2 -2
  64. package/lib/dist/painter/painter.d.ts.map +1 -1
  65. package/lib/dist/painter/painter.js +2 -2
  66. package/lib/dist/painter/segments/capsule.d.ts +11 -0
  67. package/lib/dist/painter/segments/capsule.d.ts.map +1 -0
  68. package/lib/dist/painter/segments/capsule.js +109 -0
  69. package/lib/dist/painter/segments/segments.d.ts +22 -27
  70. package/lib/dist/painter/segments/segments.d.ts.map +1 -1
  71. package/lib/dist/painter/segments/segments.js +134 -139
  72. package/lib/dist/painter/segments.backup/index.d.ts +2 -0
  73. package/lib/dist/painter/segments.backup/index.d.ts.map +1 -0
  74. package/lib/dist/painter/segments.backup/index.js +2 -0
  75. package/lib/dist/painter/segments.backup/segments.d.ts +95 -0
  76. package/lib/dist/painter/segments.backup/segments.d.ts.map +1 -0
  77. package/lib/dist/painter/segments.backup/segments.frag +22 -0
  78. package/lib/dist/painter/segments.backup/segments.js +223 -0
  79. package/lib/dist/painter/segments.backup/segments.vert +121 -0
  80. package/lib/dist/painter/skybox/skybox.d.ts.map +1 -1
  81. package/lib/dist/painter/skybox/skybox.js +4 -3
  82. package/lib/dist/painter/x-ray/background.d.ts +17 -0
  83. package/lib/dist/painter/x-ray/background.d.ts.map +1 -0
  84. package/lib/dist/painter/x-ray/background.frag +11 -0
  85. package/lib/dist/painter/x-ray/background.js +39 -0
  86. package/lib/dist/painter/x-ray/background.vert +12 -0
  87. package/lib/dist/painter/x-ray/index.d.ts +2 -0
  88. package/lib/dist/painter/x-ray/index.d.ts.map +1 -0
  89. package/lib/dist/painter/x-ray/index.js +2 -0
  90. package/lib/dist/painter/x-ray/x-ray.d.ts +20 -0
  91. package/lib/dist/painter/x-ray/x-ray.d.ts.map +1 -0
  92. package/lib/dist/painter/x-ray/x-ray.js +59 -0
  93. package/lib/dist/parser/gltf/gltf.d.ts +4 -4
  94. package/lib/dist/parser/gltf/gltf.d.ts.map +1 -1
  95. package/lib/dist/parser/gltf/gltf.js +29 -17
  96. package/lib/dist/program/program.js +2 -2
  97. package/lib/dist/sound.d.ts +8 -0
  98. package/lib/dist/sound.d.ts.map +1 -0
  99. package/lib/dist/sound.js +43 -0
  100. package/lib/dist/texture/texture-cube.d.ts +2 -3
  101. package/lib/dist/texture/texture-cube.d.ts.map +1 -1
  102. package/lib/dist/texture/texture-cube.js +14 -19
  103. package/lib/dist/texture/texture2d.d.ts +3 -2
  104. package/lib/dist/texture/texture2d.d.ts.map +1 -1
  105. package/lib/dist/texture/texture2d.js +56 -19
  106. package/lib/dist/utils/action/camera.d.ts.map +1 -1
  107. package/lib/dist/utils/action/camera.js +1 -2
  108. package/lib/dist/utils/framebuffer.d.ts +1 -0
  109. package/lib/dist/utils/framebuffer.d.ts.map +1 -1
  110. package/lib/dist/utils/framebuffer.js +19 -1
  111. package/lib/dist/webgl/texture/texture2d.js +3 -3
  112. package/package.json +1 -1
@@ -3,16 +3,11 @@ import { TgdPainter } from "../painter";
3
3
  import { ArrayNumber2, ArrayNumber4 } from "../../types";
4
4
  import { TgdTexture2D } from "../../texture";
5
5
  import { TgdCamera } from "../../camera";
6
+ import { TgdMaterial } from "../../material";
6
7
  export type TgdPainterSegmentsOptions = {
7
8
  /**
8
- * How round the tip will be?
9
- * - **0** means that the tip is flat.
10
- * - **1** will gives you a triangled tip.
11
- * - **>1** starts to have a semi-circle shape.
12
- *
13
- * **0** is the fastest to render, but you will have
14
- * a bad connection at joints between segments.
15
- *
9
+ * Number of faces around the cylinder.
10
+ * Min is 3.
16
11
  * Default to **3**.
17
12
  */
18
13
  roundness: number;
@@ -20,6 +15,10 @@ export type TgdPainterSegmentsOptions = {
20
15
  * With orthographic camera, this is a value in pixels.
21
16
  */
22
17
  minRadius: number;
18
+ /**
19
+ * Material to apply to the resulting mesh.
20
+ */
21
+ material?: TgdMaterial;
23
22
  };
24
23
  /**
25
24
  * @example
@@ -52,15 +51,11 @@ export declare class TgdPainterSegments extends TgdPainter {
52
51
  radiusMultiplier: number;
53
52
  radiusConstant: number;
54
53
  radiusSwitch: number;
55
- light: number;
56
- shiftZ: number;
57
- contrast: number;
58
- specularIntensity: number;
59
- specularExponent: number;
60
54
  private readonly vao;
61
55
  private readonly prg;
62
56
  private readonly vertexCount;
63
57
  private readonly instanceCount;
58
+ private readonly material;
64
59
  constructor(context: {
65
60
  gl: WebGL2RenderingContext;
66
61
  camera: TgdCamera;
@@ -68,27 +63,27 @@ export declare class TgdPainterSegments extends TgdPainter {
68
63
  makeDataset: () => InstanceDataset;
69
64
  });
70
65
  delete(): void;
71
- paint(_time: number, _delay: number): void;
66
+ paint(time: number, delay: number): void;
72
67
  }
73
68
  type InstanceDataset = TgdDataset;
74
69
  export declare class TgdPainterSegmentsData {
75
70
  private _count;
76
- private readonly attAxyzr;
77
- private readonly attAuv;
78
- private readonly attAinfluence;
79
- private readonly attBxyzr;
80
- private readonly attBuv;
81
- private readonly attBinfluence;
71
+ private readonly attXYZR0;
72
+ private readonly attUV0;
73
+ private readonly attInfluence0;
74
+ private readonly attXYZR1;
75
+ private readonly attUV1;
76
+ private readonly attInfluence1;
82
77
  get count(): number;
83
78
  /**
84
- * @param Axyzr (x,y,z) and radius of point A.
85
- * @param Bxyzr (x,y,z) and radius of point B.
86
- * @param Auv Texture coordinates for point A.
87
- * @param Buv Texture coordinates for point B.
88
- * @param radiusMultiplierInfluenceA If you put 0, the radius won't change regardless to the currently applied radius multiplicator.
89
- * @param radiusMultiplierInfluenceB
79
+ * @param XYZR0 (x,y,z) and radius of point A.
80
+ * @param XYZR1 (x,y,z) and radius of point B.
81
+ * @param UV0 Texture coordinates for point A.
82
+ * @param UV1 Texture coordinates for point B.
83
+ * @param radiusMultiplierInfluence0 If you put 0, the radius won't change regardless to the currently applied radius multiplicator.
84
+ * @param radiusMultiplierInfluence1
90
85
  */
91
- add(Axyzr: ArrayNumber4, Bxyzr: ArrayNumber4, Auv?: ArrayNumber2, Buv?: ArrayNumber2, radiusMultiplierInfluenceA?: number, radiusMultiplierInfluenceB?: number): void;
86
+ add(XYZR0: ArrayNumber4, XYZR1: ArrayNumber4, UV0?: ArrayNumber2, UV1?: ArrayNumber2, radiusMultiplierInfluence0?: number, radiusMultiplierInfluence1?: number): void;
92
87
  readonly makeDataset: () => InstanceDataset;
93
88
  }
94
89
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"segments.d.ts","sourceRoot":"","sources":["../../../src/painter/segments/segments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAKvD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,MAAM,MAAM,yBAAyB,GAAG;IACpC;;;;;;;;;;OAUG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,kBAAmB,SAAQ,UAAU;IAkB1C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE;QACxB,EAAE,EAAE,sBAAsB,CAAA;QAC1B,MAAM,EAAE,SAAS,CAAA;KACpB;IApBE,YAAY,EAAE,YAAY,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAI;IACrB,gBAAgB,SAAI;IACpB,cAAc,SAAI;IAClB,YAAY,SAAI;IAChB,KAAK,SAAI;IACT,MAAM,SAAI;IACV,QAAQ,SAAM;IACd,iBAAiB,SAAM;IACvB,gBAAgB,SAAK;IAE5B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;gBAGf,OAAO,EAAE;QACxB,EAAE,EAAE,sBAAsB,CAAA;QAC1B,MAAM,EAAE,SAAS,CAAA;KACpB,EACD,OAAO,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG;QAC1C,WAAW,EAAE,MAAM,eAAe,CAAA;KACrC;IAsCL,MAAM,IAAI,IAAI;IAId,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CA4C7C;AAED,KAAK,eAAe,GAAG,UAAU,CAAA;AAEjC,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAE7C,IAAI,KAAK,WAER;IAED;;;;;;;OAOG;IACH,GAAG,CACC,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,YAAY,EACnB,GAAG,GAAE,YAAqB,EAC1B,GAAG,GAAE,YAAqB,EAC1B,0BAA0B,SAAI,EAC9B,0BAA0B,SAAI;IAWlC,QAAQ,CAAC,WAAW,QAAO,eAAe,CAqBzC;CACJ"}
1
+ {"version":3,"file":"segments.d.ts","sourceRoot":"","sources":["../../../src/painter/segments/segments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAIvD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAIvC,OAAO,EAAE,WAAW,EAA8B,MAAM,eAAe,CAAA;AAIvE,MAAM,MAAM,yBAAyB,GAAG;IACpC;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAA;CACzB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,kBAAmB,SAAQ,UAAU;IAgB1C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE;QACxB,EAAE,EAAE,sBAAsB,CAAA;QAC1B,MAAM,EAAE,SAAS,CAAA;KACpB;IAlBE,YAAY,EAAE,YAAY,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAI;IACrB,gBAAgB,SAAI;IACpB,cAAc,SAAI;IAClB,YAAY,SAAI;IAEvB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;gBAKf,OAAO,EAAE;QACxB,EAAE,EAAE,sBAAsB,CAAA;QAC1B,MAAM,EAAE,SAAS,CAAA;KACpB,EACD,OAAO,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG;QAC1C,WAAW,EAAE,MAAM,eAAe,CAAA;KACrC;IA0HL,MAAM,IAAI,IAAI;IAMd,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAyB3C;AAED,KAAK,eAAe,GAAG,UAAU,CAAA;AAEjC,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAE7C,IAAI,KAAK,WAER;IAED;;;;;;;OAOG;IACH,GAAG,CACC,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,YAAY,EACnB,GAAG,GAAE,YAAqB,EAC1B,GAAG,GAAE,YAAqB,EAC1B,0BAA0B,SAAI,EAC9B,0BAA0B,SAAI;IAWlC,QAAQ,CAAC,WAAW,QAAO,eAAe,CAqBzC;CACJ"}
@@ -1,13 +1,12 @@
1
- /* eslint-disable unicorn/no-useless-spread */
2
1
  import { TgdDataset } from "./../../dataset/index.js";
3
2
  import { TgdPainter } from "./../painter.js";
4
3
  import { TgdVertexArray } from "./../../vao/index.js";
5
- import FRAG from "./segments.frag";
6
- import VERT from "./segments.vert";
7
4
  import { TgdTexture2D } from "./../../texture/index.js";
8
5
  import { TgdProgram } from "./../../program/index.js";
9
6
  import { tgdCanvasCreatePalette } from "./../../utils/index.js";
10
- import { TgdVec3 } from "./../../math/index.js";
7
+ import { TgdMaterialFaceOrientation } from "./../../material/index.js";
8
+ import { makeCapsule } from "./capsule.js";
9
+ import { TgdShaderFragment, TgdShaderVertex } from "./../../shader/index.js";
11
10
  /**
12
11
  * @example
13
12
  * ```
@@ -30,19 +29,19 @@ import { TgdVec3 } from "./../../math/index.js";
30
29
  * ```
31
30
  */
32
31
  export class TgdPainterSegments extends TgdPainter {
32
+ // private readonly painter: TgdPainter
33
33
  constructor(context, options) {
34
+ var _a, _b, _c, _d;
34
35
  super();
35
36
  this.context = context;
36
- this.minRadius = 0;
37
+ this.minRadius = 1;
37
38
  this.radiusMultiplier = 1;
38
39
  this.radiusConstant = 1;
39
40
  this.radiusSwitch = 0;
40
- this.light = 1;
41
- this.shiftZ = 0;
42
- this.contrast = 0.3;
43
- this.specularIntensity = 0.4;
44
- this.specularExponent = 30;
45
- const { roundness = 3, minRadius = 0, makeDataset } = options;
41
+ const { roundness = 3, minRadius = 1, makeDataset } = options;
42
+ const geometry = makeCapsule(roundness);
43
+ const material = (_a = options.material) !== null && _a !== void 0 ? _a : new TgdMaterialFaceOrientation();
44
+ this.material = material;
46
45
  this.minRadius = minRadius;
47
46
  if (roundness > 127) {
48
47
  throw new Error("[TgdPainterSegments] Max roundness is 127!");
@@ -58,71 +57,140 @@ export class TgdPainterSegments extends TgdPainter {
58
57
  wrapS: "CLAMP_TO_EDGE",
59
58
  wrapT: "CLAMP_TO_EDGE",
60
59
  })
61
- .loadBitmap(tgdCanvasCreatePalette(["#f44", "#4f4", "#44f"]));
60
+ .loadBitmap(tgdCanvasCreatePalette(["#f44", "#ff4", "#4f4", "#4ff", "#44f"]));
61
+ const vert = new TgdShaderVertex({
62
+ uniforms: Object.assign({ uniTransfoMatrix: "mat4", uniModelViewMatrix: "mat4", uniProjectionMatrix: "mat4", uniMinRadius: "float" }, material.uniforms),
63
+ attributes: {
64
+ [geometry.attPosition]: "vec3",
65
+ [geometry.attNormal]: "vec3",
66
+ attTip: "float",
67
+ attXYZR0: "vec4",
68
+ attXYZR1: "vec4",
69
+ attUV0: "vec2",
70
+ attUV1: "vec2",
71
+ },
72
+ varying: material.varyings,
73
+ functions: {
74
+ applyMaterial: [
75
+ "void applyMaterial() {",
76
+ [material.vertexShaderCode],
77
+ "}",
78
+ ],
79
+ getPosition: [
80
+ "vec4 getPosition(vec4 pos) {",
81
+ [(_b = material.vertexShaderCodeForGetPosition) !== null && _b !== void 0 ? _b : "return pos;"],
82
+ "}",
83
+ ],
84
+ },
85
+ mainCode: [
86
+ `vec3 normal = NORMAL;`,
87
+ `vec3 pos = POSITION;`,
88
+ `vec4 xyzr = mix(attXYZR0, attXYZR1, attTip);`,
89
+ `vec3 center = xyzr.xyz;`,
90
+ `float radius = max(`,
91
+ [
92
+ `xyzr.w,`,
93
+ `uniMinRadius * (uniProjectionMatrix * uniModelViewMatrix * vec4(center, 1)).w`,
94
+ ],
95
+ `);`,
96
+ `vec3 dir = attXYZR1.xyz - attXYZR0.xyz;`,
97
+ `float len = length(dir);`,
98
+ `if (len == 0.0) {`,
99
+ [`// Just a sphere`, `pos *= radius;`, `pos += center.xyz;`],
100
+ `} else {`,
101
+ [
102
+ `// Full capsule`,
103
+ `vec3 Z = dir / len;`,
104
+ `vec3 v = abs(Z.z) > 0.7 ? vec3(1,0,0) : vec3(0,0,1);`,
105
+ `vec3 Y = cross(v, Z);`,
106
+ `vec3 X = cross(Y, Z);`,
107
+ `mat3 mat = mat3(X, Y, Z);`,
108
+ `pos *= radius;`,
109
+ `pos = mat * pos + center.xyz;`,
110
+ `normal = mat * normal;`,
111
+ ],
112
+ `}`,
113
+ `gl_Position = uniProjectionMatrix * uniModelViewMatrix * vec4(pos, 1);`,
114
+ "applyMaterial();",
115
+ "varNormal = normal;",
116
+ ],
117
+ }).code;
118
+ const frag = new TgdShaderFragment({
119
+ uniforms: material.uniforms,
120
+ outputs: { FragColor: "vec4" },
121
+ varying: material.varyings,
122
+ functions: {
123
+ applyMaterial: [
124
+ "vec4 applyMaterial() {",
125
+ [material.fragmentShaderCode],
126
+ "}",
127
+ ],
128
+ },
129
+ mainCode: [`FragColor = applyMaterial();`],
130
+ }).code;
62
131
  const prg = new TgdProgram(context.gl, {
63
- vert: VERT,
64
- frag: FRAG,
132
+ vert,
133
+ frag,
65
134
  });
135
+ prg.debug();
66
136
  this.prg = prg;
67
- const { capsule, elements } = makeCapsule(roundness);
137
+ // this.painter = new TgdPainterMesh(context, {
138
+ // geometry,
139
+ // material: new TgdMaterialFaceOrientation(),
140
+ // })
68
141
  const instance = makeDataset();
69
- instance.debug();
70
- this.vao = new TgdVertexArray(context.gl, prg, [capsule, instance], elements);
71
- this.vertexCount = elements.length;
142
+ this.vao = new TgdVertexArray(context.gl, prg, [geometry.dataset, instance], geometry.elements);
143
+ this.vertexCount = (_d = (_c = geometry.elements) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0;
72
144
  this.instanceCount = instance.count;
73
145
  }
74
146
  delete() {
75
147
  this.vao.delete();
148
+ this.prg.delete();
149
+ // this.painter.delete()
76
150
  }
77
- paint(_time, _delay) {
78
- const { context, prg, vao, colorTexture, vertexCount, instanceCount, light, radiusMultiplier, radiusConstant, radiusSwitch, shiftZ, contrast, specularIntensity, specularExponent, } = this;
151
+ paint(time, delay) {
152
+ // this.painter.paint(_time, _delay)
153
+ const { context, prg, vao, vertexCount, instanceCount, material } = this;
79
154
  const { gl, camera } = context;
80
155
  gl.disable(gl.DITHER);
81
156
  prg.use();
82
- const minRadius = (this.minRadius * camera.spaceHeightAtTarget) /
83
- (camera.zoom * camera.screenHeight);
84
- prg.uniform1f("uniMinRadius", minRadius);
85
- prg.uniform1f("uniLight", light);
86
- prg.uniform1f("uniShiftZ", shiftZ);
87
- prg.uniform1f("uniRadiusMultiplier", radiusMultiplier);
88
- prg.uniform1f("uniRadiusConstant", radiusConstant);
89
- prg.uniform1f("uniRadiusSwitch", radiusSwitch);
90
- prg.uniform1f("uniContrast", contrast);
91
- prg.uniform1f("uniSpecularIntensity", specularIntensity);
92
- prg.uniform1f("uniSpecularExponent", specularExponent);
93
- colorTexture.activate(0, prg, "uniTexture");
157
+ this.material.setUniforms(prg, time, delay);
158
+ prg.uniform1f("uniMinRadius", (this.minRadius * 2) / gl.drawingBufferHeight);
94
159
  prg.uniformMatrix4fv("uniModelViewMatrix", camera.matrixModelView);
95
160
  prg.uniformMatrix4fv("uniProjectionMatrix", camera.matrixProjection);
96
- vao.bind();
97
- gl.drawElementsInstanced(gl.TRIANGLES, vertexCount, gl.UNSIGNED_BYTE, 0, instanceCount);
161
+ material.applyState(gl, () => {
162
+ vao.bind();
163
+ gl.drawElementsInstanced(gl.TRIANGLES, vertexCount, gl.UNSIGNED_SHORT, 0, instanceCount);
164
+ vao.unbind();
165
+ });
98
166
  }
99
167
  }
100
168
  export class TgdPainterSegmentsData {
101
169
  constructor() {
102
170
  this._count = 0;
103
- this.attAxyzr = [];
104
- this.attAuv = [];
105
- this.attAinfluence = [];
106
- this.attBxyzr = [];
107
- this.attBuv = [];
108
- this.attBinfluence = [];
171
+ this.attXYZR0 = [];
172
+ this.attUV0 = [];
173
+ this.attInfluence0 = [];
174
+ this.attXYZR1 = [];
175
+ this.attUV1 = [];
176
+ this.attInfluence1 = [];
109
177
  this.makeDataset = () => {
110
178
  const dataset = new TgdDataset({
111
- attAxyzr: "vec4",
112
- attAuv: "vec2",
113
- attAinfluence: "float",
114
- attBxyzr: "vec4",
115
- attBuv: "vec2",
116
- attBinfluence: "float",
179
+ attXYZR0: "vec4",
180
+ attUV0: "vec2",
181
+ attInfluence0: "float",
182
+ attXYZR1: "vec4",
183
+ attUV1: "vec2",
184
+ attInfluence1: "float",
117
185
  }, {
118
186
  divisor: 1,
119
187
  });
120
- dataset.set("attAxyzr", new Float32Array(this.attAxyzr));
121
- dataset.set("attAuv", new Float32Array(this.attAuv));
122
- dataset.set("attAinfluence", new Float32Array(this.attAinfluence));
123
- dataset.set("attBxyzr", new Float32Array(this.attBxyzr));
124
- dataset.set("attBuv", new Float32Array(this.attBuv));
125
- dataset.set("attBinfluence", new Float32Array(this.attBinfluence));
188
+ dataset.set("attXYZR0", new Float32Array(this.attXYZR0));
189
+ dataset.set("attUV0", new Float32Array(this.attUV0));
190
+ dataset.set("attInfluence0", new Float32Array(this.attInfluence0));
191
+ dataset.set("attXYZR1", new Float32Array(this.attXYZR1));
192
+ dataset.set("attUV1", new Float32Array(this.attUV1));
193
+ dataset.set("attInfluence1", new Float32Array(this.attInfluence1));
126
194
  return dataset;
127
195
  };
128
196
  }
@@ -130,94 +198,21 @@ export class TgdPainterSegmentsData {
130
198
  return this._count;
131
199
  }
132
200
  /**
133
- * @param Axyzr (x,y,z) and radius of point A.
134
- * @param Bxyzr (x,y,z) and radius of point B.
135
- * @param Auv Texture coordinates for point A.
136
- * @param Buv Texture coordinates for point B.
137
- * @param radiusMultiplierInfluenceA If you put 0, the radius won't change regardless to the currently applied radius multiplicator.
138
- * @param radiusMultiplierInfluenceB
201
+ * @param XYZR0 (x,y,z) and radius of point A.
202
+ * @param XYZR1 (x,y,z) and radius of point B.
203
+ * @param UV0 Texture coordinates for point A.
204
+ * @param UV1 Texture coordinates for point B.
205
+ * @param radiusMultiplierInfluence0 If you put 0, the radius won't change regardless to the currently applied radius multiplicator.
206
+ * @param radiusMultiplierInfluence1
139
207
  */
140
- add(Axyzr, Bxyzr, Auv = [0, 0], Buv = [0, 0], radiusMultiplierInfluenceA = 1, radiusMultiplierInfluenceB = 1) {
141
- this.attAxyzr.push(...Axyzr);
142
- this.attAuv.push(...Auv);
143
- this.attAinfluence.push(radiusMultiplierInfluenceA);
144
- this.attBxyzr.push(...Bxyzr);
145
- this.attBuv.push(...Buv);
146
- this.attBinfluence.push(radiusMultiplierInfluenceB);
208
+ add(XYZR0, XYZR1, UV0 = [0, 0], UV1 = [0, 0], radiusMultiplierInfluence0 = 1, radiusMultiplierInfluence1 = 1) {
209
+ this.attXYZR0.push(...XYZR0);
210
+ this.attUV0.push(...UV0);
211
+ this.attInfluence0.push(radiusMultiplierInfluence0);
212
+ this.attXYZR1.push(...XYZR1);
213
+ this.attUV1.push(...UV1);
214
+ this.attInfluence1.push(radiusMultiplierInfluence1);
147
215
  this._count++;
148
216
  }
149
217
  }
150
- /**
151
- * The capsule is a 2D shape (x,y) that will be used
152
- * as a pattern for the segment.
153
- * The segment will expand this template along Y axis.
154
- * The tip pointing toward +Y is called A.
155
- * The tip pointing toward -Y is called B.
156
- * The z coodinates indicates to which tip the point
157
- * is attached: 0 for A and 1 for B.
158
- */
159
- function makeCapsule(roundness) {
160
- // prettier-ignore
161
- const offset = [
162
- ...[0, 0, 0], // 0
163
- ...[1, 0, 0], // 1
164
- ...[-1, 0, 0], // 2
165
- ...[0, 0, 1], // 3
166
- ...[1, 0, 1], // 4
167
- ...[-1, 0, 1], // 5
168
- ];
169
- // prettier-ignore
170
- const normal = [
171
- ...[0, 0, 1], // 0
172
- ...[1, 0, 0], // 1
173
- ...[-1, 0, 0], // 2
174
- ...[0, 0, 1], // 3
175
- ...[1, 0, 0], // 4
176
- ...[-1, 0, 0], // 5
177
- ];
178
- // prettier-ignore
179
- const elements = [
180
- 0, 3, 1,
181
- 3, 4, 1,
182
- 0, 2, 5,
183
- 3, 0, 5,
184
- ];
185
- if (roundness > 0) {
186
- let oldIndexA = 1;
187
- let oldIndexB = 4;
188
- let elementIndex = 6;
189
- // Temporary variable to prevent multiple new() calls.
190
- const n = new TgdVec3();
191
- for (let roundnessStep = 0; roundnessStep < roundness; roundnessStep++) {
192
- const ang = (Math.PI * (roundnessStep + 1)) / (roundness + 1);
193
- const x = Math.cos(ang);
194
- const y = Math.sin(ang);
195
- // We set z to 0 because it's related to tip A.
196
- offset.push(x, y, 0);
197
- n.from([x, 0, 1 - Math.abs(x)]); //.normalize()
198
- normal.push(n.x, n.y, n.z);
199
- elements.push(0, oldIndexA, elementIndex);
200
- oldIndexA = elementIndex;
201
- elementIndex++;
202
- // We set z to 1 because it's related to tip B.
203
- offset.push(x, -y, 1);
204
- n.from([x, 0, 1 - Math.abs(x)]).normalize();
205
- normal.push(n.x, n.y, n.z);
206
- elements.push(3, elementIndex, oldIndexB);
207
- oldIndexB = elementIndex;
208
- elementIndex++;
209
- }
210
- elements.push(0, oldIndexA, 2, 3, 5, oldIndexB);
211
- }
212
- const capsule = new TgdDataset({
213
- attOffset: "vec3",
214
- attNormal: "vec3",
215
- });
216
- capsule.set("attOffset", new Float32Array(offset));
217
- capsule.set("attNormal", new Float32Array(normal));
218
- return {
219
- capsule,
220
- elements: new Uint8Array(elements),
221
- };
222
- }
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGFpbnRlci9zZWdtZW50cy9zZWdtZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4Q0FBOEM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUV6QyxPQUFPLElBQUksTUFBTSxpQkFBaUIsQ0FBQTtBQUNsQyxPQUFPLElBQUksTUFBTSxpQkFBaUIsQ0FBQTtBQUNsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDekMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRW5ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFxQm5DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxVQUFVO0lBaUI5QyxZQUN1QixPQUdsQixFQUNELE9BRUM7UUFFRCxLQUFLLEVBQUUsQ0FBQTtRQVJZLFlBQU8sR0FBUCxPQUFPLENBR3pCO1FBbkJFLGNBQVMsR0FBVyxDQUFDLENBQUE7UUFDckIscUJBQWdCLEdBQUcsQ0FBQyxDQUFBO1FBQ3BCLG1CQUFjLEdBQUcsQ0FBQyxDQUFBO1FBQ2xCLGlCQUFZLEdBQUcsQ0FBQyxDQUFBO1FBQ2hCLFVBQUssR0FBRyxDQUFDLENBQUE7UUFDVCxXQUFNLEdBQUcsQ0FBQyxDQUFBO1FBQ1YsYUFBUSxHQUFHLEdBQUcsQ0FBQTtRQUNkLHNCQUFpQixHQUFHLEdBQUcsQ0FBQTtRQUN2QixxQkFBZ0IsR0FBRyxFQUFFLENBQUE7UUFpQnhCLE1BQU0sRUFBRSxTQUFTLEdB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
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGFpbnRlci9zZWdtZW50cy9zZWdtZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUVqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBR3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFLbkQsT0FBTyxFQUFlLDBCQUEwQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQW1CaEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFVBQVU7SUFhOUMsdUNBQXVDO0lBRXZDLFlBQ3VCLE9BR2xCLEVBQ0QsT0FFQzs7UUFFRCxLQUFLLEVBQUUsQ0FBQTtRQVJZLFlBQU8sR0FBUCxPQUFPLENBR3pCO1FBakJFLGNBQVMsR0FBVyxDQUFDLENBQUE7UUFDckIscUJBQWdCLEdBQUcsQ0FBQyxDQUFBO1FBQ3BCLG1CQUFjLEdBQUcsQ0FBQyxDQUFBO1FBQ2xCLGlCQUFZLEdBQUcsQ0FBQyxDQUFBO1FBb0JuQixNQUFNLEVBQUUsU0FBUyxHQUFHLENBQUMsRUFBRSxTQUFTLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUM3RCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENB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
@@ -0,0 +1,2 @@
1
+ export * from "./segments";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/painter/segments.backup/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from "./segments.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGFpbnRlci9zZWdtZW50cy5iYWNrdXAvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxZQUFZLENBQUEifQ==
@@ -0,0 +1,95 @@
1
+ import { TgdDataset } from "../../dataset";
2
+ import { TgdPainter } from "../painter";
3
+ import { ArrayNumber2, ArrayNumber4 } from "../../types";
4
+ import { TgdTexture2D } from "../../texture";
5
+ import { TgdCamera } from "../../camera";
6
+ export type TgdPainterSegmentsOptions = {
7
+ /**
8
+ * How round the tip will be?
9
+ * - **0** means that the tip is flat.
10
+ * - **1** will gives you a triangled tip.
11
+ * - **>1** starts to have a semi-circle shape.
12
+ *
13
+ * **0** is the fastest to render, but you will have
14
+ * a bad connection at joints between segments.
15
+ *
16
+ * Default to **3**.
17
+ */
18
+ roundness: number;
19
+ /**
20
+ * With orthographic camera, this is a value in pixels.
21
+ */
22
+ minRadius: number;
23
+ };
24
+ /**
25
+ * @example
26
+ * ```
27
+ * const factory = new TgdPainterSegmentsData()
28
+ * factory.add(
29
+ * [0, 0, 0, .2],
30
+ * [1, 0, 0, .1],
31
+ * )
32
+ * factory.add(
33
+ * [0, 0, 0, .2],
34
+ * [0, 1, 0, .1],
35
+ * )
36
+ * factory.add(
37
+ * [0, 0, 0, .2],
38
+ * [0, 0, 1, .1],
39
+ * )
40
+ * const segments = new TgdPainterSegments(
41
+ * segment, factory
42
+ * )
43
+ * ```
44
+ */
45
+ export declare class TgdPainterSegments extends TgdPainter {
46
+ protected readonly context: {
47
+ gl: WebGL2RenderingContext;
48
+ camera: TgdCamera;
49
+ };
50
+ colorTexture: TgdTexture2D;
51
+ minRadius: number;
52
+ radiusMultiplier: number;
53
+ radiusConstant: number;
54
+ radiusSwitch: number;
55
+ light: number;
56
+ shiftZ: number;
57
+ contrast: number;
58
+ specularIntensity: number;
59
+ specularExponent: number;
60
+ private readonly vao;
61
+ private readonly prg;
62
+ private readonly vertexCount;
63
+ private readonly instanceCount;
64
+ constructor(context: {
65
+ gl: WebGL2RenderingContext;
66
+ camera: TgdCamera;
67
+ }, options: Partial<TgdPainterSegmentsOptions> & {
68
+ makeDataset: () => InstanceDataset;
69
+ });
70
+ delete(): void;
71
+ paint(_time: number, _delay: number): void;
72
+ }
73
+ type InstanceDataset = TgdDataset;
74
+ export declare class TgdPainterSegmentsData {
75
+ private _count;
76
+ private readonly attAxyzr;
77
+ private readonly attAuv;
78
+ private readonly attAinfluence;
79
+ private readonly attBxyzr;
80
+ private readonly attBuv;
81
+ private readonly attBinfluence;
82
+ get count(): number;
83
+ /**
84
+ * @param Axyzr (x,y,z) and radius of point A.
85
+ * @param Bxyzr (x,y,z) and radius of point B.
86
+ * @param Auv Texture coordinates for point A.
87
+ * @param Buv Texture coordinates for point B.
88
+ * @param radiusMultiplierInfluenceA If you put 0, the radius won't change regardless to the currently applied radius multiplicator.
89
+ * @param radiusMultiplierInfluenceB
90
+ */
91
+ add(Axyzr: ArrayNumber4, Bxyzr: ArrayNumber4, Auv?: ArrayNumber2, Buv?: ArrayNumber2, radiusMultiplierInfluenceA?: number, radiusMultiplierInfluenceB?: number): void;
92
+ readonly makeDataset: () => InstanceDataset;
93
+ }
94
+ export {};
95
+ //# sourceMappingURL=segments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segments.d.ts","sourceRoot":"","sources":["../../../src/painter/segments.backup/segments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAKvD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,MAAM,MAAM,yBAAyB,GAAG;IACpC;;;;;;;;;;OAUG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,kBAAmB,SAAQ,UAAU;IAkB1C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE;QACxB,EAAE,EAAE,sBAAsB,CAAA;QAC1B,MAAM,EAAE,SAAS,CAAA;KACpB;IApBE,YAAY,EAAE,YAAY,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAI;IACrB,gBAAgB,SAAI;IACpB,cAAc,SAAI;IAClB,YAAY,SAAI;IAChB,KAAK,SAAI;IACT,MAAM,SAAI;IACV,QAAQ,SAAM;IACd,iBAAiB,SAAM;IACvB,gBAAgB,SAAK;IAE5B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;gBAGf,OAAO,EAAE;QACxB,EAAE,EAAE,sBAAsB,CAAA;QAC1B,MAAM,EAAE,SAAS,CAAA;KACpB,EACD,OAAO,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG;QAC1C,WAAW,EAAE,MAAM,eAAe,CAAA;KACrC;IAsCL,MAAM,IAAI,IAAI;IAId,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CA4C7C;AAED,KAAK,eAAe,GAAG,UAAU,CAAA;AAEjC,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAE7C,IAAI,KAAK,WAER;IAED;;;;;;;OAOG;IACH,GAAG,CACC,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,YAAY,EACnB,GAAG,GAAE,YAAqB,EAC1B,GAAG,GAAE,YAAqB,EAC1B,0BAA0B,SAAI,EAC9B,0BAA0B,SAAI;IAWlC,QAAQ,CAAC,WAAW,QAAO,eAAe,CAqBzC;CACJ"}
@@ -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
+ }