@tolokoban/tgd 2.0.139 → 2.0.141
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -0
- package/lib/dist/camera/camera.d.ts +13 -2
- package/lib/dist/camera/camera.d.ts.map +1 -1
- package/lib/dist/camera/camera.js +43 -10
- package/lib/dist/context/console.d.ts +5 -5
- package/lib/dist/context/console.d.ts.map +1 -1
- package/lib/dist/context/console.js +26 -26
- package/lib/dist/context/context.d.ts +12 -2
- package/lib/dist/context/context.d.ts.map +1 -1
- package/lib/dist/context/context.js +28 -6
- package/lib/dist/dataset/dataset.d.ts.map +1 -1
- package/lib/dist/dataset/dataset.js +22 -9
- package/lib/dist/debug/tools.d.ts +1 -1
- package/lib/dist/debug/tools.d.ts.map +1 -1
- package/lib/dist/debug/tools.js +3 -3
- package/lib/dist/material/diffuse.d.ts.map +1 -1
- package/lib/dist/material/diffuse.js +7 -6
- package/lib/dist/material/flat-texture.d.ts.map +1 -1
- package/lib/dist/material/flat-texture.js +7 -9
- package/lib/dist/material/flat.d.ts.map +1 -1
- package/lib/dist/material/flat.js +2 -2
- package/lib/dist/material/material.d.ts +5 -2
- package/lib/dist/material/material.d.ts.map +1 -1
- package/lib/dist/material/material.js +83 -4
- package/lib/dist/math/mat4.d.ts +1 -1
- package/lib/dist/math/mat4.d.ts.map +1 -1
- package/lib/dist/math/mat4.js +58 -14
- package/lib/dist/painter/gizmo/gizmo.d.ts +3 -3
- package/lib/dist/painter/gizmo/gizmo.d.ts.map +1 -1
- package/lib/dist/painter/gizmo/gizmo.js +11 -7
- package/lib/dist/painter/gizmo/painters/normal.d.ts +2 -2
- package/lib/dist/painter/gizmo/painters/normal.d.ts.map +1 -1
- package/lib/dist/painter/gizmo/painters/normal.js +30 -6
- package/lib/dist/painter/group.d.ts +1 -0
- package/lib/dist/painter/group.d.ts.map +1 -1
- package/lib/dist/painter/group.js +3 -1
- package/lib/dist/painter/mesh/mesh/mesh.d.ts.map +1 -1
- package/lib/dist/painter/mesh/mesh/mesh.js +20 -7
- package/lib/dist/painter/points-cloud/points-cloud-morphing.d.ts +15 -8
- package/lib/dist/painter/points-cloud/points-cloud-morphing.d.ts.map +1 -1
- package/lib/dist/painter/points-cloud/points-cloud-morphing.js +53 -48
- package/lib/dist/painter/points-cloud/points-cloud.d.ts +17 -11
- package/lib/dist/painter/points-cloud/points-cloud.d.ts.map +1 -1
- package/lib/dist/painter/points-cloud/points-cloud.js +56 -54
- package/lib/dist/painter/points-cloud/shaders/frag-flat.d.ts +3 -0
- package/lib/dist/painter/points-cloud/shaders/frag-flat.d.ts.map +1 -0
- package/lib/dist/painter/points-cloud/shaders/frag-flat.js +9 -0
- package/lib/dist/painter/points-cloud/shaders/frag-sphere.d.ts +44 -0
- package/lib/dist/painter/points-cloud/shaders/frag-sphere.d.ts.map +1 -0
- package/lib/dist/painter/points-cloud/shaders/frag-sphere.js +33 -0
- package/lib/dist/painter/points-cloud/shaders/vert.d.ts +4 -0
- package/lib/dist/painter/points-cloud/shaders/vert.d.ts.map +1 -0
- package/lib/dist/painter/points-cloud/shaders/vert.js +34 -0
- package/lib/dist/painter/program.d.ts +1 -1
- package/lib/dist/painter/program.d.ts.map +1 -1
- package/lib/dist/painter/program.js +12 -8
- package/lib/dist/painter/segments/segments.d.ts.map +1 -1
- package/lib/dist/painter/segments/segments.js +3 -1
- package/lib/dist/shader/code.d.ts +2 -2
- package/lib/dist/shader/code.d.ts.map +1 -1
- package/lib/dist/shader/code.js +5 -2
- package/lib/dist/version.d.ts +1 -1
- package/lib/dist/version.js +1 -1
- package/package.json +2 -1
|
@@ -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,
|
|
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;AACvC,OAAO,EAAkB,mCAAmC,EAAE,MAAM,uBAAuB,CAAA;AAG3F,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,CAAC,iCAAiC,EAAE,iCAAiC,CAAC,EAAE,CAAA;IAC9E;;;;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;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;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;aAsCrC,OAAO,EAAE,UAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAtC5B;;OAEG;IACH,MAAM,CAAC,cAAc,CACjB,OAAO,GAAE,mCAAwC,GAClD,WAAW;IAId;;OAEG;IACH,MAAM,CAAC,YAAY,IAAI,WAAW;IAIlC;;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,EAClB,OAAO,EAAE,oCAAoC;IAsClE,MAAM,IAAI,IAAI;IAMd,KAAK,IAAI,IAAI;IA6Bb,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM;IAOtB,OAAO,CAAC,yBAAyB;IAgCjC,OAAO,CAAC,0BAA0B;IAWlC,IAAI,KAAK,WAGR;IAED,OAAO,KAAK,GAAG,GAGd;IAED,OAAO,CAAC,aAAa;CA+DxB"}
|
|
@@ -1,35 +1,30 @@
|
|
|
1
1
|
import { tgdColorMakeHueWheel } from "./../../color/index.js";
|
|
2
2
|
import { TgdDataset } from "./../../dataset/index.js";
|
|
3
3
|
import { TgdProgram } from "./../../program/index.js";
|
|
4
|
-
import { TgdShaderFragment, TgdShaderVertex } from "./../../shader/index.js";
|
|
4
|
+
import { TgdShaderFragment, TgdShaderVertex, } from "./../../shader/index.js";
|
|
5
5
|
import { TgdTexture2D } from "./../../texture/index.js";
|
|
6
6
|
import { tgdCanvasCreateGradientHorizontal } from "./../../utils/index.js";
|
|
7
7
|
import { TgdVertexArray } from "./../../vao/index.js";
|
|
8
8
|
import { TgdPainter } from "../painter.js";
|
|
9
|
+
import { fragCodeSphere } from "./shaders/frag-sphere.js";
|
|
10
|
+
import { vertInstancesCode } from "./shaders/vert.js";
|
|
9
11
|
export class TgdPainterPointsCloudMorphing extends TgdPainter {
|
|
10
12
|
/**
|
|
11
13
|
* Draw spheres with simple diffuse/specular material.
|
|
12
14
|
*/
|
|
13
15
|
static fragCodeSphere(options = {}) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return
|
|
21
|
-
"vec2 coords = 2.0 * (gl_PointCoord - vec2(.5));",
|
|
22
|
-
"float len = 1.0 - dot(coords, coords);",
|
|
23
|
-
"if (len < 0.0) discard;",
|
|
24
|
-
"gl_FragDepth = gl_FragCoord.z - len * 1e-5;",
|
|
25
|
-
`float light = smoothstep(0.0, ${ShT}, len) * ${ShI} + (1.0 - ${ShI});`,
|
|
26
|
-
specularIntensity ? `float spec = pow(len, ${SpE}) * ${SpI};` : "// No specular.",
|
|
27
|
-
`return color * vec4(vec3(light * ${L}), 1.0) + vec4(vec3(spec), 0.0);`,
|
|
28
|
-
];
|
|
16
|
+
return fragCodeSphere(options);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Draw disk with uniform color.
|
|
20
|
+
*/
|
|
21
|
+
static fragCodeFlat() {
|
|
22
|
+
return TgdPainterPointsCloudMorphing.fragCodeFlat();
|
|
29
23
|
}
|
|
30
24
|
constructor(context, options) {
|
|
31
25
|
super();
|
|
32
26
|
this.context = context;
|
|
27
|
+
this.options = options;
|
|
33
28
|
/**
|
|
34
29
|
* Mixing between two clouds: 0.0 (firts) and 1.0 (second).
|
|
35
30
|
*/
|
|
@@ -65,10 +60,11 @@ export class TgdPainterPointsCloudMorphing extends TgdPainter {
|
|
|
65
60
|
this.counts = options.data.map(([{ point }]) => point.length >> 2);
|
|
66
61
|
this.program = this.createProgram(options.fragCode);
|
|
67
62
|
this.vaos = options.data.map(([dataA, dataB]) => {
|
|
68
|
-
const datasetA = this.
|
|
69
|
-
const datasetB = this.
|
|
63
|
+
const datasetA = this.createDatasetForInstances(dataA, "A");
|
|
64
|
+
const datasetB = this.createDatasetForInstances(dataB, "B");
|
|
65
|
+
const billboard = this.createDatasetForBillboards();
|
|
70
66
|
this.datasets.push(datasetA, datasetB);
|
|
71
|
-
return new TgdVertexArray(context.gl, this.program, [datasetA, datasetB]);
|
|
67
|
+
return new TgdVertexArray(context.gl, this.program, [datasetA, datasetB, billboard]);
|
|
72
68
|
});
|
|
73
69
|
}
|
|
74
70
|
delete() {
|
|
@@ -78,26 +74,32 @@ export class TgdPainterPointsCloudMorphing extends TgdPainter {
|
|
|
78
74
|
this.vao.delete();
|
|
79
75
|
}
|
|
80
76
|
paint() {
|
|
81
|
-
const { context, program, vao, texture, count, radiusMultiplier, minSizeInPixels } = this;
|
|
77
|
+
const { context, program, vao, texture, count, radiusMultiplier, minSizeInPixels, } = this;
|
|
82
78
|
const { gl, camera } = context;
|
|
83
79
|
program.use();
|
|
84
80
|
texture.activate(0, program, "uniTexture");
|
|
85
81
|
program.uniform1f("uniMix", this.mix);
|
|
86
82
|
program.uniform1f("uniRadiusMultiplier", radiusMultiplier);
|
|
87
83
|
program.uniform1f("uniMinSizeInPixels", minSizeInPixels);
|
|
88
|
-
program.uniform1f("uniScreenHeightInPixels", context.height);
|
|
89
84
|
program.uniform1f("uniSpecularExponent", this.specularExponent);
|
|
90
85
|
program.uniform1f("uniSpecularIntensity", this.specularIntensity);
|
|
91
86
|
program.uniform1f("uniShadowIntensity", this.shadowIntensity);
|
|
92
87
|
program.uniform1f("uniShadowThickness", this.shadowThickness);
|
|
93
88
|
program.uniform1f("uniLight", this.light);
|
|
89
|
+
program.uniform2f("uniAspectRatio", context.aspectRatioInverse, 1);
|
|
94
90
|
program.uniformMatrix4fv("uniModelViewMatrix", camera.matrixModelView);
|
|
95
91
|
program.uniformMatrix4fv("uniProjectionMatrix", camera.matrixProjection);
|
|
96
92
|
vao.bind();
|
|
97
|
-
gl.
|
|
93
|
+
gl.drawArraysInstanced(gl.TRIANGLE_FAN, 0, 4, count);
|
|
98
94
|
vao.unbind();
|
|
99
95
|
}
|
|
100
|
-
|
|
96
|
+
debug(caption) {
|
|
97
|
+
console.debug(`[${caption ?? this.name}] TgdPainterPointsCloudMorphing( options ):`, this.options);
|
|
98
|
+
for (const vao of this.vaos) {
|
|
99
|
+
vao.debug();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
createDatasetForInstances(data, suffix) {
|
|
101
103
|
const { point } = data;
|
|
102
104
|
if (point.length % 4 !== 0) {
|
|
103
105
|
throw new Error(`[TgdPainterPointsCloud] point.length must be a multiple of 4! Current value: ${point.length}`);
|
|
@@ -114,11 +116,18 @@ export class TgdPainterPointsCloudMorphing extends TgdPainter {
|
|
|
114
116
|
const dataset = new TgdDataset({
|
|
115
117
|
[attPoint]: "vec4",
|
|
116
118
|
[attUV]: "vec2",
|
|
117
|
-
});
|
|
119
|
+
}, { divisor: 1 });
|
|
118
120
|
dataset.set(attPoint, point);
|
|
119
121
|
dataset.set(attUV, uv);
|
|
120
122
|
return dataset;
|
|
121
123
|
}
|
|
124
|
+
createDatasetForBillboards() {
|
|
125
|
+
const dataset = new TgdDataset({
|
|
126
|
+
attPointCoord: "vec2",
|
|
127
|
+
});
|
|
128
|
+
dataset.set("attPointCoord", new Float32Array([-1, -1, -1, +1, +1, +1, +1, -1]));
|
|
129
|
+
return dataset;
|
|
130
|
+
}
|
|
122
131
|
get count() {
|
|
123
132
|
const [count] = this.counts;
|
|
124
133
|
return count;
|
|
@@ -131,6 +140,8 @@ export class TgdPainterPointsCloudMorphing extends TgdPainter {
|
|
|
131
140
|
const vert = new TgdShaderVertex({
|
|
132
141
|
uniforms: {
|
|
133
142
|
uniMix: "float",
|
|
143
|
+
uniTexture: "sampler2D",
|
|
144
|
+
uniAspectRatio: "vec2",
|
|
134
145
|
uniMinSizeInPixels: "float",
|
|
135
146
|
uniRadiusMultiplier: "float",
|
|
136
147
|
uniScreenHeightInPixels: "float",
|
|
@@ -142,28 +153,24 @@ export class TgdPainterPointsCloudMorphing extends TgdPainter {
|
|
|
142
153
|
attUV_A: "vec2",
|
|
143
154
|
attPoint_B: "vec4",
|
|
144
155
|
attUV_B: "vec2",
|
|
156
|
+
/**
|
|
157
|
+
* Between -1.0 and +1.0
|
|
158
|
+
*/
|
|
159
|
+
attPointCoord: "vec2",
|
|
145
160
|
},
|
|
146
161
|
varying: {
|
|
147
|
-
|
|
162
|
+
varColor: "vec4",
|
|
163
|
+
varPointCoord: "vec2",
|
|
164
|
+
varDepth: "float",
|
|
148
165
|
},
|
|
149
166
|
mainCode: [
|
|
150
167
|
"vec4 attPoint = mix(attPoint_A, attPoint_B, uniMix);",
|
|
151
168
|
"vec2 attUV = mix(attUV_A, attUV_B, uniMix);",
|
|
152
|
-
|
|
153
|
-
"float radius = attPoint.w;",
|
|
154
|
-
"vec4 point = uniModelViewMatrix * vec4(attPoint.xyz, 1.0);",
|
|
155
|
-
"vec4 shift = point + vec4(0, uniRadiusMultiplier * radius, 0, 0);",
|
|
156
|
-
"gl_Position = uniProjectionMatrix * point;",
|
|
157
|
-
"vec4 screenShift = uniProjectionMatrix * shift;",
|
|
158
|
-
"gl_PointSize = max(",
|
|
159
|
-
" uniMinSizeInPixels,",
|
|
160
|
-
" abs(screenShift.y - gl_Position.y) * uniScreenHeightInPixels / gl_Position.w",
|
|
161
|
-
");",
|
|
169
|
+
...vertInstancesCode(),
|
|
162
170
|
],
|
|
163
171
|
}).code;
|
|
164
172
|
const frag = new TgdShaderFragment({
|
|
165
173
|
uniforms: {
|
|
166
|
-
uniTexture: "sampler2D",
|
|
167
174
|
uniSpecularExponent: "float",
|
|
168
175
|
uniSpecularIntensity: "float",
|
|
169
176
|
uniShadowIntensity: "float",
|
|
@@ -171,28 +178,26 @@ export class TgdPainterPointsCloudMorphing extends TgdPainter {
|
|
|
171
178
|
uniLight: "float",
|
|
172
179
|
},
|
|
173
180
|
varying: {
|
|
174
|
-
|
|
181
|
+
varColor: "vec4",
|
|
182
|
+
varPointCoord: "vec2",
|
|
183
|
+
varDepth: "float",
|
|
175
184
|
},
|
|
176
185
|
outputs: { FragColor: "vec4" },
|
|
177
186
|
functions: {
|
|
178
187
|
render: [
|
|
179
188
|
"vec4 render(vec4 color) {",
|
|
180
|
-
render ??
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
"float light = smoothstep(0.0, uniShadowThickness, len) * uniShadowIntensity + (1.0 - uniShadowIntensity);",
|
|
186
|
-
"float spec = pow(len, uniSpecularExponent) * uniSpecularIntensity;",
|
|
187
|
-
"return color * vec4(vec3(light * uniLight), 1.0) + vec4(vec3(spec), 0.0);",
|
|
188
|
-
],
|
|
189
|
+
render ??
|
|
190
|
+
fragCodeSphere({
|
|
191
|
+
...this.options,
|
|
192
|
+
enableSpecular: this.options.enableSpecular ?? true,
|
|
193
|
+
}),
|
|
189
194
|
"}",
|
|
190
195
|
],
|
|
191
196
|
},
|
|
192
|
-
mainCode: ["vec4 color =
|
|
197
|
+
mainCode: ["vec4 color = varColor;", "FragColor = render(color);"],
|
|
193
198
|
}).code;
|
|
194
199
|
const program = new TgdProgram(this.context.gl, { vert, frag });
|
|
195
200
|
return program;
|
|
196
201
|
}
|
|
197
202
|
}
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
203
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRzLWNsb3VkLW1vcnBoaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhaW50ZXIvcG9pbnRzLWNsb3VkL3BvaW50cy1jbG91ZC1tb3JwaGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsZUFBZSxHQUNsQixNQUFNLGFBQWEsQ0FBQTtBQUNwQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBdUMsTUFBTSx1QkFBdUIsQ0FBQTtBQUMzRixPQUFPLEVBQVksaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQW9GNUQsTUFBTSxPQUFPLDZCQUE4QixTQUFRLFVBQVU7SUFDekQ7O09BRUc7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUNqQixVQUErQyxFQUFFO1FBRWpELE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxZQUFZO1FBQ2YsT0FBTyw2QkFBNkIsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUN2RCxDQUFDO0lBc0JELFlBQ29CLE9BQW1CLEVBQ2xCLE9BQTZDO1FBRTlELEtBQUssRUFBRSxDQUFBO1FBSFMsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNsQixZQUFPLEdBQVAsT0FBTyxD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
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { TgdContext } from "../../context";
|
|
2
|
-
import { TgdCodeBloc } from "../../shader";
|
|
1
|
+
import type { TgdContext } from "../../context";
|
|
2
|
+
import { type TgdCodeBloc } from "../../shader";
|
|
3
3
|
import { TgdTexture2D } from "../../texture";
|
|
4
4
|
import { TgdPainter } from "../painter";
|
|
5
|
+
import { TgdPointsCloudFragCodeSphereOptions } from "./shaders/frag-sphere";
|
|
6
|
+
export { TgdPointsCloudFragCodeSphereOptions };
|
|
5
7
|
export interface TgdPainterPointsCloudOptions {
|
|
6
8
|
name?: string;
|
|
7
9
|
/**
|
|
@@ -47,6 +49,11 @@ export interface TgdPainterPointsCloudOptions {
|
|
|
47
49
|
* to provide preset functions.
|
|
48
50
|
*/
|
|
49
51
|
fragCode?: TgdCodeBloc;
|
|
52
|
+
/**
|
|
53
|
+
* Enable specularity for default material.
|
|
54
|
+
* Default to `false`
|
|
55
|
+
*/
|
|
56
|
+
enableSpecular?: boolean;
|
|
50
57
|
/**
|
|
51
58
|
* Default to 10
|
|
52
59
|
*/
|
|
@@ -70,16 +77,15 @@ export interface TgdPainterPointsCloudOptions {
|
|
|
70
77
|
}
|
|
71
78
|
export declare class TgdPainterPointsCloud extends TgdPainter {
|
|
72
79
|
readonly context: TgdContext;
|
|
80
|
+
private readonly options;
|
|
73
81
|
/**
|
|
74
82
|
* Draw spheres with simple diffuse/specular material.
|
|
75
83
|
*/
|
|
76
|
-
static fragCodeSphere(options?:
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
light: number;
|
|
82
|
-
}>): TgdCodeBloc;
|
|
84
|
+
static fragCodeSphere(options?: TgdPointsCloudFragCodeSphereOptions): TgdCodeBloc;
|
|
85
|
+
/**
|
|
86
|
+
* Draw disk with uniform color.
|
|
87
|
+
*/
|
|
88
|
+
static fragCodeFlat(): TgdCodeBloc;
|
|
83
89
|
readonly count: number;
|
|
84
90
|
texture: TgdTexture2D;
|
|
85
91
|
radiusMultiplier: number;
|
|
@@ -92,13 +98,13 @@ export declare class TgdPainterPointsCloud extends TgdPainter {
|
|
|
92
98
|
private readonly dataPoint;
|
|
93
99
|
private readonly dataUV;
|
|
94
100
|
private readonly textureMustBeDeleted;
|
|
95
|
-
private readonly dataset;
|
|
96
101
|
private readonly program;
|
|
97
102
|
private readonly vao;
|
|
98
103
|
constructor(context: TgdContext, options: TgdPainterPointsCloudOptions);
|
|
99
104
|
delete(): void;
|
|
100
105
|
paint(): void;
|
|
101
|
-
private
|
|
106
|
+
private createDatasetForInstances;
|
|
107
|
+
private createDatasetForBillboards;
|
|
102
108
|
private createProgram;
|
|
103
109
|
}
|
|
104
110
|
//# sourceMappingURL=points-cloud.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"points-cloud.d.ts","sourceRoot":"","sources":["../../../src/painter/points-cloud/points-cloud.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"points-cloud.d.ts","sourceRoot":"","sources":["../../../src/painter/points-cloud/points-cloud.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAG9C,OAAO,EACN,KAAK,WAAW,EAGhB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,OAAO,EAEN,mCAAmC,EACnC,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAAE,mCAAmC,EAAE,CAAA;AAE9C,MAAM,WAAW,4BAA4B;IAC5C,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;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;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;CACd;AAED,qBAAa,qBAAsB,SAAQ,UAAU;aAmCnC,OAAO,EAAE,UAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAnCzB;;OAEG;IACH,MAAM,CAAC,cAAc,CACpB,OAAO,GAAE,mCAAwC,GAC/C,WAAW;IAId;;OAEG;IACH,MAAM,CAAC,YAAY,IAAI,WAAW;IAIlC,SAAgB,KAAK,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,YAAY,CAAA;IACrB,gBAAgB,SAAI;IACpB,eAAe,SAAI;IAEnB,gBAAgB,SAAK;IACrB,iBAAiB,SAAI;IACrB,eAAe,SAAO;IACtB,eAAe,SAAM;IACrB,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,GAAG,CAAgB;gBAGnB,OAAO,EAAE,UAAU,EAClB,OAAO,EAAE,4BAA4B;IAsDvD,MAAM,IAAI,IAAI;IAMd,KAAK,IAAI,IAAI;IA4Bb,OAAO,CAAC,yBAAyB;IAejC,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,aAAa;CAuDrB"}
|
|
@@ -1,41 +1,37 @@
|
|
|
1
1
|
import { tgdColorMakeHueWheel } from "./../../color/index.js";
|
|
2
2
|
import { TgdDataset } from "./../../dataset/index.js";
|
|
3
3
|
import { TgdProgram } from "./../../program/index.js";
|
|
4
|
-
import { TgdShaderFragment, TgdShaderVertex } from "./../../shader/index.js";
|
|
4
|
+
import { TgdShaderFragment, TgdShaderVertex, } from "./../../shader/index.js";
|
|
5
5
|
import { TgdTexture2D } from "./../../texture/index.js";
|
|
6
6
|
import { tgdCanvasCreateGradientHorizontal } from "./../../utils/index.js";
|
|
7
7
|
import { TgdVertexArray } from "./../../vao/index.js";
|
|
8
8
|
import { TgdPainter } from "../painter.js";
|
|
9
|
+
import { fragCodeFlat } from "./shaders/frag-flat.js";
|
|
10
|
+
import { fragCodeSphere, } from "./shaders/frag-sphere.js";
|
|
11
|
+
import { vertInstancesCode } from "./shaders/vert.js";
|
|
9
12
|
export class TgdPainterPointsCloud extends TgdPainter {
|
|
10
13
|
/**
|
|
11
14
|
* Draw spheres with simple diffuse/specular material.
|
|
12
15
|
*/
|
|
13
16
|
static fragCodeSphere(options = {}) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return
|
|
21
|
-
"vec2 coords = 2.0 * (gl_PointCoord - vec2(.5));",
|
|
22
|
-
"float len = 1.0 - dot(coords, coords);",
|
|
23
|
-
"if (len < 0.0) discard;",
|
|
24
|
-
"gl_FragDepth = gl_FragCoord.z - len * 1e-5;",
|
|
25
|
-
`float light = smoothstep(0.0, ${ShT}, len) * ${ShI} + (1.0 - ${ShI});`,
|
|
26
|
-
specularIntensity ? `float spec = pow(len, ${SpE}) * ${SpI};` : "// No specular.",
|
|
27
|
-
`return color * vec4(vec3(light * ${L}), 1.0) + vec4(vec3(spec), 0.0);`,
|
|
28
|
-
];
|
|
17
|
+
return fragCodeSphere(options);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Draw disk with uniform color.
|
|
21
|
+
*/
|
|
22
|
+
static fragCodeFlat() {
|
|
23
|
+
return fragCodeFlat();
|
|
29
24
|
}
|
|
30
25
|
constructor(context, options) {
|
|
31
26
|
super();
|
|
32
27
|
this.context = context;
|
|
28
|
+
this.options = options;
|
|
33
29
|
this.radiusMultiplier = 1;
|
|
34
30
|
this.minSizeInPixels = 0;
|
|
35
|
-
this.specularExponent =
|
|
36
|
-
this.specularIntensity =
|
|
37
|
-
this.shadowIntensity = 0.
|
|
38
|
-
this.shadowThickness = 1;
|
|
31
|
+
this.specularExponent = 14;
|
|
32
|
+
this.specularIntensity = 1;
|
|
33
|
+
this.shadowIntensity = 0.75;
|
|
34
|
+
this.shadowThickness = 1.2;
|
|
39
35
|
this.light = 1;
|
|
40
36
|
this.name = options.name ?? this.name;
|
|
41
37
|
this.radiusMultiplier = options.radiusMultiplier ?? 1;
|
|
@@ -67,9 +63,13 @@ export class TgdPainterPointsCloud extends TgdPainter {
|
|
|
67
63
|
this.textureMustBeDeleted = true;
|
|
68
64
|
}
|
|
69
65
|
this.count = this.dataUV.length >> 1;
|
|
70
|
-
|
|
66
|
+
const datasetInstances = this.createDatasetForInstances();
|
|
67
|
+
const datasetBillboards = this.createDatasetForBillboards();
|
|
71
68
|
this.program = this.createProgram(options.fragCode);
|
|
72
|
-
this.vao = new TgdVertexArray(context.gl, this.program, [
|
|
69
|
+
this.vao = new TgdVertexArray(context.gl, this.program, [
|
|
70
|
+
datasetInstances,
|
|
71
|
+
datasetBillboards,
|
|
72
|
+
]);
|
|
73
73
|
}
|
|
74
74
|
delete() {
|
|
75
75
|
if (this.textureMustBeDeleted)
|
|
@@ -78,65 +78,69 @@ export class TgdPainterPointsCloud extends TgdPainter {
|
|
|
78
78
|
this.vao.delete();
|
|
79
79
|
}
|
|
80
80
|
paint() {
|
|
81
|
-
const { context, program, vao, texture, count, radiusMultiplier, minSizeInPixels } = this;
|
|
81
|
+
const { context, program, vao, texture, count, radiusMultiplier, minSizeInPixels, } = this;
|
|
82
82
|
const { gl, camera } = context;
|
|
83
83
|
program.use();
|
|
84
84
|
texture.activate(0, program, "uniTexture");
|
|
85
85
|
program.uniform1f("uniRadiusMultiplier", radiusMultiplier);
|
|
86
|
-
program.uniform1f("uniMinSizeInPixels", minSizeInPixels);
|
|
87
|
-
program.uniform1f("uniScreenHeightInPixels", context.height);
|
|
86
|
+
program.uniform1f("uniMinSizeInPixels", minSizeInPixels / context.height);
|
|
88
87
|
program.uniform1f("uniSpecularExponent", this.specularExponent);
|
|
89
88
|
program.uniform1f("uniSpecularIntensity", this.specularIntensity);
|
|
90
89
|
program.uniform1f("uniShadowIntensity", this.shadowIntensity);
|
|
91
90
|
program.uniform1f("uniShadowThickness", this.shadowThickness);
|
|
92
91
|
program.uniform1f("uniLight", this.light);
|
|
92
|
+
program.uniform2f("uniAspectRatio", context.aspectRatioInverse, 1);
|
|
93
93
|
program.uniformMatrix4fv("uniModelViewMatrix", camera.matrixModelView);
|
|
94
94
|
program.uniformMatrix4fv("uniProjectionMatrix", camera.matrixProjection);
|
|
95
95
|
vao.bind();
|
|
96
|
-
gl.
|
|
96
|
+
gl.drawArraysInstanced(gl.TRIANGLE_FAN, 0, 4, count);
|
|
97
97
|
vao.unbind();
|
|
98
98
|
}
|
|
99
|
-
|
|
99
|
+
createDatasetForInstances() {
|
|
100
100
|
const dataset = new TgdDataset({
|
|
101
101
|
attPoint: "vec4",
|
|
102
102
|
attUV: "vec2",
|
|
103
|
+
}, {
|
|
104
|
+
divisor: 1,
|
|
103
105
|
});
|
|
104
106
|
dataset.set("attPoint", this.dataPoint);
|
|
105
107
|
dataset.set("attUV", this.dataUV);
|
|
106
108
|
return dataset;
|
|
107
109
|
}
|
|
110
|
+
createDatasetForBillboards() {
|
|
111
|
+
const dataset = new TgdDataset({
|
|
112
|
+
attPointCoord: "vec2",
|
|
113
|
+
});
|
|
114
|
+
dataset.set("attPointCoord", new Float32Array([-1, -1, -1, +1, +1, +1, +1, -1]));
|
|
115
|
+
return dataset;
|
|
116
|
+
}
|
|
108
117
|
createProgram(render) {
|
|
109
118
|
const vert = new TgdShaderVertex({
|
|
110
119
|
uniforms: {
|
|
120
|
+
uniTexture: "sampler2D",
|
|
121
|
+
uniAspectRatio: "vec2",
|
|
111
122
|
uniMinSizeInPixels: "float",
|
|
112
123
|
uniRadiusMultiplier: "float",
|
|
113
|
-
uniScreenHeightInPixels: "float",
|
|
114
124
|
uniModelViewMatrix: "mat4",
|
|
115
125
|
uniProjectionMatrix: "mat4",
|
|
116
126
|
},
|
|
117
127
|
attributes: {
|
|
118
128
|
attPoint: "vec4",
|
|
119
129
|
attUV: "vec2",
|
|
130
|
+
/**
|
|
131
|
+
* Between -1.0 and +1.0
|
|
132
|
+
*/
|
|
133
|
+
attPointCoord: "vec2",
|
|
120
134
|
},
|
|
121
135
|
varying: {
|
|
122
|
-
|
|
136
|
+
varColor: "vec4",
|
|
137
|
+
varPointCoord: "vec2",
|
|
138
|
+
varDepth: "float",
|
|
123
139
|
},
|
|
124
|
-
mainCode:
|
|
125
|
-
"varUV = attUV;",
|
|
126
|
-
"float radius = attPoint.w;",
|
|
127
|
-
"vec4 point = uniModelViewMatrix * vec4(attPoint.xyz, 1.0);",
|
|
128
|
-
"vec4 shift = point + vec4(0, uniRadiusMultiplier * radius, 0, 0);",
|
|
129
|
-
"gl_Position = uniProjectionMatrix * point;",
|
|
130
|
-
"vec4 screenShift = uniProjectionMatrix * shift;",
|
|
131
|
-
"gl_PointSize = max(",
|
|
132
|
-
" uniMinSizeInPixels,",
|
|
133
|
-
" abs(screenShift.y - gl_Position.y) * uniScreenHeightInPixels / gl_Position.w",
|
|
134
|
-
");",
|
|
135
|
-
],
|
|
140
|
+
mainCode: vertInstancesCode(),
|
|
136
141
|
}).code;
|
|
137
142
|
const frag = new TgdShaderFragment({
|
|
138
143
|
uniforms: {
|
|
139
|
-
uniTexture: "sampler2D",
|
|
140
144
|
uniSpecularExponent: "float",
|
|
141
145
|
uniSpecularIntensity: "float",
|
|
142
146
|
uniShadowIntensity: "float",
|
|
@@ -144,28 +148,26 @@ export class TgdPainterPointsCloud extends TgdPainter {
|
|
|
144
148
|
uniLight: "float",
|
|
145
149
|
},
|
|
146
150
|
varying: {
|
|
147
|
-
|
|
151
|
+
varColor: "vec4",
|
|
152
|
+
varPointCoord: "vec2",
|
|
153
|
+
varDepth: "float",
|
|
148
154
|
},
|
|
149
155
|
outputs: { FragColor: "vec4" },
|
|
150
156
|
functions: {
|
|
151
157
|
render: [
|
|
152
158
|
"vec4 render(vec4 color) {",
|
|
153
|
-
render ??
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
`float light = smoothstep(0.0, uniShadowThickness, len) * uniShadowIntensity + (1.0 - uniShadowIntensity);`,
|
|
159
|
-
`float spec = pow(len, uniSpecularExponent) * uniSpecularIntensity;`,
|
|
160
|
-
"return color * vec4(vec3(light * uniLight), 1.0) + vec4(vec3(spec), 0.0);",
|
|
161
|
-
],
|
|
159
|
+
render ??
|
|
160
|
+
fragCodeSphere({
|
|
161
|
+
...this.options,
|
|
162
|
+
enableSpecular: this.options.enableSpecular ?? true,
|
|
163
|
+
}),
|
|
162
164
|
"}",
|
|
163
165
|
],
|
|
164
166
|
},
|
|
165
|
-
mainCode: ["vec4 color =
|
|
167
|
+
mainCode: ["vec4 color = varColor;", "FragColor = render(color);"],
|
|
166
168
|
}).code;
|
|
167
169
|
const program = new TgdProgram(this.context.gl, { vert, frag });
|
|
168
170
|
return program;
|
|
169
171
|
}
|
|
170
172
|
}
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRzLWNsb3VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhaW50ZXIvcG9pbnRzLWNsb3VkL3BvaW50cy1jbG91ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sRUFFTixpQkFBaUIsRUFDakIsZUFBZSxHQUNmLE1BQU0sYUFBYSxDQUFBO0FBQ3BCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDM0MsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDbEQsT0FBTyxFQUNOLGNBQWMsR0FFZCxNQUFNLHVCQUF1QixDQUFBO0FBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBNEVsRCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsVUFBVTtJQUNwRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQ3BCLFVBQStDLEVBQUU7UUFFakQsT0FBTyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFlBQVk7UUFDbEIsT0FBTyxZQUFZLEVBQUUsQ0FBQTtJQUN0QixDQUFDO0lBbUJELFlBQ2lCLE9BQW1CLEVBQ2xCLE9BQXFDO1FBRXRELEtBQUssRUFBRSxDQUFBO1FBSFMsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNsQixZQUFP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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frag-flat.d.ts","sourceRoot":"","sources":["../../../../src/painter/points-cloud/shaders/frag-flat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,wBAAgB,YAAY,IAAI,WAAW,CAO1C"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function fragCodeFlat() {
|
|
2
|
+
return [
|
|
3
|
+
"vec2 coords = varPointCoord;",
|
|
4
|
+
"float z2 = 1.0 - dot(coords, coords);",
|
|
5
|
+
"if (z2 < 0.0) discard;",
|
|
6
|
+
"return varColor;",
|
|
7
|
+
];
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhZy1mbGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BhaW50ZXIvcG9pbnRzLWNsb3VkL3NoYWRlcnMvZnJhZy1mbGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxZQUFZO0lBQzNCLE9BQU87UUFDTiw4QkFBOEI7UUFDOUIsdUNBQXVDO1FBQ3ZDLHdCQUF3QjtRQUN4QixrQkFBa0I7S0FDbEIsQ0FBQTtBQUNGLENBQUMifQ==
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { TgdVec3 } from "../../../math";
|
|
2
|
+
import type { TgdCodeBloc } from "../../../shader";
|
|
3
|
+
import type { ArrayNumber3 } from "../../../types";
|
|
4
|
+
export type TgdPointsCloudFragCodeSphereOptions = {
|
|
5
|
+
/**
|
|
6
|
+
* Enable specularity.
|
|
7
|
+
* Default to `false`
|
|
8
|
+
*/
|
|
9
|
+
enableSpecular?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* If defined, it will be hardcoded in the shader and won't use uniform to update.
|
|
12
|
+
*/
|
|
13
|
+
specularExponent?: number;
|
|
14
|
+
/**
|
|
15
|
+
* If defined, it will be hardcoded in the shader and won't use uniform to update.
|
|
16
|
+
*/
|
|
17
|
+
specularIntensity?: number;
|
|
18
|
+
/**
|
|
19
|
+
* If defined, it will be hardcoded in the shader and won't use uniform to update.
|
|
20
|
+
*/
|
|
21
|
+
shadowThickness?: number;
|
|
22
|
+
/**
|
|
23
|
+
* If defined, it will be hardcoded in the shader and won't use uniform to update.
|
|
24
|
+
*/
|
|
25
|
+
shadowIntensity?: number;
|
|
26
|
+
/**
|
|
27
|
+
* If defined, it will be hardcoded in the shader and won't use uniform to update.
|
|
28
|
+
*/
|
|
29
|
+
light?: number;
|
|
30
|
+
/**
|
|
31
|
+
* This will always be hardcoded in the shader.
|
|
32
|
+
* Default to a light coming from the top left of the screen.
|
|
33
|
+
*/
|
|
34
|
+
lightDirection?: TgdVec3 | ArrayNumber3;
|
|
35
|
+
/**
|
|
36
|
+
* The better the precision, the slower the rendering.
|
|
37
|
+
* - **none**: the sphere is seen as a flat sphere
|
|
38
|
+
* - **low**: fast approximation of a sphere, not perfect in the intersections
|
|
39
|
+
* - **high**: real sphere depth
|
|
40
|
+
*/
|
|
41
|
+
depthPrecision?: "none" | "low" | "high";
|
|
42
|
+
};
|
|
43
|
+
export declare function fragCodeSphere(options?: TgdPointsCloudFragCodeSphereOptions): TgdCodeBloc;
|
|
44
|
+
//# sourceMappingURL=frag-sphere.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frag-sphere.d.ts","sourceRoot":"","sources":["../../../../src/painter/points-cloud/shaders/frag-sphere.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,MAAM,MAAM,mCAAmC,GAAG;IAC9C;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;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;IACd;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IACvC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;CAC3C,CAAA;AAID,wBAAgB,cAAc,CAC1B,OAAO,GAAE,mCAAwC,GAClD,WAAW,CA6Cb"}
|