@tolokoban/tgd 2.0.75 → 2.0.76
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.
|
@@ -31,13 +31,43 @@ export interface TgdPainterPointsCloudOptions {
|
|
|
31
31
|
mustDeleteTexture?: boolean;
|
|
32
32
|
texture?: TgdTexture2D;
|
|
33
33
|
/**
|
|
34
|
-
* The content of a fragment shader function
|
|
34
|
+
* The content of a fragment shader function that takes
|
|
35
35
|
* `vec4 color` as argument and must return a `vec4` color.
|
|
36
36
|
*
|
|
37
|
+
* The following uniforms are available:
|
|
38
|
+
*
|
|
39
|
+
* ```glsl
|
|
40
|
+
* uniform float uniSpecularExponent;
|
|
41
|
+
* uniform float uniSpecularIntensity;
|
|
42
|
+
* uniform float uniShadowThickness;
|
|
43
|
+
* uniform float uniShadowIntensity;
|
|
44
|
+
* uniform float uniLight;
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
37
47
|
* You can also use `TgdPainterPointsCloud.fragCode*()` static functions
|
|
38
48
|
* to provide preset functions.
|
|
39
49
|
*/
|
|
40
50
|
fragCode?: TgdCodeBloc;
|
|
51
|
+
/**
|
|
52
|
+
* Default to 10
|
|
53
|
+
*/
|
|
54
|
+
specularExponent?: number;
|
|
55
|
+
/**
|
|
56
|
+
* Default to 0.33
|
|
57
|
+
*/
|
|
58
|
+
specularIntensity?: number;
|
|
59
|
+
/**
|
|
60
|
+
* Default to 0.5
|
|
61
|
+
*/
|
|
62
|
+
shadowIntensity?: number;
|
|
63
|
+
/**
|
|
64
|
+
* Default to 1
|
|
65
|
+
*/
|
|
66
|
+
shadowThickness?: number;
|
|
67
|
+
/**
|
|
68
|
+
* Default to 1
|
|
69
|
+
*/
|
|
70
|
+
light?: number;
|
|
41
71
|
}
|
|
42
72
|
export declare class TgdPainterPointsCloud extends TgdPainter {
|
|
43
73
|
readonly context: TgdContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"points-cloud.d.ts","sourceRoot":"","sources":["../../../src/painter/points-cloud/points-cloud.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"points-cloud.d.ts","sourceRoot":"","sources":["../../../src/painter/points-cloud/points-cloud.ts"],"names":[],"mappings":"AACA,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,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,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;aAgD7B,OAAO,EAAE,UAAU;IA/CvC;;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;KAC1B,CAAM,GACR,WAAW;IAkBd,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"}
|
|
@@ -23,7 +23,7 @@ export class TgdPainterPointsCloud extends TgdPainter {
|
|
|
23
23
|
];
|
|
24
24
|
}
|
|
25
25
|
constructor(context, options) {
|
|
26
|
-
var _a, _b, _c, _d, _e;
|
|
26
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
27
27
|
super();
|
|
28
28
|
this.context = context;
|
|
29
29
|
this.radiusMultiplier = 1;
|
|
@@ -36,12 +36,17 @@ export class TgdPainterPointsCloud extends TgdPainter {
|
|
|
36
36
|
this.name = (_a = options.name) !== null && _a !== void 0 ? _a : this.name;
|
|
37
37
|
this.radiusMultiplier = (_b = options.radiusMultiplier) !== null && _b !== void 0 ? _b : 1;
|
|
38
38
|
this.minSizeInPixels = (_c = options.minSizeInPixels) !== null && _c !== void 0 ? _c : 0;
|
|
39
|
+
this.specularExponent = (_d = options.specularExponent) !== null && _d !== void 0 ? _d : 10;
|
|
40
|
+
this.specularIntensity = (_e = options.specularIntensity) !== null && _e !== void 0 ? _e : 0.33;
|
|
41
|
+
this.shadowIntensity = (_f = options.shadowIntensity) !== null && _f !== void 0 ? _f : 0.5;
|
|
42
|
+
this.shadowThickness = (_g = options.shadowThickness) !== null && _g !== void 0 ? _g : 1;
|
|
43
|
+
this.light = (_h = options.light) !== null && _h !== void 0 ? _h : 1;
|
|
39
44
|
this.dataPoint = options.dataPoint;
|
|
40
45
|
if ((this.dataPoint.length & 3) !== 0) {
|
|
41
46
|
throw new Error(`dataPoint must have a length that is an integral multiple of 4: [x, y, z, radius, ...]!\ndataPoint.length === ${this.dataPoint.length}`);
|
|
42
47
|
}
|
|
43
48
|
this.dataUV =
|
|
44
|
-
(
|
|
49
|
+
(_j = options.dataUV) !== null && _j !== void 0 ? _j : new Float32Array(this.dataPoint.length >> 1);
|
|
45
50
|
if (this.dataPoint.length !== this.dataUV.length * 2) {
|
|
46
51
|
const message = `dataUV must be half of the size of dataPoint: [u, v, ...]!\ndataPoint.length === ${this.dataPoint.length}, \ndataUV.length === ${this.dataUV.length}`;
|
|
47
52
|
console.error("[TgdPainterPointsCloud]", message);
|
|
@@ -52,7 +57,7 @@ export class TgdPainterPointsCloud extends TgdPainter {
|
|
|
52
57
|
}
|
|
53
58
|
if (options.texture) {
|
|
54
59
|
this.texture = options.texture;
|
|
55
|
-
this.textureMustBeDeleted = (
|
|
60
|
+
this.textureMustBeDeleted = (_k = options.mustDeleteTexture) !== null && _k !== void 0 ? _k : false;
|
|
56
61
|
}
|
|
57
62
|
else {
|
|
58
63
|
this.texture = new TgdTexture2D(context).loadBitmap(tgdCanvasCreateGradientHorizontal(128, tgdColorMakeHueWheel({ luminance: 0.2 })));
|
|
@@ -103,11 +108,6 @@ export class TgdPainterPointsCloud extends TgdPainter {
|
|
|
103
108
|
uniMinSizeInPixels: "float",
|
|
104
109
|
uniRadiusMultiplier: "float",
|
|
105
110
|
uniHalfScreenHeightInPixels: "float",
|
|
106
|
-
uniSpecularExponent: "float",
|
|
107
|
-
uniSpecularIntensity: "float",
|
|
108
|
-
uniShadowIntensity: "float",
|
|
109
|
-
uniShadowThickness: "float",
|
|
110
|
-
uniLight: "float",
|
|
111
111
|
uniModelViewMatrix: "mat4",
|
|
112
112
|
uniProjectionMatrix: "mat4",
|
|
113
113
|
},
|
|
@@ -132,6 +132,11 @@ export class TgdPainterPointsCloud extends TgdPainter {
|
|
|
132
132
|
const frag = new TgdShaderFragment({
|
|
133
133
|
uniforms: {
|
|
134
134
|
uniTexture: "sampler2D",
|
|
135
|
+
uniSpecularExponent: "float",
|
|
136
|
+
uniSpecularIntensity: "float",
|
|
137
|
+
uniShadowIntensity: "float",
|
|
138
|
+
uniShadowThickness: "float",
|
|
139
|
+
uniLight: "float",
|
|
135
140
|
},
|
|
136
141
|
varying: {
|
|
137
142
|
varUV: "vec2",
|
|
@@ -145,10 +150,11 @@ export class TgdPainterPointsCloud extends TgdPainter {
|
|
|
145
150
|
"float len = 1.0 - dot(coords, coords);",
|
|
146
151
|
"if (len < 0.0) discard;",
|
|
147
152
|
"gl_FragDepth = gl_FragCoord.z - len * 1e-5;",
|
|
148
|
-
`float light = smoothstep(0.0, uniShadowThickness, len) * uniShadowIntensity + (1 - uniShadowIntensity);`,
|
|
153
|
+
`float light = smoothstep(0.0, uniShadowThickness, len) * uniShadowIntensity + (1.0 - uniShadowIntensity);`,
|
|
149
154
|
`float spec = pow(len, uniSpecularExponent) * uniSpecularIntensity;`,
|
|
150
155
|
"return color * vec4(vec3(light * uniLight), 1.0) + vec4(vec3(spec), 0.0);",
|
|
151
156
|
],
|
|
157
|
+
"}",
|
|
152
158
|
],
|
|
153
159
|
},
|
|
154
160
|
mainCode: [
|
|
@@ -160,4 +166,4 @@ export class TgdPainterPointsCloud extends TgdPainter {
|
|
|
160
166
|
return program;
|
|
161
167
|
}
|
|
162
168
|
}
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRzLWNsb3VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhaW50ZXIvcG9pbnRzLWNsb3VkL3BvaW50cy1jbG91ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFekMsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzlELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNqRCxPQUFPLEVBQWUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBc0U3RSxNQUFNLE9BQU8scUJBQXNCLFNBQVEsVUFBVTtJQUNqRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQ2pCLFVBS0ssRUFBRTtRQUVQLE1BQU0sRUFDRixnQkFBZ0IsR0FBRyxFQUFFLEVBQ3JCLGlCQUFpQixHQUFHLElBQUksRUFDeEIsZUFBZSxHQUFHLEdBQUcsRUFDckIsZUFBZSxHQUFHLEdBQUcsR0FDeEIsR0FBRyxPQUFPLENBQUE7UUFDWCxPQUFPO1lBQ0gsaURBQWlEO1lBQ2pELHdDQUF3QztZQUN4Qyx5QkFBeUI7WUFDekIsNkNBQTZDO1lBQzdDLGlDQUFpQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLGVBQWUsTUFBTSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUc7WUFDL0gseUJBQXlCLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENB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
|