@tolokoban/tgd 2.0.91 → 2.0.92

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.
@@ -1 +1 @@
1
- {"version":3,"file":"points-cloud-morphing.d.ts","sourceRoot":"","sources":["../../../src/painter/points-cloud/points-cloud-morphing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAG9C,OAAO,EACH,KAAK,WAAW,EAGnB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,UAAU,iCAAiC;IACvC;;;OAGG;IACH,KAAK,EAAE,YAAY,CAAA;IACnB;;;OAGG;IACH,EAAE,CAAC,EAAE,YAAY,CAAA;CACpB;AAED,MAAM,WAAW,oCAAoC;IACjD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE;QACF,iCAAiC;QACjC,iCAAiC;KACpC,EAAE,CAAA;IACH;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,6BAA8B,SAAQ,UAAU;aAuErC,OAAO,EAAE,UAAU;IAtEvC;;OAEG;IACH,MAAM,CAAC,cAAc,CACjB,OAAO,GAAE,OAAO,CAAC;QACb,gBAAgB,EAAE,MAAM,CAAA;QACxB,iBAAiB,EAAE,MAAM,CAAA;QACzB,eAAe,EAAE,MAAM,CAAA;QACvB,eAAe,EAAE,MAAM,CAAA;QACvB,KAAK,EAAE,MAAM,CAAA;KAChB,CAAM,GACR,WAAW;IAsCd;;OAEG;IACI,GAAG,SAAI;IACP,OAAO,EAAE,YAAY,CAAA;IACrB,gBAAgB,SAAI;IACpB,eAAe,SAAI;IAEnB,gBAAgB,SAAK;IACrB,iBAAiB,SAAO;IACxB,eAAe,SAAM;IACrB,eAAe,SAAI;IACnB,KAAK,SAAI;IAEhB,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;gBAGb,OAAO,EAAE,UAAU,EACnC,OAAO,EAAE,oCAAoC;IA0CjD,MAAM,IAAI,IAAI;IAMd,KAAK,IAAI,IAAI;IA6Bb,OAAO,CAAC,aAAa;IAgCrB,IAAI,KAAK,WAGR;IAED,OAAO,KAAK,GAAG,GAGd;IAED,OAAO,CAAC,aAAa;CAoExB"}
1
+ {"version":3,"file":"points-cloud-morphing.d.ts","sourceRoot":"","sources":["../../../src/painter/points-cloud/points-cloud-morphing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAG9C,OAAO,EACH,KAAK,WAAW,EAGnB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,UAAU,iCAAiC;IACvC;;;OAGG;IACH,KAAK,EAAE,YAAY,CAAA;IACnB;;;OAGG;IACH,EAAE,CAAC,EAAE,YAAY,CAAA;CACpB;AAED,MAAM,WAAW,oCAAoC;IACjD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE;QACF,iCAAiC;QACjC,iCAAiC;KACpC,EAAE,CAAA;IACH;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,6BAA8B,SAAQ,UAAU;aAuErC,OAAO,EAAE,UAAU;IAtEvC;;OAEG;IACH,MAAM,CAAC,cAAc,CACjB,OAAO,GAAE,OAAO,CAAC;QACb,gBAAgB,EAAE,MAAM,CAAA;QACxB,iBAAiB,EAAE,MAAM,CAAA;QACzB,eAAe,EAAE,MAAM,CAAA;QACvB,eAAe,EAAE,MAAM,CAAA;QACvB,KAAK,EAAE,MAAM,CAAA;KAChB,CAAM,GACR,WAAW;IAsCd;;OAEG;IACI,GAAG,SAAI;IACP,OAAO,EAAE,YAAY,CAAA;IACrB,gBAAgB,SAAI;IACpB,eAAe,SAAI;IAEnB,gBAAgB,SAAK;IACrB,iBAAiB,SAAO;IACxB,eAAe,SAAM;IACrB,eAAe,SAAI;IACnB,KAAK,SAAI;IAEhB,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;gBAGb,OAAO,EAAE,UAAU,EACnC,OAAO,EAAE,oCAAoC;IA0CjD,MAAM,IAAI,IAAI;IAMd,KAAK,IAAI,IAAI;IA6Bb,OAAO,CAAC,aAAa;IAgCrB,IAAI,KAAK,WAGR;IAED,OAAO,KAAK,GAAG,GAGd;IAED,OAAO,CAAC,aAAa;CAsExB"}
@@ -99,7 +99,7 @@ export class TgdPainterPointsCloudMorphing extends TgdPainter {
99
99
  program.uniform1f("uniMix", this.mix);
100
100
  program.uniform1f("uniRadiusMultiplier", radiusMultiplier);
101
101
  program.uniform1f("uniMinSizeInPixels", minSizeInPixels);
102
- program.uniform1f("uniHalfScreenHeightInPixels", context.height * 0.5);
102
+ program.uniform1f("uniScreenHeightInPixels", context.height);
103
103
  program.uniform1f("uniSpecularExponent", this.specularExponent);
104
104
  program.uniform1f("uniSpecularIntensity", this.specularIntensity);
105
105
  program.uniform1f("uniShadowIntensity", this.shadowIntensity);
@@ -148,7 +148,7 @@ export class TgdPainterPointsCloudMorphing extends TgdPainter {
148
148
  uniMix: "float",
149
149
  uniMinSizeInPixels: "float",
150
150
  uniRadiusMultiplier: "float",
151
- uniHalfScreenHeightInPixels: "float",
151
+ uniScreenHeightInPixels: "float",
152
152
  uniModelViewMatrix: "mat4",
153
153
  uniProjectionMatrix: "mat4",
154
154
  },
@@ -166,11 +166,13 @@ export class TgdPainterPointsCloudMorphing extends TgdPainter {
166
166
  "vec2 attUV = mix(attUV_A, attUV_B, uniMix);",
167
167
  "varUV = attUV;",
168
168
  "float radius = attPoint.w;",
169
- "vec4 point = vec4(attPoint.xyz, 1.0);",
170
- "gl_Position = uniProjectionMatrix * uniModelViewMatrix * point;",
169
+ "vec4 point = uniModelViewMatrix * vec4(attPoint.xyz, 1.0);",
170
+ "vec4 shift = point + vec4(0, uniRadiusMultiplier * radius, 0, 0);",
171
+ "gl_Position = uniProjectionMatrix * point;",
172
+ "vec4 screenShift = uniProjectionMatrix * shift;",
171
173
  "gl_PointSize = max(",
172
174
  " uniMinSizeInPixels,",
173
- " uniRadiusMultiplier * radius * uniHalfScreenHeightInPixels / gl_Position.w",
175
+ " abs(screenShift.y - gl_Position.y) * uniScreenHeightInPixels / gl_Position.w",
174
176
  ");",
175
177
  ],
176
178
  }).code;
@@ -211,4 +213,4 @@ export class TgdPainterPointsCloudMorphing extends TgdPainter {
211
213
  return program;
212
214
  }
213
215
  }
214
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRzLWNsb3VkLW1vcnBoaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhaW50ZXIvcG9pbnRzLWNsb3VkL3BvaW50cy1jbG91ZC1tb3JwaGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsZUFBZSxHQUNsQixNQUFNLGFBQWEsQ0FBQTtBQUNwQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFrRnZDLE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxVQUFVO0lBQ3pEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FDakIsVUFNSyxFQUFFO1FBRVAsTUFBTSxFQUNGLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGVBQWUsRUFDZixLQUFLLEdBQ1IsR0FBRyxPQUFPLENBQUE7UUFDWCxNQUFNLEdBQUcsR0FDTCxPQUFPLGdCQUFnQixLQUFLLFFBQVE7WUFDaEMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFBO1FBQy9CLE1BQU0sR0FBRyxHQUNMLE9BQU8saUJBQWlCLEtBQUssUUFBUTtZQUNqQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsc0JBQXNCLENBQUE7UUFDaEMsTUFBTSxHQUFHLEdBQ0wsT0FBTyxlQUFlLEtBQUssUUFBUTtZQUMvQixDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFDLG9CQUFvQixDQUFBO1FBQzlCLE1BQU0sR0FBRyxHQUNMLE9BQU8sZUFBZSxLQUFLLFFBQVE7WUFDL0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQTtRQUM5QixNQUFNLENBQUMsR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtRQUNuRSxPQUFPO1lBQ0gsaURBQWlEO1lBQ2pELHdDQUF3QztZQUN4Qyx5QkFBeUI7WUFDekIsNkNBQTZDO1lBQzdDLGlDQUFpQyxHQUFHLFlBQVksR0FBRyxhQUFhLEdBQUcsSUFBSTtZQUN2RSxpQkFBaUI7Z0JBQ2IsQ0FBQyxDQUFDLHlCQUF5QixHQUFHLE9BQU8sR0FBRyxHQUFHO2dCQUMzQyxDQUFDLENBQUMsaUJBQWlCO1lBQ3ZCLG9DQUFvQyxDQUFDLGtDQUFrQztTQUMxRSxDQUFBO0lBQ0wsQ0FBQztJQXNCRCxZQUNvQixPQUFtQixFQUNuQyxPQUE2Qzs7UUFFN0MsS0FBSyxFQUFFLENBQUE7UUFIUyxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBckJ2Qzs7V0FFRztRQUNJLFFBQUcsR0FBRyxDQUFDLENBQUE7UUFFUCxxQkFBZ0IsR0FBRyxDQUFDLENBQUE7UUFDcEIsb0JBQWUsR0FBRyxDQUFDLENBQUE7UUFFbkIscUJBQWdCLEdBQUcsRUFBRSxDQUFBO1FBQ3JCLHNCQUFpQixHQUFHLElBQUksQ0FBQTtRQUN4QixvQkFBZSxHQUFHLEdBQUcsQ0FBQTtRQUNyQixvQkFBZSxHQUFHLENBQUMsQ0FBQTtRQUNuQixVQUFLLEdBQUcsQ0FBQyxDQUFBO1FBR0MsYUFBUSxHQUFpQixFQUFFLENBQUE7UUFVeEMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFBLE9BQU8sQ0FBQyxJQUFJLG1DQUFJLElBQUksQ0FBQyxJQUFJLENBQUE7UUFDckMsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFBLE9BQU8sQ0FBQyxHQUFHLG1DQUFJLENBQUMsQ0FBQTtRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBQSxPQUFPLENBQUMsZ0JBQWdCLG1DQUFJLENBQUMsQ0FBQTtRQUNyRCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQUEsT0FBTyxDQUFDLGVBQWUsbUNBQUksQ0FBQyxDQUFBO1FBQ25ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFBLE9BQU8sQ0FBQyxnQkFBZ0IsbUNBQUksRUFBRSxDQUFBO1FBQ3RELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFBLE9BQU8sQ0FBQyxpQkFBaUIsbUNBQUksSUFBSSxDQUFBO1FBQzFELElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBQSxPQUFPLENBQUMsZUFBZSxtQ0FBSSxHQUFHLENBQUE7UUFDckQsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFBLE9BQU8sQ0FBQyxlQUFlLG1DQUFJLENBQUMsQ0FBQTtRQUNuRCxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQUEsT0FBTyxDQUFDLEtBQUssbUNBQUksQ0FBQyxDQUFBO1FBQy9CLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQTtZQUM5QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFBO1FBQ3JDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQy9DLGlDQUFpQyxDQUM3QixHQUFHLEVBQ0gsb0JBQW9CLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FDM0MsQ0FDSixDQUFBO1lBQ0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQTtRQUNwQyxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksS0FBSyxDQUNYLHlEQUF5RCxDQUM1RCxDQUFBO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNsRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ25ELElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQzVDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1lBQy9DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1lBQy9DLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUN0QyxPQUFPLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEQsUUFBUTtnQkFDUixRQUFRO2FBQ1gsQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksSUFBSSxDQUFDLG9CQUFvQjtZQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUE7UUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ3JCLENBQUM7SUFFRCxLQUFLO1FBQ0QsTUFBTSxFQUNGLE9BQU8sRUFDUCxPQUFPLEVBQ1AsR0FBRyxFQUNILE9BQU8sRUFDUCxLQUFLLEVBQ0wsZ0JBQWdCLEVBQ2hCLGVBQWUsR0FDbEIsR0FBRyxJQUFJLENBQUE7UUFDUixNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUM5QixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDYixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDMUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3JDLE9BQU8sQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtRQUMxRCxPQUFPLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBQ3hELE9BQU8sQ0FBQyxTQUFTLENBQUMsNkJBQTZCLEVBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQTtRQUN0RSxPQUFPLENBQUMsU0FBUyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQy9ELE9BQU8sQ0FBQyxTQUFTLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDakUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDN0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDN0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3pDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDdEUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQ3hFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNWLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDbEMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ2hCLENBQUM7SUFFTyxhQUFhLENBQ2pCLElBQXVDLEVBQ3ZDLE1BQWM7O1FBRWQsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQTtRQUN0QixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ1gsZ0ZBQWdGLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FDakcsQ0FBQTtRQUNMLENBQUM7UUFDRCxNQUFNLEVBQUUsR0FBRyxNQUFBLElBQUksQ0FBQyxFQUFFLG1DQUFJLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDeEQsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUNYLDZFQUE2RSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQzNGLENBQUE7UUFDTCxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FDWCw4RkFBOEYsS0FBSyxDQUFDLE1BQU0sbUJBQW1CLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FDM0ksQ0FBQTtRQUNMLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxZQUFZLE1BQU0sRUFBRSxDQUFBO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLFNBQVMsTUFBTSxFQUFFLENBQUE7UUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUM7WUFDM0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNO1lBQ2xCLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTTtTQUNsQixDQUFDLENBQUE7UUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUN0QixPQUFPLE9BQU8sQ0FBQTtJQUNsQixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7UUFDM0IsT0FBTyxLQUFLLENBQUE7SUFDaEIsQ0FBQztJQUVELElBQVksR0FBRztRQUNYLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFBO1FBQ3ZCLE9BQU8sR0FBRyxDQUFBO0lBQ2QsQ0FBQztJQUVPLGFBQWEsQ0FBQyxNQUFvQjtRQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQztZQUM3QixRQUFRLEVBQUU7Z0JBQ04sTUFBTSxFQUFFLE9BQU87Z0JBQ2Ysa0JBQWtCLEVBQUUsT0FBTztnQkFDM0IsbUJBQW1CLEVBQUUsT0FBTztnQkFDNUIsMkJBQTJCLEVBQUUsT0FBTztnQkFDcEMsa0JBQWtCLEVBQUUsTUFBTTtnQkFDMUIsbUJBQW1CLEVBQUUsTUFBTTthQUM5QjtZQUNELFVBQVUsRUFBRTtnQkFDUixVQUFVLEVBQUUsTUFBTTtnQkFDbEIsT0FBTyxFQUFFLE1BQU07Z0JBQ2YsVUFBVSxFQUFFLE1BQU07Z0JBQ2xCLE9BQU8sRUFBRSxNQUFNO2FBQ2xCO1lBQ0QsT0FBTyxFQUFFO2dCQUNMLEtBQUssRUFBRSxNQUFNO2FBQ2hCO1lBQ0QsUUFBUSxFQUFFO2dCQUNOLHNEQUFzRDtnQkFDdEQsNkNBQTZDO2dCQUM3QyxnQkFBZ0I7Z0JBQ2hCLDRCQUE0QjtnQkFDNUIsdUNBQXVDO2dCQUN2QyxpRUFBaUU7Z0JBQ2pFLHFCQUFxQjtnQkFDckIsdUJBQXVCO2dCQUN2Qiw4RUFBOEU7Z0JBQzlFLElBQUk7YUFDUDtTQUNKLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDUCxNQUFNLElBQUksR0FBRyxJQUFJLGlCQUFpQixDQUFDO1lBQy9CLFFBQVEsRUFBRTtnQkFDTixVQUFVLEVBQUUsV0FBVztnQkFDdkIsbUJBQW1CLEVBQUUsT0FBTztnQkFDNUIsb0JBQW9CLEVBQUUsT0FBTztnQkFDN0Isa0JBQWtCLEVBQUUsT0FBTztnQkFDM0Isa0JBQWtCLEVBQUUsT0FBTztnQkFDM0IsUUFBUSxFQUFFLE9BQU87YUFDcEI7WUFDRCxPQUFPLEVBQUU7Z0JBQ0wsS0FBSyxFQUFFLE1BQU07YUFDaEI7WUFDRCxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFO1lBQzlCLFNBQVMsRUFBRTtnQkFDUCxNQUFNLEVBQUU7b0JBQ0osMkJBQTJCO29CQUMzQixNQUFNLGFBQU4sTUFBTSxjQUFOLE1BQU0sR0FBSTt3QkFDTixpREFBaUQ7d0JBQ2pELHdDQUF3Qzt3QkFDeEMseUJBQXlCO3dCQUN6Qiw2Q0FBNkM7d0JBQzdDLDJHQUEyRzt3QkFDM0csb0VBQW9FO3dCQUNwRSwyRUFBMkU7cUJBQzlFO29CQUNELEdBQUc7aUJBQ047YUFDSjtZQUNELFFBQVEsRUFBRTtnQkFDTiwwQ0FBMEM7Z0JBQzFDLDRCQUE0QjthQUMvQjtTQUNKLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDUCxNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQy9ELE9BQU8sT0FBTyxDQUFBO0lBQ2xCLENBQUM7Q0FDSiJ9
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRzLWNsb3VkLW1vcnBoaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhaW50ZXIvcG9pbnRzLWNsb3VkL3BvaW50cy1jbG91ZC1tb3JwaGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsZUFBZSxHQUNsQixNQUFNLGFBQWEsQ0FBQTtBQUNwQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFrRnZDLE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxVQUFVO0lBQ3pEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FDakIsVUFNSyxFQUFFO1FBRVAsTUFBTSxFQUNGLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGVBQWUsRUFDZixLQUFLLEdBQ1IsR0FBRyxPQUFPLENBQUE7UUFDWCxNQUFNLEdBQUcsR0FDTCxPQUFPLGdCQUFnQixLQUFLLFFBQVE7WUFDaEMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFBO1FBQy9CLE1BQU0sR0FBRyxHQUNMLE9BQU8saUJBQWlCLEtBQUssUUFBUTtZQUNqQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsc0JB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
@@ -1 +1 @@
1
- {"version":3,"file":"points-cloud.d.ts","sourceRoot":"","sources":["../../../src/painter/points-cloud/points-cloud.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAIvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGzC,OAAO,EAAE,WAAW,EAAsC,MAAM,aAAa,CAAA;AAE7E,MAAM,WAAW,4BAA4B;IACzC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,SAAS,EAAE,YAAY,CAAA;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,qBAAsB,SAAQ,UAAU;aAqE7B,OAAO,EAAE,UAAU;IApEvC;;OAEG;IACH,MAAM,CAAC,cAAc,CACjB,OAAO,GAAE,OAAO,CAAC;QACb,gBAAgB,EAAE,MAAM,CAAA;QACxB,iBAAiB,EAAE,MAAM,CAAA;QACzB,eAAe,EAAE,MAAM,CAAA;QACvB,eAAe,EAAE,MAAM,CAAA;QACvB,KAAK,EAAE,MAAM,CAAA;KAChB,CAAM,GACR,WAAW;IAsCd,SAAgB,KAAK,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,YAAY,CAAA;IACrB,gBAAgB,SAAI;IACpB,eAAe,SAAI;IAEnB,gBAAgB,SAAK;IACrB,iBAAiB,SAAO;IACxB,eAAe,SAAM;IACrB,eAAe,SAAI;IACnB,KAAK,SAAI;IAEhB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;gBAGhB,OAAO,EAAE,UAAU,EACnC,OAAO,EAAE,4BAA4B;IAgDzC,MAAM,IAAI,IAAI;IAMd,KAAK,IAAI,IAAI;IA4Bb,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,aAAa;CA+DxB"}
1
+ {"version":3,"file":"points-cloud.d.ts","sourceRoot":"","sources":["../../../src/painter/points-cloud/points-cloud.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAIvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGzC,OAAO,EAAE,WAAW,EAAsC,MAAM,aAAa,CAAA;AAE7E,MAAM,WAAW,4BAA4B;IACzC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,SAAS,EAAE,YAAY,CAAA;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,qBAAsB,SAAQ,UAAU;aAqE7B,OAAO,EAAE,UAAU;IApEvC;;OAEG;IACH,MAAM,CAAC,cAAc,CACjB,OAAO,GAAE,OAAO,CAAC;QACb,gBAAgB,EAAE,MAAM,CAAA;QACxB,iBAAiB,EAAE,MAAM,CAAA;QACzB,eAAe,EAAE,MAAM,CAAA;QACvB,eAAe,EAAE,MAAM,CAAA;QACvB,KAAK,EAAE,MAAM,CAAA;KAChB,CAAM,GACR,WAAW;IAsCd,SAAgB,KAAK,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,YAAY,CAAA;IACrB,gBAAgB,SAAI;IACpB,eAAe,SAAI;IAEnB,gBAAgB,SAAK;IACrB,iBAAiB,SAAO;IACxB,eAAe,SAAM;IACrB,eAAe,SAAI;IACnB,KAAK,SAAI;IAEhB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;gBAGhB,OAAO,EAAE,UAAU,EACnC,OAAO,EAAE,4BAA4B;IAgDzC,MAAM,IAAI,IAAI;IAMd,KAAK,IAAI,IAAI;IA4Bb,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,aAAa;CAiExB"}
@@ -96,7 +96,7 @@ export class TgdPainterPointsCloud extends TgdPainter {
96
96
  texture.activate(0, program, "uniTexture");
97
97
  program.uniform1f("uniRadiusMultiplier", radiusMultiplier);
98
98
  program.uniform1f("uniMinSizeInPixels", minSizeInPixels);
99
- program.uniform1f("uniHalfScreenHeightInPixels", context.height * 0.5);
99
+ program.uniform1f("uniScreenHeightInPixels", context.height);
100
100
  program.uniform1f("uniSpecularExponent", this.specularExponent);
101
101
  program.uniform1f("uniSpecularIntensity", this.specularIntensity);
102
102
  program.uniform1f("uniShadowIntensity", this.shadowIntensity);
@@ -122,7 +122,7 @@ export class TgdPainterPointsCloud extends TgdPainter {
122
122
  uniforms: {
123
123
  uniMinSizeInPixels: "float",
124
124
  uniRadiusMultiplier: "float",
125
- uniHalfScreenHeightInPixels: "float",
125
+ uniScreenHeightInPixels: "float",
126
126
  uniModelViewMatrix: "mat4",
127
127
  uniProjectionMatrix: "mat4",
128
128
  },
@@ -136,11 +136,13 @@ export class TgdPainterPointsCloud extends TgdPainter {
136
136
  mainCode: [
137
137
  "varUV = attUV;",
138
138
  "float radius = attPoint.w;",
139
- "vec4 point = vec4(attPoint.xyz, 1.0);",
140
- "gl_Position = uniProjectionMatrix * uniModelViewMatrix * point;",
139
+ "vec4 point = uniModelViewMatrix * vec4(attPoint.xyz, 1.0);",
140
+ "vec4 shift = point + vec4(0, uniRadiusMultiplier * radius, 0, 0);",
141
+ "gl_Position = uniProjectionMatrix * point;",
142
+ "vec4 screenShift = uniProjectionMatrix * shift;",
141
143
  "gl_PointSize = max(",
142
144
  " uniMinSizeInPixels,",
143
- " uniRadiusMultiplier * radius * uniHalfScreenHeightInPixels / gl_Position.w",
145
+ " abs(screenShift.y - gl_Position.y) * uniScreenHeightInPixels / gl_Position.w",
144
146
  ");",
145
147
  ],
146
148
  }).code;
@@ -181,4 +183,4 @@ export class TgdPainterPointsCloud extends TgdPainter {
181
183
  return program;
182
184
  }
183
185
  }
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRzLWNsb3VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhaW50ZXIvcG9pbnRzLWNsb3VkL3BvaW50cy1jbG91ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFekMsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzlELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNqRCxPQUFPLEVBQWUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBcUU3RSxNQUFNLE9BQU8scUJBQXNCLFNBQVEsVUFBVTtJQUNqRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQ2pCLFVBTUssRUFBRTtRQUVQLE1BQU0sRUFDRixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixlQUFlLEVBQ2YsS0FBSyxHQUNSLEdBQUcsT0FBTyxDQUFBO1FBQ1gsTUFBTSxHQUFHLEdBQ0wsT0FBTyxnQkFBZ0IsS0FBSyxRQUFRO1lBQ2hDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQTtRQUMvQixNQUFNLEdBQUcsR0FDTCxPQUFPLGlCQUFpQixLQUFLLFFBQVE7WUFDakMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLHNCQUFzQixDQUFBO1FBQ2hDLE1BQU0s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
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRzLWNsb3VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhaW50ZXIvcG9pbnRzLWNsb3VkL3BvaW50cy1jbG91ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFekMsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzlELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNqRCxPQUFPLEVBQWUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBcUU3RSxNQUFNLE9BQU8scUJBQXNCLFNBQVEsVUFBVTtJQUNqRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQ2pCLFVBTUssRUFBRTtRQUVQLE1BQU0sRUFDRixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixlQUFlLEVBQ2YsS0FBSyxHQUNSLEdBQUcsT0FBTyxDQUFBO1FBQ1gsTUFBTSxHQUFHLEdBQ0wsT0FBTyxnQkFBZ0IsS0FBSyxRQUFRO1lBQ2hDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQTtRQUMvQixNQUFNLEdBQUcsR0FDTCxPQUFPLGlCQUFpQixLQUFLLFFBQVE7WUFDakMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLHNCQUFzQixDQUFBO1FBQ2hDLE1BQU0sR0FBRyxHQUNMLE9BQU8sZUFBZSxLQUFLLFFBQVE7WUFDL0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQTtRQUM5QixNQUFNLEdBQUcsR0FDTCxPQUFPLGVBQWUsS0FBSyxRQUFRO1lBQy9CLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsb0JBQW9CLENBQUE7UUFDOUIsTUFBTSxDQUFDLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUE7UUFDbkUsT0FBTztZQUNILGlEQUFpRDtZQUNqRCx3Q0FBd0M7WUFDeEMseUJBQXlCO1lBQ3pCLDZDQUE2QztZQUM3QyxpQ0FBaUMsR0FBRyxZQUFZLEdBQUcsYUFBYSxHQUFHLElBQUk7WUFDdkUsaUJBQWlCO2dCQUNiLENBQUMsQ0FBQyx5QkFBeUIsR0FBRyxPQUFPLEdBQUcsR0FBRztnQkFDM0MsQ0FBQyxDQUFDLGlCQUFpQjtZQUN2QixvQ0FBb0MsQ0FBQyxrQ0FBa0M7U0FDMUUsQ0FBQTtJQUNMLENBQUM7SUFvQkQsWUFDb0IsT0FBbUIsRUFDbkMsT0FBcUM7O1FBRXJDLEtBQUssRUFBRSxDQUFBO1FBSFMsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQWpCaEMscUJBQWdCLEdBQUcsQ0FBQyxDQUFBO1FBQ3BCLG9CQUFlLEdBQUcsQ0FBQyxDQUFBO1FBRW5CLHFCQUFnQixHQUFHLEVBQUUsQ0FBQTtRQUNyQixzQkFBaUIsR0FBRyxJQUFJLENBQUE7UUFDeEIsb0JBQWUsR0FBRyxHQUFHLENBQUE7UUFDckIsb0JBQWUsR0FBRyxDQUFDLENBQUE7UUFDbkIsVUFBSyxHQUFHLENBQUMsQ0FBQTtRQWNaLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBQSxPQUFPLENBQUMsSUFBSSxtQ0FBSSxJQUFJLENBQUMsSUFBSSxDQUFBO1FBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFBLE9BQU8sQ0FBQyxnQkFBZ0IsbUNBQUksQ0FBQyxDQUFBO1FBQ3JELElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBQSxPQUFPLENBQUMsZUFBZSxtQ0FBSSxDQUFDLENBQUE7UUFDbkQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQUEsT0FBTyxDQUFDLGdCQUFnQixtQ0FBSSxFQUFFLENBQUE7UUFDdEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQUEsT0FBTyxDQUFDLGlCQUFpQixtQ0FBSSxJQUFJLENBQUE7UUFDMUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFBLE9BQU8sQ0FBQyxlQUFlLG1DQUFJLEdBQUcsQ0FBQTtRQUNyRCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQUEsT0FBTyxDQUFDLGVBQWUsbUNBQUksQ0FBQyxDQUFBO1FBQ25ELElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBQSxPQUFPLENBQUMsS0FBSyxtQ0FBSSxDQUFDLENBQUE7UUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFBO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksS0FBSyxDQUNYLGlIQUFpSCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUMzSSxDQUFBO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNO1lBQ1AsTUFBQSxPQUFPLENBQUMsTUFBTSxtQ0FBSSxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNsRSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25ELE1BQU0sT0FBTyxHQUFHLG9GQUFvRixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0seUJBQXlCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUE7WUFDdEssT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUNqRCxPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQzNELE9BQU8sQ0FBQyxLQUFLLENBQ1QsMENBQTBDLEVBQzFDLElBQUksQ0FBQyxTQUFTLENBQ2pCLENBQUE7WUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNuRSxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzVCLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUE7WUFDOUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQTtRQUNyQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUMvQyxpQ0FBaUMsQ0FDN0IsR0FBRyxFQUNILG9CQUFvQixDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQzNDLENBQ0osQ0FBQTtZQUNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUE7UUFDcEMsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFBO1FBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDbkQsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUMzRSxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksSUFBSSxDQUFDLG9CQUFvQjtZQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUE7UUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFBO0lBQ3JCLENBQUM7SUFFRCxLQUFLO1FBQ0QsTUFBTSxFQUNGLE9BQU8sRUFDUCxPQUFPLEVBQ1AsR0FBRyxFQUNILE9BQU8sRUFDUCxLQUFLLEVBQ0wsZ0JBQWdCLEVBQ2hCLGVBQWUsR0FDbEIsR0FBRyxJQUFJLENBQUE7UUFDUixNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUM5QixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDYixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDMUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO1FBQzFELE9BQU8sQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsZUFBZSxDQUFDLENBQUE7UUFDeEQsT0FBTyxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDNUQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUMvRCxPQUFPLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBQ2pFLE9BQU8sQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQzdELE9BQU8sQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQzdELE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN6QyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQ3RFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUN4RSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDVixFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ2xDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUNoQixDQUFDO0lBRU8sYUFBYTtRQUNqQixNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQztZQUMzQixRQUFRLEVBQUUsTUFBTTtZQUNoQixLQUFLLEVBQUUsTUFBTTtTQUNoQixDQUFDLENBQUE7UUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2pDLE9BQU8sT0FBTyxDQUFBO0lBQ2xCLENBQUM7SUFFTyxhQUFhLENBQUMsTUFBb0I7UUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxlQUFlLENBQUM7WUFDN0IsUUFBUSxFQUFFO2dCQUNOLGtCQUFrQixFQUFFLE9BQU87Z0JBQzNCLG1CQUFtQixFQUFFLE9BQU87Z0JBQzVCLHVCQUF1QixFQUFFLE9BQU87Z0JBQ2hDLGtCQUFrQixFQUFFLE1BQU07Z0JBQzFCLG1CQUFtQixFQUFFLE1BQU07YUFDOUI7WUFDRCxVQUFVLEVBQUU7Z0JBQ1IsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLEtBQUssRUFBRSxNQUFNO2FBQ2hCO1lBQ0QsT0FBTyxFQUFFO2dCQUNMLEtBQUssRUFBRSxNQUFNO2FBQ2hCO1lBQ0QsUUFBUSxFQUFFO2dCQUNOLGdCQUFnQjtnQkFDaEIsNEJBQTRCO2dCQUM1Qiw0REFBNEQ7Z0JBQzVELG1FQUFtRTtnQkFDbkUsNENBQTRDO2dCQUM1QyxpREFBaUQ7Z0JBQ2pELHFCQUFxQjtnQkFDckIsdUJBQXVCO2dCQUN2QixnRkFBZ0Y7Z0JBQ2hGLElBQUk7YUFDUDtTQUNKLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDUCxNQUFNLElBQUksR0FBRyxJQUFJLGlCQUFpQixDQUFDO1lBQy9CLFFBQVEsRUFBRTtnQkFDTixVQUFVLEVBQUUsV0FBVztnQkFDdkIsbUJBQW1CLEVBQUUsT0FBTztnQkFDNUIsb0JBQW9CLEVBQUUsT0FBTztnQkFDN0Isa0JBQWtCLEVBQUUsT0FBTztnQkFDM0Isa0JBQWtCLEVBQUUsT0FBTztnQkFDM0IsUUFBUSxFQUFFLE9BQU87YUFDcEI7WUFDRCxPQUFPLEVBQUU7Z0JBQ0wsS0FBSyxFQUFFLE1BQU07YUFDaEI7WUFDRCxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFO1lBQzlCLFNBQVMsRUFBRTtnQkFDUCxNQUFNLEVBQUU7b0JBQ0osMkJBQTJCO29CQUMzQixNQUFNLGFBQU4sTUFBTSxjQUFOLE1BQU0sR0FBSTt3QkFDTixpREFBaUQ7d0JBQ2pELHdDQUF3Qzt3QkFDeEMseUJBQXlCO3dCQUN6Qiw2Q0FBNkM7d0JBQzdDLDJHQUEyRzt3QkFDM0csb0VBQW9FO3dCQUNwRSwyRUFBMkU7cUJBQzlFO29CQUNELEdBQUc7aUJBQ047YUFDSjtZQUNELFFBQVEsRUFBRTtnQkFDTiwwQ0FBMEM7Z0JBQzFDLDRCQUE0QjthQUMvQjtTQUNKLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDUCxNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQy9ELE9BQU8sT0FBTyxDQUFBO0lBQ2xCLENBQUM7Q0FDSiJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tolokoban/tgd",
3
- "version": "2.0.91",
3
+ "version": "2.0.92",
4
4
  "description": "ToloGameDev library for WebGL2",
5
5
  "homepage": "https://tolokoban.github.io/tgd2",
6
6
  "main": "./lib/dist/index.js",
@@ -1,19 +0,0 @@
1
- import type { TgdVec3, TgdVec4 } from "../math";
2
- import type { ArrayNumber3, ArrayNumber4 } from "../types";
3
- import { TgdGeometry } from "./geometry";
4
- export interface TgdGeometryTubesOptions {
5
- center?: ArrayNumber3 | ArrayNumber4 | TgdVec3 | TgdVec4;
6
- radius?: number;
7
- /**
8
- * A value of 0 will get you a regular icosahedron.
9
- * Then, each subdivision will cut every triangle in 3 new triangles.
10
- *
11
- * - Minimum: 0
12
- * - Default: 2
13
- */
14
- subdivisions?: number;
15
- }
16
- export declare class TgdGeometryTubes extends TgdGeometry {
17
- constructor({ center, radius, subdivisions, }?: TgdGeometryTubesOptions);
18
- }
19
- //# sourceMappingURL=tubes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tubes.d.ts","sourceRoot":"","sources":["../../src/geometry/tubes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,MAAM,WAAW,uBAAuB;IACpC,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY,GAAG,OAAO,GAAG,OAAO,CAAA;IACxD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,qBAAa,gBAAiB,SAAQ,WAAW;gBACjC,EACR,MAAkB,EAClB,MAAU,EACV,YAAgB,GACnB,GAAE,uBAA4B;CAoBlC"}
@@ -1,78 +0,0 @@
1
- import { TgdDataset } from "./../dataset/index.js";
2
- import { webglElementTypeArrayFromNumberArray } from "./../utils/index.js";
3
- import { TgdGeometry } from "./geometry.js";
4
- export class TgdGeometryTubes extends TgdGeometry {
5
- constructor({ center = [0, 0, 0], radius = 1, subdivisions = 2, } = {}) {
6
- const dataset = new TgdDataset({
7
- POSITION: "vec3",
8
- NORMAL: "vec3",
9
- });
10
- const positions = [];
11
- const normals = [];
12
- const elements = [];
13
- createIcosahedron(positions, normals, elements, center, radius);
14
- for (let loop = 0; loop < subdivisions; loop++) {
15
- subdivide(positions, normals, elements, center, radius);
16
- }
17
- dataset.set("POSITION", new Float32Array(positions));
18
- dataset.set("NORMAL", new Float32Array(normals));
19
- super({
20
- dataset,
21
- elements: webglElementTypeArrayFromNumberArray(elements),
22
- drawMode: "TRIANGLES",
23
- });
24
- }
25
- }
26
- function createIcosahedron(positions, normals, elements, center, radius) {
27
- const [cx, cy, cz] = center;
28
- normals.push(-0, -1, -0, 0.7236, -0.4472, 0.5257, -0.2764, -0.4472, 0.8507, -0.8944, -0.4472, -0, -0.2764, -0.4472, -0.8507, 0.7236, -0.4472, -0.5257, 0.2764, 0.4472, 0.8507, -0.7236, 0.4472, 0.5257, -0.7236, 0.4472, -0.5257, 0.2764, 0.4472, -0.8507, 0.8944, 0.4472, -0, -0, 1, -0);
29
- for (let i = 0; i < normals.length; i += 3) {
30
- positions.push(normals[i + 0] * radius + cx, normals[i + 1] * radius + cy, normals[i + 2] * radius + cz);
31
- }
32
- // prettier-ignore
33
- elements.push(0, 1, 2, 1, 0, 5, 0, 2, 3, 0, 3, 4, 0, 4, 5, 1, 5, 10, 2, 1, 6, 3, 2, 7, 4, 3, 8, 5, 4, 9, 1, 10, 6, 2, 6, 7, 3, 7, 8, 4, 8, 9, 5, 9, 10, 6, 10, 11, 7, 6, 11, 8, 7, 11, 9, 8, 11, 10, 9, 11);
34
- }
35
- /**
36
- * Each triangle will be divided in 4 sub triangles.
37
- */
38
- function subdivide(positions, normals, elements, center, radius) {
39
- const [cx, cy, cz] = center;
40
- const newElements = [];
41
- let pointsCount = Math.floor(positions.length / 3);
42
- const indexesOfMidPoints = new Map();
43
- const indexOfMidPoint = (indexA, indexB) => {
44
- const idxA = Math.min(indexA, indexB);
45
- const idxB = Math.max(indexA, indexB);
46
- const key = `${idxA}/${idxB}`;
47
- const indexFromCache = indexesOfMidPoints.get(key);
48
- if (typeof indexFromCache === "number")
49
- return indexFromCache;
50
- const [nx, ny, nz] = averageNormal(normals, idxA, idxB);
51
- normals.push(nx, ny, nz);
52
- positions.push(nx * radius + cx, ny * radius + cy, nz * radius + cz);
53
- const newIndex = pointsCount++;
54
- indexesOfMidPoints.set(key, newIndex);
55
- return newIndex;
56
- };
57
- for (let e = 0; e < elements.length; e += 3) {
58
- const i0 = elements[e + 0];
59
- const i1 = elements[e + 1];
60
- const i2 = elements[e + 2];
61
- const i01 = indexOfMidPoint(i0, i1);
62
- const i12 = indexOfMidPoint(i1, i2);
63
- const i02 = indexOfMidPoint(i0, i2);
64
- // prettier-ignore
65
- newElements.push(i0, i01, i02, i01, i1, i12, i01, i12, i02, i02, i12, i2);
66
- }
67
- elements.splice(0);
68
- elements.push(...newElements);
69
- }
70
- function averageNormal(normals, i0, i1) {
71
- const x = normals[i0 * 3 + 0] + normals[i1 * 3 + 0];
72
- const y = normals[i0 * 3 + 1] + normals[i1 * 3 + 1];
73
- const z = normals[i0 * 3 + 2] + normals[i1 * 3 + 2];
74
- // eslint-disable-next-line unicorn/prefer-modern-math-apis
75
- const inv3 = 1 / Math.sqrt(x * x + y * y + z * z);
76
- return [x * inv3, y * inv3, z * inv3];
77
- }
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHViZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VvbWV0cnkvdHViZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUd6QyxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQWV4QyxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsV0FBVztJQUM3QyxZQUFZLEVBQ1IsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDbEIsTUFBTSxHQUFHLENBQUMsRUFDVixZQUFZLEdBQUcsQ0FBQyxNQUNTLEVBQUU7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUM7WUFDM0IsUUFBUSxFQUFFLE1BQU07WUFDaEIsTUFBTSxFQUFFLE1BQU07U0FDakIsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFBO1FBQzlCLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQTtRQUM1QixNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUE7UUFDN0IsaUJBQWlCLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQy9ELEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxZQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUM3QyxTQUFTLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQzNELENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1FBQ3BELE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxF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RUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNuRCxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNuRCxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNuRCwyREFBMkQ7SUFDM0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNqRCxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtBQUN6QyxDQUFDIn0=
@@ -1,11 +0,0 @@
1
- import { TgdGeometry } from "../../geometry";
2
- /**
3
- * The capsule is a 3D shape mae of a cylinder
4
- * and two hemispheres, all of radius 1.
5
- * The roundness gives use the number of faces around the cylinder.
6
- * Every vertex has 4 coordinates: x, y, z, and a number that will
7
- * be 0.0 for bottom tip, and 1.1 for top tip.
8
- * The cylinder is aligned along Z axis.
9
- */
10
- export declare function makeCapsule(roundness: number): TgdGeometry;
11
- //# sourceMappingURL=capsule.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"capsule.d.ts","sourceRoot":"","sources":["../../../src/painter/tubes/capsule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAI3C;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAgG1D"}
@@ -1,109 +0,0 @@
1
- import { TgdDataset } from "./../../dataset/index.js";
2
- import { TgdGeometry } from "./../../geometry/index.js";
3
- const TAU = 2 * Math.PI;
4
- /**
5
- * The capsule is a 3D shape mae of a cylinder
6
- * and two hemispheres, all of radius 1.
7
- * The roundness gives use the number of faces around the cylinder.
8
- * Every vertex has 4 coordinates: x, y, z, and a number that will
9
- * be 0.0 for bottom tip, and 1.1 for top tip.
10
- * The cylinder is aligned along Z axis.
11
- */
12
- export function makeCapsule(roundness) {
13
- roundness = Math.max(3, roundness);
14
- const tips = [];
15
- const offset = [];
16
- const elements = [];
17
- const angleStep = TAU / roundness;
18
- for (let face = 0; face < roundness; face++) {
19
- const angle = angleStep * face;
20
- const x = Math.cos(angle);
21
- const y = Math.sin(angle);
22
- offset.push(x, y, +1);
23
- tips.push(1);
24
- offset.push(x, y, -1);
25
- tips.push(0);
26
- const top1 = face * 2;
27
- const bottom1 = top1 + 1;
28
- const top2 = ((face + 1) % roundness) * 2;
29
- const bottom2 = top2 + 1;
30
- elements.push(top2, top1, bottom1);
31
- elements.push(top2, bottom1, bottom2);
32
- }
33
- const rings = Math.max(2, Math.ceil(roundness / 2));
34
- const angleStepRing = (0.5 * Math.PI) / rings;
35
- for (let ring = 1; ring < rings; ring++) {
36
- const phi = angleStepRing * ring;
37
- const z = Math.sin(phi);
38
- const radius = Math.cos(phi);
39
- for (let face1 = 0; face1 < roundness; face1++) {
40
- const angle = angleStep * face1;
41
- const x = Math.cos(angle) * radius;
42
- const y = Math.sin(angle) * radius;
43
- offset.push(x, y, z + 1);
44
- tips.push(1);
45
- offset.push(x, y, -z - 1);
46
- tips.push(0);
47
- const face2 = (face1 + 1) % roundness;
48
- const idx0 = (ring - 1) * roundness * 2;
49
- const idx1 = ring * roundness * 2;
50
- const top1r0 = idx0 + face1 * 2;
51
- const top2r0 = idx0 + face2 * 2;
52
- const top1r1 = idx1 + face1 * 2;
53
- const top2r1 = idx1 + face2 * 2;
54
- elements.push(top1r0, top2r0, top2r1);
55
- elements.push(top2r1, top1r1, top1r0);
56
- elements.push(top1r0 + 1, top2r1 + 1, top2r0 + 1);
57
- elements.push(top2r1 + 1, top1r0 + 1, top1r1 + 1);
58
- }
59
- }
60
- offset.push(0, 0, +2);
61
- tips.push(1);
62
- offset.push(0, 0, -2);
63
- tips.push(0);
64
- const baseIndex = tips.length - 2 * (roundness + 1);
65
- const endIndex = tips.length - 2;
66
- for (let face0 = 0; face0 < roundness; face0++) {
67
- const face1 = (face0 + 1) % roundness;
68
- const idx0 = face0 * 2 + baseIndex;
69
- const idx1 = face1 * 2 + baseIndex;
70
- elements.push(idx0 + 0, idx1 + 0, endIndex + 0);
71
- elements.push(idx1 + 1, idx0 + 1, endIndex + 1);
72
- }
73
- const capsule = new TgdDataset({
74
- attTip: "float",
75
- POSITION: "vec3",
76
- NORMAL: "vec3",
77
- });
78
- capsule.set("POSITION", new Float32Array(offset));
79
- capsule.set("attTip", new Float32Array(tips));
80
- const geometry = new TgdGeometry({
81
- dataset: capsule,
82
- elements: new Uint16Array(elements),
83
- computeNormalsIfMissing: true,
84
- // attPosition: "attPosition",
85
- // attNormal: "attNormal",
86
- });
87
- const { set, get } = capsule.getAttribAccessor("NORMAL");
88
- // The cylinder must be really flat
89
- for (let idx = 0; idx < roundness * 2; idx += 2) {
90
- set(0, idx, 2);
91
- set(0, idx + 1, 2);
92
- const x = (get(idx, 0) + get(idx + 1, 0)) / 2;
93
- const y = (get(idx, 1) + get(idx + 1, 1)) / 2;
94
- set(x, idx, 0);
95
- set(y, idx, 1);
96
- set(x, idx + 1, 0);
97
- set(y, idx + 1, 1);
98
- }
99
- // We collapse the cylinder because it will
100
- // be instantiated with two tips points and radii.
101
- for (let idx = 0; idx < tips.length; idx++) {
102
- const shiftZ = tips[idx] === 0 ? +1 : -1;
103
- offset[idx * 3 + 2] += shiftZ;
104
- }
105
- capsule.set("POSITION", new Float32Array(offset));
106
- capsule.set("attTip", new Float32Array(tips));
107
- return geometry;
108
- }
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fwc3VsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYWludGVyL3R1YmVzL2NhcHN1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTNDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFBO0FBRXZCOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLFNBQWlCO0lBQ3pDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUNsQyxNQUFNLElBQUksR0FBYSxFQUFFLENBQUE7SUFDekIsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFBO0lBQzNCLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQTtJQUM3QixNQUFNLFNBQVMsR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFBO0lBQ2pDLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUMxQyxNQUFNLEtBQUssR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFBO1FBQzlCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDekIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNaLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUE7UUFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQTtRQUN4QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFBO1FBQ3hCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNsQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDekMsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbkQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQTtJQUM3QyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7UUFDdEMsTUFBTSxHQUFHLEdBQUcsYUFBYSxHQUFHLElBQUksQ0FBQTtRQUNoQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDNUIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzdDLE1BQU0sS0FBSyxHQUFHLFNBQVMsR0FBRyxLQUFLLENBQUE7WUFDL0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUE7WUFDbEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUE7WUFDbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDWixNQUFNLEtBQUssR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUE7WUFDckMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQTtZQUN2QyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQTtZQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQTtZQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQTtZQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQTtZQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQTtZQUMvQixRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFDckMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1lBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENB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
@@ -1,89 +0,0 @@
1
- import type { TgdCamera } from "../../camera";
2
- import type { WebglParams } from "../../context/webgl-params";
3
- import type { TgdDataset } from "../../dataset";
4
- import { type TgdMaterial } from "../../material";
5
- import { TgdTransfo } from "../../math";
6
- import { TgdPainter } from "../painter";
7
- import { TgdTexture2D } from "../../texture";
8
- type DatasetOption = TgdDataset | (() => TgdDataset);
9
- export type TgdPainterSegmentsMorphingOptions = {
10
- /**
11
- * Number of faces around the cylinder.
12
- * Min is 3.
13
- * Default to **3**.
14
- */
15
- roundness?: number;
16
- /**
17
- * With orthographic camera, this is a value in pixels.
18
- */
19
- minRadius?: number;
20
- /**
21
- * Multiply all the radii by this value.
22
- *
23
- * Default to `1`.
24
- */
25
- radiusMultiplier?: number;
26
- /**
27
- * Material to apply to the resulting mesh.
28
- */
29
- material?: TgdMaterial;
30
- /**
31
- * If a `TgdPainterSegments` is given, then the
32
- * data will be shared between the painters.
33
- */
34
- datasetsPairs: [DatasetOption, DatasetOption][];
35
- };
36
- /**
37
- * @example
38
- * ```
39
- * const factory = new TgdPainterSegmentsData()
40
- * factory.add(
41
- * [0, 0, 0, .2],
42
- * [1, 0, 0, .1],
43
- * )
44
- * factory.add(
45
- * [0, 0, 0, .2],
46
- * [0, 1, 0, .1],
47
- * )
48
- * factory.add(
49
- * [0, 0, 0, .2],
50
- * [0, 0, 1, .1],
51
- * )
52
- * const segments = new TgdPainterSegments(
53
- * segment, factory
54
- * )
55
- * ```
56
- */
57
- export declare class TgdPainterSegmentsMorphing extends TgdPainter {
58
- protected readonly context: {
59
- gl: WebGL2RenderingContext;
60
- webglParams: WebglParams;
61
- camera: TgdCamera;
62
- };
63
- readonly transfo: TgdTransfo;
64
- colorTexture: TgdTexture2D;
65
- minRadius: number;
66
- radiusMultiplier: number;
67
- radiusConstant: number;
68
- radiusSwitch: number;
69
- instanceCount: number;
70
- /**
71
- * Mix between two datasets of a pair.
72
- * 0.0 for the first one, 1.0 for the second one.
73
- */
74
- mix: number;
75
- private readonly vaos;
76
- private readonly prg;
77
- private readonly vertexCount;
78
- private readonly material;
79
- constructor(context: {
80
- gl: WebGL2RenderingContext;
81
- webglParams: WebglParams;
82
- camera: TgdCamera;
83
- }, options: TgdPainterSegmentsMorphingOptions);
84
- delete(): void;
85
- paint(time: number, delay: number): void;
86
- private get vao();
87
- }
88
- export {};
89
- //# sourceMappingURL=segments-morphing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"segments-morphing.d.ts","sourceRoot":"","sources":["../../../src/painter/tubes/segments-morphing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,KAAK,WAAW,EAA8B,MAAM,eAAe,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGjD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAK3C,KAAK,aAAa,GAAG,UAAU,GAAG,CAAC,MAAM,UAAU,CAAC,CAAA;AAEpD,MAAM,MAAM,iCAAiC,GAAG;IAC5C;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAA;IACtB;;;OAGG;IACH,aAAa,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAA;CAClD,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,0BAA2B,SAAQ,UAAU;IAsBlD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE;QACxB,EAAE,EAAE,sBAAsB,CAAA;QAC1B,WAAW,EAAE,WAAW,CAAA;QACxB,MAAM,EAAE,SAAS,CAAA;KACpB;IAzBL,SAAgB,OAAO,aAAmB;IACnC,YAAY,EAAE,YAAY,CAAA;IAC1B,SAAS,SAAI;IACb,gBAAgB,SAAI;IACpB,cAAc,SAAI;IAClB,YAAY,SAAI;IAChB,aAAa,SAAI;IACxB;;;OAGG;IACI,GAAG,SAAI;IAEd,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;gBAKf,OAAO,EAAE;QACxB,EAAE,EAAE,sBAAsB,CAAA;QAC1B,WAAW,EAAE,WAAW,CAAA;QACxB,MAAM,EAAE,SAAS,CAAA;KACpB,EACD,OAAO,EAAE,iCAAiC;IAuK9C,MAAM,IAAI,IAAI;IAKd,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IA4BxC,OAAO,KAAK,GAAG,GAEd;CACJ"}
@@ -1,215 +0,0 @@
1
- import { TgdMaterialFaceOrientation } from "./../../material/index.js";
2
- import { TgdTransfo } from "./../../math/index.js";
3
- import { TgdPainter } from "./../painter.js";
4
- import { TgdProgram } from "./../../program/index.js";
5
- import { TgdShaderFragment, TgdShaderVertex } from "./../../shader/index.js";
6
- import { TgdTexture2D } from "./../../texture/index.js";
7
- import { tgdCanvasCreatePalette } from "./../../utils/index.js";
8
- import { TgdVertexArray } from "./../../vao/index.js";
9
- import { makeCapsule } from "./geometry.js";
10
- /**
11
- * @example
12
- * ```
13
- * const factory = new TgdPainterSegmentsData()
14
- * factory.add(
15
- * [0, 0, 0, .2],
16
- * [1, 0, 0, .1],
17
- * )
18
- * factory.add(
19
- * [0, 0, 0, .2],
20
- * [0, 1, 0, .1],
21
- * )
22
- * factory.add(
23
- * [0, 0, 0, .2],
24
- * [0, 0, 1, .1],
25
- * )
26
- * const segments = new TgdPainterSegments(
27
- * segment, factory
28
- * )
29
- * ```
30
- */
31
- export class TgdPainterSegmentsMorphing extends TgdPainter {
32
- // private readonly painter: TgdPainter
33
- constructor(context, options) {
34
- var _a, _b, _c, _d, _e;
35
- super();
36
- this.context = context;
37
- this.transfo = new TgdTransfo();
38
- this.minRadius = 1;
39
- this.radiusMultiplier = 1;
40
- this.radiusConstant = 1;
41
- this.radiusSwitch = 0;
42
- this.instanceCount = 0;
43
- /**
44
- * Mix between two datasets of a pair.
45
- * 0.0 for the first one, 1.0 for the second one.
46
- */
47
- this.mix = 0;
48
- this.name = `TgdPainterSegments#${this.id}`;
49
- this.radiusMultiplier = (_a = options.radiusMultiplier) !== null && _a !== void 0 ? _a : 1;
50
- const { roundness = 3, minRadius = 1, datasetsPairs } = options;
51
- if (datasetsPairs.length === 0) {
52
- throw new Error('[TgdPainterSegmentsMorphing] "datasetsPairs" must contain at least one pair of datasets!');
53
- }
54
- const geometry = makeCapsule(roundness);
55
- const material = (_b = options.material) !== null && _b !== void 0 ? _b : new TgdMaterialFaceOrientation();
56
- this.material = material;
57
- material.attPosition = geometry.attPosition;
58
- material.attNormal = geometry.attNormal;
59
- material.attUV =
60
- "((mix(attUV0_A, attUV0_B, uniMix) + mix(attUV1_A, attUV1_B, uniMix)) * .5)";
61
- this.minRadius = minRadius;
62
- if (roundness > 127) {
63
- throw new Error("[TgdPainterSegments] Max roundness is 127!");
64
- }
65
- if (roundness < 0) {
66
- throw new Error("[TgdPainterSegments] Min roundness is 0!");
67
- }
68
- this.colorTexture = new TgdTexture2D(context)
69
- .setParams({
70
- magFilter: "NEAREST",
71
- minFilter: "NEAREST",
72
- wrapR: "CLAMP_TO_EDGE",
73
- wrapS: "CLAMP_TO_EDGE",
74
- wrapT: "CLAMP_TO_EDGE",
75
- })
76
- .loadBitmap(tgdCanvasCreatePalette(["#f44", "#ff4", "#4f4", "#4ff", "#44f"]));
77
- const vert = new TgdShaderVertex({
78
- uniforms: Object.assign({ uniMix: "float", uniTransfoMatrix: "mat4", uniModelViewMatrix: "mat4", uniProjectionMatrix: "mat4", uniMinRadius: "float", uniRadiusMultiplier: "float" }, material.uniforms),
79
- attributes: {
80
- [geometry.attPosition]: "vec3",
81
- [geometry.attNormal]: "vec3",
82
- attTip: "float",
83
- attXYZR0_A: "vec4",
84
- attXYZR0_B: "vec4",
85
- attXYZR1_A: "vec4",
86
- attXYZR1_B: "vec4",
87
- attUV0_A: "vec2",
88
- attUV0_B: "vec2",
89
- attUV1_A: "vec2",
90
- attUV1_B: "vec2",
91
- },
92
- varying: Object.assign(Object.assign({}, material.varyings), { varNormal: "vec3" }),
93
- functions: Object.assign(Object.assign({}, material.extraVertexShaderFunctions), { applyMaterial: [
94
- "void applyMaterial() {",
95
- [material.vertexShaderCode],
96
- "}",
97
- ], getPosition: [
98
- "vec4 getPosition(vec4 pos) {",
99
- [(_c = material.vertexShaderCodeForGetPosition) !== null && _c !== void 0 ? _c : "return pos;"],
100
- "}",
101
- ] }),
102
- mainCode: [
103
- "vec4 attXYZR0 = mix(attXYZR0_A, attXYZR0_B, uniMix);",
104
- "vec4 attXYZR1 = mix(attXYZR1_A, attXYZR1_B, uniMix);",
105
- "vec2 attUV0 = mix(attUV0_A, attUV0_B, uniMix);",
106
- "vec2 attUV1 = mix(attUV1_A, attUV1_B, uniMix);",
107
- "vec3 normal = NORMAL;",
108
- "vec3 pos = POSITION;",
109
- "vec4 xyzr = mix(attXYZR0, attXYZR1, attTip);",
110
- "vec3 center = xyzr.xyz;",
111
- "float radius = max(",
112
- [
113
- "xyzr.w * uniRadiusMultiplier,",
114
- "uniMinRadius * (uniProjectionMatrix * uniModelViewMatrix * uniTransfoMatrix * vec4(center, 1)).w",
115
- ],
116
- ");",
117
- "vec3 dir = attXYZR1.xyz - attXYZR0.xyz;",
118
- "float len = length(dir);",
119
- "if (len == 0.0) {",
120
- ["// Just a sphere", "pos *= radius;", "pos += center.xyz;"],
121
- "} else {",
122
- [
123
- "// Full capsule",
124
- "vec3 Z = dir / len;",
125
- "vec3 v = abs(Z.z) > 0.7 ? vec3(1,0,0) : vec3(0,0,1);",
126
- "vec3 Y = cross(v, Z);",
127
- "vec3 X = cross(Y, Z);",
128
- "mat3 mat = mat3(X, Y, Z);",
129
- "pos *= radius;",
130
- "pos = mat * pos + center.xyz;",
131
- "normal = mat * normal;",
132
- ],
133
- "}",
134
- "gl_Position = uniProjectionMatrix * uniModelViewMatrix * uniTransfoMatrix * vec4(pos, 1);",
135
- "applyMaterial();",
136
- "varNormal = normal;",
137
- ],
138
- }).code;
139
- const frag = new TgdShaderFragment({
140
- uniforms: material.uniforms,
141
- outputs: { FragColor: "vec4" },
142
- varying: material.varyings,
143
- functions: Object.assign(Object.assign({}, material.extraFragmentShaderFunctions), { applyMaterial: [
144
- "vec4 applyMaterial() {",
145
- [material.fragmentShaderCode],
146
- "}",
147
- ] }),
148
- mainCode: ["FragColor = applyMaterial();"],
149
- }).code;
150
- const prg = new TgdProgram(context.gl, {
151
- name: `TgdPainterSegments/TgdProgram#${this.id}`,
152
- vert,
153
- frag,
154
- });
155
- this.prg = prg;
156
- this.vaos = datasetsPairs.map(([A, B]) => {
157
- const datasetA = extract(A).renameAttributes([
158
- "attXYZR0_A",
159
- "attUV0_A",
160
- "attInfluence0_A",
161
- "attXYZR1_A",
162
- "attUV1_A",
163
- "attInfluence1_A",
164
- ]);
165
- const datasetB = extract(B).renameAttributes([
166
- "attXYZR0_B",
167
- "attUV0_B",
168
- "attInfluence0_B",
169
- "attXYZR1_B",
170
- "attUV1_B",
171
- "attInfluence1_B",
172
- ]);
173
- if (datasetA.count !== datasetB.count) {
174
- throw new Error(`[TgdPainterSegmentsMorphing] Datasets of a pair must have the same count, but we got ${datasetA.count} ≠ ${datasetB.count}!`);
175
- }
176
- const vao = new TgdVertexArray(context.gl, prg, [geometry.dataset, datasetA, datasetB], geometry.elements);
177
- this.instanceCount = datasetA.count;
178
- return vao;
179
- });
180
- this.vertexCount = (_e = (_d = geometry.elements) === null || _d === void 0 ? void 0 : _d.length) !== null && _e !== void 0 ? _e : 0;
181
- }
182
- delete() {
183
- for (const vao of this.vaos)
184
- vao.delete();
185
- this.prg.delete();
186
- }
187
- paint(time, delay) {
188
- var _a, _b;
189
- const { context, prg, vao, vertexCount, instanceCount, material } = this;
190
- const { gl, camera } = context;
191
- gl.disable(gl.DITHER);
192
- prg.use();
193
- (_b = (_a = this.material).setUniforms) === null || _b === void 0 ? void 0 : _b.call(_a, { program: prg, context, time, delay });
194
- prg.uniform1f("uniMix", this.mix);
195
- prg.uniform1f("uniRadiusMultiplier", this.radiusMultiplier);
196
- prg.uniform1f("uniMinRadius", (this.minRadius * 2) / gl.drawingBufferHeight);
197
- prg.uniformMatrix4fv("uniTransfoMatrix", this.transfo.matrix);
198
- prg.uniformMatrix4fv("uniModelViewMatrix", camera.matrixModelView);
199
- prg.uniformMatrix4fv("uniProjectionMatrix", camera.matrixProjection);
200
- material.applyState(this.context, () => {
201
- vao.bind();
202
- gl.drawElementsInstanced(gl.TRIANGLES, vertexCount, gl.UNSIGNED_SHORT, 0, instanceCount);
203
- vao.unbind();
204
- });
205
- }
206
- get vao() {
207
- return this.vaos[0];
208
- }
209
- }
210
- function extract(arg) {
211
- if (typeof arg === "function")
212
- return arg();
213
- return arg;
214
- }
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudHMtbW9ycGhpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGFpbnRlci90dWJlcy9zZWdtZW50cy1tb3JwaGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQW9CLDBCQUEwQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzVFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFnQ3hDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sT0FBTywwQkFBMkIsU0FBUSxVQUFVO0lBbUJ0RCx1Q0FBdUM7SUFFdkMsWUFDdUIsT0FJbEIsRUFDRCxPQUEwQzs7UUFFMUMsS0FBSyxFQUFFLENBQUE7UUFQWSxZQUFPLEdBQVAsT0FBTyxDQUl6QjtRQXpCVyxZQUFPLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQTtRQUVuQyxjQUFTLEdBQUcsQ0FBQyxDQUFBO1FBQ2IscUJBQWdCLEdBQUcsQ0FBQyxDQUFBO1FBQ3BCLG1CQUFjLEdBQUcsQ0FBQyxDQUFBO1FBQ2xCLGlCQUFZLEdBQUcsQ0FBQyxDQUFBO1FBQ2hCLGtCQUFhLEdBQUcsQ0FBQyxDQUFBO1FBQ3hCOzs7V0FHRztRQUNJLFFBQUcsR0FBRyxDQUFDLENBQUE7UUFrQlYs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
@@ -1,133 +0,0 @@
1
- import type { TgdBuffer, TgdBufferOptionTarget, TgdBufferOptionUsage } from "../../buffer";
2
- import type { TgdCamera } from "../../camera";
3
- import type { WebglParams } from "../../context/webgl-params";
4
- import { TgdDataset } from "../../dataset";
5
- import { type TgdMaterial } from "../../material";
6
- import { TgdTransfo } from "../../math";
7
- import { TgdPainter } from "../painter";
8
- import type { ArrayNumber2, ArrayNumber4 } from "../../types";
9
- type DatasetOption = TgdPainterSegments | InstanceDataset | (() => InstanceDataset);
10
- export type TgdPainterSegmentsOptions = {
11
- /**
12
- * Number of faces around the cylinder.
13
- * Min is 3.
14
- *
15
- * Default to **3**.
16
- */
17
- roundness?: number;
18
- /**
19
- * With orthographic camera, this is a value in pixels.
20
- */
21
- minRadius?: number;
22
- /**
23
- * Multiply all the radii by this value.
24
- *
25
- * Default to `1`.
26
- */
27
- radiusMultiplier?: number;
28
- /**
29
- * Material to apply to the resulting mesh.
30
- */
31
- material?: TgdMaterial;
32
- /**
33
- * If a `TgdPainterSegments` is given, then the
34
- * data will be shared between the painters.
35
- */
36
- dataset: DatasetOption;
37
- };
38
- /**
39
- * @example
40
- * ```
41
- * const factory = new TgdPainterSegmentsData()
42
- * factory.add(
43
- * [0, 0, 0, .2],
44
- * [1, 0, 0, .1],
45
- * )
46
- * factory.add(
47
- * [0, 0, 0, .2],
48
- * [0, 1, 0, .1],
49
- * )
50
- * factory.add(
51
- * [0, 0, 0, .2],
52
- * [0, 0, 1, .1],
53
- * )
54
- * const segments = new TgdPainterSegments(
55
- * segment, factory
56
- * )
57
- * ```
58
- */
59
- export declare class TgdPainterSegments extends TgdPainter {
60
- protected readonly context: {
61
- gl: WebGL2RenderingContext;
62
- webglParams: WebglParams;
63
- camera: TgdCamera;
64
- };
65
- static createDataset({ attXYZR0, attUV0, attInfluence0, attXYZR1, attUV1, attInfluence1, buffer, usage, target, }?: Partial<{
66
- attXYZR0: string;
67
- attUV0: string;
68
- attInfluence0: string;
69
- attXYZR1: string;
70
- attUV1: string;
71
- attInfluence1: string;
72
- buffer: TgdBuffer;
73
- target: TgdBufferOptionTarget;
74
- usage: TgdBufferOptionUsage;
75
- }>): TgdDataset;
76
- readonly transfo: TgdTransfo;
77
- minRadius: number;
78
- radiusMultiplier: number;
79
- radiusConstant: number;
80
- radiusSwitch: number;
81
- instanceCount: number;
82
- private readonly vao;
83
- private readonly prg;
84
- private readonly vertexCount;
85
- private readonly material;
86
- constructor(context: {
87
- gl: WebGL2RenderingContext;
88
- webglParams: WebglParams;
89
- camera: TgdCamera;
90
- }, options: TgdPainterSegmentsOptions);
91
- getBuffer(): TgdBuffer | undefined;
92
- delete(): void;
93
- paint(time: number, delay: number): void;
94
- }
95
- type InstanceDataset = TgdDataset;
96
- export declare class TgdPainterSegmentsData {
97
- private _count;
98
- private readonly attXYZR0;
99
- private readonly attUV0;
100
- private readonly attInfluence0;
101
- private readonly attXYZR1;
102
- private readonly attUV1;
103
- private readonly attInfluence1;
104
- get count(): number;
105
- getXYZR0(index: number): ArrayNumber4;
106
- getXYZR1(index: number): ArrayNumber4;
107
- /**
108
- * @param XYZR0 (x,y,z) and radius of point A.
109
- * @param XYZR1 (x,y,z) and radius of point B.
110
- * @param UV0 Texture coordinates for point A.
111
- * @param UV1 Texture coordinates for point B.
112
- * @param radiusMultiplierInfluence0 If you put 0, the radius won't change regardless to the currently applied radius multiplicator.
113
- * @param radiusMultiplierInfluence1
114
- */
115
- add(XYZR0: ArrayNumber4, XYZR1: ArrayNumber4, UV0?: ArrayNumber2, UV1?: ArrayNumber2, radiusMultiplierInfluence0?: number, radiusMultiplierInfluence1?: number): void;
116
- /**
117
- * You can rename the attributes if you need to use
118
- * them in another Painter.
119
- */
120
- readonly makeDataset: (args?: Partial<{
121
- attXYZR0: string;
122
- attUV0: string;
123
- attInfluence0: string;
124
- attXYZR1: string;
125
- attUV1: string;
126
- attInfluence1: string;
127
- buffer: TgdBuffer;
128
- target: TgdBufferOptionTarget;
129
- usage: TgdBufferOptionUsage;
130
- }>) => InstanceDataset;
131
- }
132
- export {};
133
- //# sourceMappingURL=segments.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"segments.d.ts","sourceRoot":"","sources":["../../../src/painter/tubes/segments.ts"],"names":[],"mappings":"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"}
@@ -1,270 +0,0 @@
1
- import { TgdDataset } from "./../../dataset/index.js";
2
- import { TgdMaterialFaceOrientation } from "./../../material/index.js";
3
- import { TgdTransfo } from "./../../math/index.js";
4
- import { TgdPainter } from "./../painter.js";
5
- import { TgdProgram } from "./../../program/index.js";
6
- import { TgdShaderFragment, TgdShaderVertex } from "./../../shader/index.js";
7
- import { TgdVertexArray } from "./../../vao/index.js";
8
- import { makeCapsule } from "./capsule.js";
9
- /**
10
- * @example
11
- * ```
12
- * const factory = new TgdPainterSegmentsData()
13
- * factory.add(
14
- * [0, 0, 0, .2],
15
- * [1, 0, 0, .1],
16
- * )
17
- * factory.add(
18
- * [0, 0, 0, .2],
19
- * [0, 1, 0, .1],
20
- * )
21
- * factory.add(
22
- * [0, 0, 0, .2],
23
- * [0, 0, 1, .1],
24
- * )
25
- * const segments = new TgdPainterSegments(
26
- * segment, factory
27
- * )
28
- * ```
29
- */
30
- export class TgdPainterSegments extends TgdPainter {
31
- static createDataset({ attXYZR0 = "attXYZR0", attUV0 = "attUV0", attInfluence0 = "attInfluence0", attXYZR1 = "attXYZR1", attUV1 = "attUV1", attInfluence1 = "attInfluence1", buffer, usage, target, } = {}) {
32
- const dataset = new TgdDataset({
33
- [attXYZR0]: "vec4",
34
- [attUV0]: "vec2",
35
- [attInfluence0]: "float",
36
- [attXYZR1]: "vec4",
37
- [attUV1]: "vec2",
38
- [attInfluence1]: "float",
39
- }, {
40
- divisor: 1,
41
- buffer,
42
- usage,
43
- target,
44
- });
45
- return dataset;
46
- }
47
- constructor(context, options) {
48
- var _a, _b, _c, _d, _e;
49
- super();
50
- this.context = context;
51
- this.transfo = new TgdTransfo();
52
- this.minRadius = 1;
53
- this.radiusMultiplier = 1;
54
- this.radiusConstant = 1;
55
- this.radiusSwitch = 0;
56
- this.instanceCount = 0;
57
- this.name = `TgdPainterSegments#${this.id}`;
58
- this.radiusMultiplier = (_a = options.radiusMultiplier) !== null && _a !== void 0 ? _a : 1;
59
- const { roundness = 3, minRadius = 1, dataset } = options;
60
- const geometry = makeCapsule(roundness);
61
- const material = (_b = options.material) !== null && _b !== void 0 ? _b : new TgdMaterialFaceOrientation();
62
- this.material = material;
63
- material.attPosition = geometry.attPosition;
64
- material.attNormal = geometry.attNormal;
65
- material.attUV = "((attUV0 + attUV1) * .5)";
66
- this.minRadius = minRadius;
67
- if (roundness > 127) {
68
- throw new Error("[TgdPainterSegments] Max roundness is 127!");
69
- }
70
- if (roundness < 0) {
71
- throw new Error("[TgdPainterSegments] Min roundness is 0!");
72
- }
73
- const vert = new TgdShaderVertex({
74
- uniforms: Object.assign({ uniTransfoMatrix: "mat4", uniModelViewMatrix: "mat4", uniProjectionMatrix: "mat4", uniMinRadius: "float", uniRadiusMultiplier: "float" }, material.uniforms),
75
- attributes: {
76
- [geometry.attPosition]: "vec3",
77
- [geometry.attNormal]: "vec3",
78
- attTip: "float",
79
- attXYZR0: "vec4",
80
- attXYZR1: "vec4",
81
- attUV0: "vec2",
82
- attUV1: "vec2",
83
- },
84
- varying: Object.assign(Object.assign({}, material.varyings), { varNormal: "vec3" }),
85
- functions: Object.assign(Object.assign({}, material.extraVertexShaderFunctions), { applyMaterial: [
86
- "void applyMaterial() {",
87
- [material.vertexShaderCode],
88
- "}",
89
- ], getPosition: [
90
- "vec4 getPosition(vec4 pos) {",
91
- [(_c = material.vertexShaderCodeForGetPosition) !== null && _c !== void 0 ? _c : "return pos;"],
92
- "}",
93
- ] }),
94
- mainCode: [
95
- "vec3 normal = NORMAL;",
96
- "vec3 pos = POSITION;",
97
- "vec4 xyzr = mix(attXYZR0, attXYZR1, attTip);",
98
- "vec3 center = xyzr.xyz;",
99
- "float radius = max(",
100
- [
101
- "xyzr.w * uniRadiusMultiplier,",
102
- "uniMinRadius * (uniProjectionMatrix * uniModelViewMatrix * uniTransfoMatrix * vec4(center, 1)).w",
103
- ],
104
- ");",
105
- "vec3 dir = attXYZR1.xyz - attXYZR0.xyz;",
106
- "float len = length(dir);",
107
- "if (len == 0.0) {",
108
- ["// Just a sphere", "pos *= radius;", "pos += center.xyz;"],
109
- "} else {",
110
- [
111
- "// Full capsule",
112
- "vec3 Z = dir / len;",
113
- "vec3 v = abs(Z.z) > 0.7 ? vec3(1,0,0) : vec3(0,0,1);",
114
- "vec3 Y = cross(v, Z);",
115
- "vec3 X = cross(Y, Z);",
116
- "mat3 mat = mat3(X, Y, Z);",
117
- "pos *= radius;",
118
- "pos = mat * pos + center.xyz;",
119
- "normal = mat * normal;",
120
- ],
121
- "}",
122
- "gl_Position = uniProjectionMatrix * uniModelViewMatrix * uniTransfoMatrix * vec4(pos, 1);",
123
- "applyMaterial();",
124
- "varNormal = normal;",
125
- ],
126
- }).code;
127
- const frag = new TgdShaderFragment({
128
- uniforms: material.uniforms,
129
- outputs: { FragColor: "vec4" },
130
- varying: material.varyings,
131
- functions: Object.assign(Object.assign({}, material.extraFragmentShaderFunctions), { applyMaterial: [
132
- "vec4 applyMaterial() {",
133
- [material.fragmentShaderCode],
134
- "}",
135
- ] }),
136
- mainCode: ["FragColor = applyMaterial();"],
137
- }).code;
138
- const prg = new TgdProgram(context.gl, {
139
- name: `TgdPainterSegments/TgdProgram#${this.id}`,
140
- vert,
141
- frag,
142
- });
143
- this.prg = prg;
144
- if (dataset instanceof TgdPainterSegments) {
145
- if (dataset.vao.gl !== context.gl) {
146
- throw new Error("[TgdPainterSegments] You cannot share a VAO accross different contexts!");
147
- }
148
- this.vao = dataset.vao;
149
- this.vao.share();
150
- this.instanceCount = dataset.instanceCount;
151
- }
152
- else if (dataset) {
153
- const instance = extract(dataset);
154
- instance.addAttributes({
155
- attXYZR0: "vec4",
156
- attUV0: "vec2",
157
- attInfluence0: "float",
158
- attXYZR1: "vec4",
159
- attUV1: "vec2",
160
- attInfluence1: "float",
161
- });
162
- this.vao = new TgdVertexArray(context.gl, prg, [geometry.dataset, instance], geometry.elements);
163
- this.instanceCount = instance.count;
164
- }
165
- else {
166
- console.error("[TgdPainterSegments] options =", options); // @FIXME: Remove this line written on 2026-02-04 at 19:53
167
- throw new Error("option `dataset` of TgdPainterSegments is undefined!");
168
- }
169
- this.vertexCount = (_e = (_d = geometry.elements) === null || _d === void 0 ? void 0 : _d.length) !== null && _e !== void 0 ? _e : 0;
170
- }
171
- getBuffer() {
172
- return this.vao.getBuffer(1);
173
- }
174
- delete() {
175
- this.vao.delete();
176
- this.prg.delete();
177
- }
178
- paint(time, delay) {
179
- var _a, _b;
180
- const { context, prg, vao, vertexCount, instanceCount, material } = this;
181
- const { gl, camera } = context;
182
- gl.disable(gl.DITHER);
183
- prg.use();
184
- (_b = (_a = this.material).setUniforms) === null || _b === void 0 ? void 0 : _b.call(_a, { program: prg, context, time, delay });
185
- prg.uniform1f("uniMinRadius", (this.minRadius * 2) / gl.drawingBufferHeight);
186
- prg.uniform1f("uniRadiusMultiplier", this.radiusMultiplier);
187
- prg.uniformMatrix4fv("uniTransfoMatrix", this.transfo.matrix);
188
- prg.uniformMatrix4fv("uniModelViewMatrix", camera.matrixModelView);
189
- prg.uniformMatrix4fv("uniProjectionMatrix", camera.matrixProjection);
190
- material.applyState(this.context, () => {
191
- vao.bind();
192
- gl.drawElementsInstanced(gl.TRIANGLES, vertexCount, gl.UNSIGNED_SHORT, 0, instanceCount);
193
- vao.unbind();
194
- });
195
- }
196
- }
197
- export class TgdPainterSegmentsData {
198
- constructor() {
199
- this._count = 0;
200
- this.attXYZR0 = [];
201
- this.attUV0 = [];
202
- this.attInfluence0 = [];
203
- this.attXYZR1 = [];
204
- this.attUV1 = [];
205
- this.attInfluence1 = [];
206
- /**
207
- * You can rename the attributes if you need to use
208
- * them in another Painter.
209
- */
210
- this.makeDataset = (args = {}) => {
211
- const dataset = TgdPainterSegments.createDataset(args);
212
- const { attXYZR0 = "attXYZR0", attUV0 = "attUV0", attInfluence0 = "attInfluence0", attXYZR1 = "attXYZR1", attUV1 = "attUV1", attInfluence1 = "attInfluence1", } = args;
213
- dataset.set(attXYZR0, new Float32Array(this.attXYZR0));
214
- dataset.set(attUV0, new Float32Array(this.attUV0));
215
- dataset.set(attInfluence0, new Float32Array(this.attInfluence0));
216
- dataset.set(attXYZR1, new Float32Array(this.attXYZR1));
217
- dataset.set(attUV1, new Float32Array(this.attUV1));
218
- dataset.set(attInfluence1, new Float32Array(this.attInfluence1));
219
- return dataset;
220
- };
221
- }
222
- get count() {
223
- return this._count;
224
- }
225
- getXYZR0(index) {
226
- var _a, _b, _c, _d;
227
- const arr = this.attXYZR0;
228
- const offset = index * 4;
229
- return [
230
- (_a = arr[offset + 0]) !== null && _a !== void 0 ? _a : 0,
231
- (_b = arr[offset + 1]) !== null && _b !== void 0 ? _b : 0,
232
- (_c = arr[offset + 2]) !== null && _c !== void 0 ? _c : 0,
233
- (_d = arr[offset + 3]) !== null && _d !== void 0 ? _d : 0,
234
- ];
235
- }
236
- getXYZR1(index) {
237
- var _a, _b, _c, _d;
238
- const arr = this.attXYZR1;
239
- const offset = index * 4;
240
- return [
241
- (_a = arr[offset + 0]) !== null && _a !== void 0 ? _a : 0,
242
- (_b = arr[offset + 1]) !== null && _b !== void 0 ? _b : 0,
243
- (_c = arr[offset + 2]) !== null && _c !== void 0 ? _c : 0,
244
- (_d = arr[offset + 3]) !== null && _d !== void 0 ? _d : 0,
245
- ];
246
- }
247
- /**
248
- * @param XYZR0 (x,y,z) and radius of point A.
249
- * @param XYZR1 (x,y,z) and radius of point B.
250
- * @param UV0 Texture coordinates for point A.
251
- * @param UV1 Texture coordinates for point B.
252
- * @param radiusMultiplierInfluence0 If you put 0, the radius won't change regardless to the currently applied radius multiplicator.
253
- * @param radiusMultiplierInfluence1
254
- */
255
- add(XYZR0, XYZR1, UV0 = [0, 0], UV1 = [0, 0], radiusMultiplierInfluence0 = 1, radiusMultiplierInfluence1 = 1) {
256
- this.attXYZR0.push(...XYZR0);
257
- this.attUV0.push(...UV0);
258
- this.attInfluence0.push(radiusMultiplierInfluence0);
259
- this.attXYZR1.push(...XYZR1);
260
- this.attUV1.push(...UV1);
261
- this.attInfluence1.push(radiusMultiplierInfluence1);
262
- this._count++;
263
- }
264
- }
265
- function extract(arg) {
266
- if (typeof arg === "function")
267
- return arg();
268
- return arg;
269
- }
270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGFpbnRlci90dWJlcy9zZWdtZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sRUFBb0IsMEJBQTBCLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRWhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQW9DdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFVBQVU7SUFDakQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUNwQixRQUFRLEdBQUcsVUFBVSxFQUNyQixNQUFNLEdBQUcsUUFBUSxFQUNqQixhQUFhLEdBQUcsZUFBZSxFQUMvQixRQUFRLEdBQUcsVUFBVSxFQUNyQixNQUFNLEdBQUcsUUFBUSxFQUNqQixhQUFhLEdBQUcsZUFBZSxFQUMvQixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sTUFXRixFQUFFO1FBQ04sTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQzdCO1lBQ0MsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNO1lBQ2xCLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTTtZQUNoQixDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU87WUFDeEIsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNO1lBQ2xCLENBQUMsTUFB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