@xeokit/xeokit-sdk 2.6.28 → 2.6.30
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 +1 -0
- package/dist/xeokit-sdk.cjs.js +1425 -649
- package/dist/xeokit-sdk.es.js +1420 -650
- package/dist/xeokit-sdk.es5.js +629 -552
- package/dist/xeokit-sdk.min.cjs.js +5 -5
- package/dist/xeokit-sdk.min.es.js +5 -5
- package/dist/xeokit-sdk.min.es5.js +4 -4
- package/package.json +1 -1
- package/src/extras/PointerCircle/PointerCircle.js +1 -1
- package/src/plugins/AngleMeasurementsPlugin/AngleMeasurementsMouseControl.js +22 -41
- package/src/plugins/AngleMeasurementsPlugin/AngleMeasurementsTouchControl.js +3 -18
- package/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurementsMouseControl.js +20 -41
- package/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurementsTouchControl.js +4 -20
- package/src/plugins/DistanceMeasurementsPlugin/index.js +1 -1
- package/src/plugins/GLTFLoaderPlugin/GLTFLoaderPlugin.js +2 -110
- package/src/plugins/GLTFLoaderPlugin/GLTFSceneModelLoader.js +252 -222
- package/src/plugins/StoreyViewsPlugin/StoreyViewsPlugin.js +31 -1
- package/src/plugins/XKTLoaderPlugin/XKTLoaderPlugin.js +20 -8
- package/src/plugins/ZonesPlugin/ZonesPlugin.js +1939 -0
- package/src/plugins/ZonesPlugin/index.js +1 -1875
- package/src/viewer/Viewer.js +2 -2
- package/src/viewer/metadata/MetaScene.js +0 -2
- package/src/viewer/scene/math/MeshSurfaceArea.js +90 -0
- package/src/viewer/scene/math/MeshVolume.js +102 -0
- package/src/viewer/scene/math/index.js +3 -0
- package/src/viewer/scene/math/isTriangleMeshSolid.js +162 -0
- package/src/viewer/scene/math/math.js +8 -0
- package/src/viewer/scene/model/SceneModel.js +73 -34
- package/src/viewer/scene/model/SceneModelEntity.js +46 -1
- package/src/viewer/scene/model/SceneModelMesh.js +74 -1
- package/src/viewer/scene/model/SceneModelTextureSet.js +5 -0
- package/src/viewer/scene/model/dtx/lines/DTXLinesLayer.js +7 -1
- package/src/viewer/scene/model/dtx/triangles/DTXTrianglesLayer.js +77 -1
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapInitRenderer.js +8 -0
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapRenderer.js +8 -0
- package/src/viewer/scene/model/vbo/VBORenderer.js +10 -1
- package/src/viewer/scene/model/vbo/batching/lines/VBOBatchingLinesLayer.js +6 -1
- package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSnapRenderer.js +1 -1
- package/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsLayer.js +6 -1
- package/src/viewer/scene/model/vbo/batching/triangles/VBOBatchingTrianglesLayer.js +59 -18
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/Renderers.js +40 -12
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesBatchingRenderer.js +2 -3
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorTextureRenderer.js +25 -7
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapRenderer.js +1 -1
- package/src/viewer/scene/model/vbo/instancing/lines/VBOInstancingLinesLayer.js +6 -1
- package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapRenderer.js +1 -1
- package/src/viewer/scene/model/vbo/instancing/points/VBOInstancingPointsLayer.js +6 -1
- package/src/viewer/scene/model/vbo/instancing/triangles/VBOInstancingTrianglesLayer.js +48 -14
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/Renderers.js +74 -47
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorTextureRenderer.js +29 -14
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesInstancingRenderer.js +5 -4
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapRenderer.js +1 -1
- package/src/viewer/scene/scene/Scene.js +16 -5
- package/src/viewer/scene/webgl/occlusion/OcclusionLayer.js +1 -1
- package/src/viewer/scene/webgl/occlusion/OcclusionTester.js +1 -5
- package/types/plugins/DistanceMeasurementsPlugin/DistanceMeasurement.d.ts +7 -0
- package/types/plugins/DistanceMeasurementsPlugin/DistanceMeasurementsPlugin.d.ts +26 -1
- package/types/plugins/DistanceMeasurementsPlugin/index.d.ts +3 -1
|
@@ -50,6 +50,14 @@ class Renderers {
|
|
|
50
50
|
this._colorTextureRendererWithSAO.destroy();
|
|
51
51
|
this._colorTextureRendererWithSAO = null;
|
|
52
52
|
}
|
|
53
|
+
if (this._colorTextureRendererAlphaCutoff && (!this._colorTextureRendererAlphaCutoff.getValid())) {
|
|
54
|
+
this._colorTextureRendererAlphaCutoff.destroy();
|
|
55
|
+
this._colorTextureRendererAlphaCutoff = null;
|
|
56
|
+
}
|
|
57
|
+
if (this._colorTextureRendererWithSAOAlphaCutoff && (!this._colorTextureRendererWithSAOAlphaCutoff.getValid())) {
|
|
58
|
+
this._colorTextureRendererWithSAOAlphaCutoff.destroy();
|
|
59
|
+
this._colorTextureRendererWithSAOAlphaCutoff = null;
|
|
60
|
+
}
|
|
53
61
|
if (this._pbrRenderer && (!this._pbrRenderer.getValid())) {
|
|
54
62
|
this._pbrRenderer.destroy();
|
|
55
63
|
this._pbrRenderer = null;
|
|
@@ -177,6 +185,20 @@ class Renderers {
|
|
|
177
185
|
return this._colorTextureRendererWithSAO;
|
|
178
186
|
}
|
|
179
187
|
|
|
188
|
+
get colorTextureRendererAlphaCutoff() {
|
|
189
|
+
if (!this._colorTextureRendererAlphaCutoff) {
|
|
190
|
+
this._colorTextureRendererAlphaCutoff = new TrianglesColorTextureRenderer(this._scene, false, { useAlphaCutoff: true });
|
|
191
|
+
}
|
|
192
|
+
return this._colorTextureRendererAlphaCutoff;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
get colorTextureRendererWithSAOAlphaCutoff() {
|
|
196
|
+
if (!this._colorTextureRendererWithSAOAlphaCutoff) {
|
|
197
|
+
this._colorTextureRendererWithSAOAlphaCutoff = new TrianglesColorTextureRenderer(this._scene, true, { useAlphaCutoff: true });
|
|
198
|
+
}
|
|
199
|
+
return this._colorTextureRendererWithSAOAlphaCutoff;
|
|
200
|
+
}
|
|
201
|
+
|
|
180
202
|
get pbrRenderer() {
|
|
181
203
|
if (!this._pbrRenderer) {
|
|
182
204
|
this._pbrRenderer = new TrianglesPBRRenderer(this._scene, false);
|
|
@@ -301,6 +323,12 @@ class Renderers {
|
|
|
301
323
|
if (this._colorTextureRendererWithSAO) {
|
|
302
324
|
this._colorTextureRendererWithSAO.destroy();
|
|
303
325
|
}
|
|
326
|
+
if (this._colorTextureRendererAlphaCutoff) {
|
|
327
|
+
this._colorTextureRendererAlphaCutoff.destroy();
|
|
328
|
+
}
|
|
329
|
+
if (this._colorTextureRendererWithSAOAlphaCutoff) {
|
|
330
|
+
this._colorTextureRendererWithSAOAlphaCutoff.destroy();
|
|
331
|
+
}
|
|
304
332
|
if (this._pbrRenderer) {
|
|
305
333
|
this._pbrRenderer.destroy();
|
|
306
334
|
}
|
|
@@ -349,27 +377,27 @@ class Renderers {
|
|
|
349
377
|
}
|
|
350
378
|
}
|
|
351
379
|
|
|
352
|
-
const
|
|
380
|
+
const cachedRenderers = {};
|
|
353
381
|
|
|
354
382
|
/**
|
|
355
383
|
* @private
|
|
356
384
|
*/
|
|
357
385
|
export function getRenderers(scene) {
|
|
358
386
|
const sceneId = scene.id;
|
|
359
|
-
let
|
|
360
|
-
if (!
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
387
|
+
let renderers = cachedRenderers[sceneId];
|
|
388
|
+
if (!renderers) {
|
|
389
|
+
renderers = new Renderers(scene);
|
|
390
|
+
cachedRenderers[sceneId] = renderers;
|
|
391
|
+
renderers._compile();
|
|
392
|
+
renderers.eagerCreateRenders();
|
|
365
393
|
scene.on("compile", () => {
|
|
366
|
-
|
|
367
|
-
|
|
394
|
+
renderers._compile();
|
|
395
|
+
renderers.eagerCreateRenders();
|
|
368
396
|
});
|
|
369
397
|
scene.on("destroyed", () => {
|
|
370
|
-
delete
|
|
371
|
-
|
|
398
|
+
delete cachedRenderers[sceneId];
|
|
399
|
+
renderers._destroy();
|
|
372
400
|
});
|
|
373
401
|
}
|
|
374
|
-
return
|
|
402
|
+
return renderers;
|
|
375
403
|
}
|
package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesBatchingRenderer.js
CHANGED
|
@@ -5,8 +5,8 @@ import {VBORenderer} from "./../../../VBORenderer.js";
|
|
|
5
5
|
*/
|
|
6
6
|
export class TrianglesBatchingRenderer extends VBORenderer {
|
|
7
7
|
|
|
8
|
-
constructor(scene, withSAO, {edges = false} = {}) {
|
|
9
|
-
super(scene, withSAO, {instancing: false, edges});
|
|
8
|
+
constructor(scene, withSAO, {edges = false, useAlphaCutoff = false} = {}) {
|
|
9
|
+
super(scene, withSAO, {instancing: false, edges, useAlphaCutoff});
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
_draw(drawCfg) {
|
|
@@ -23,7 +23,6 @@ export class TrianglesBatchingRenderer extends VBORenderer {
|
|
|
23
23
|
} else {
|
|
24
24
|
const count = frameCtx.pickElementsCount || state.indicesBuf.numItems;
|
|
25
25
|
const offset = frameCtx.pickElementsOffset ? frameCtx.pickElementsOffset * state.indicesBuf.itemByteSize : 0;
|
|
26
|
-
|
|
27
26
|
gl.drawElements(gl.TRIANGLES, count, state.indicesBuf.itemType, offset);
|
|
28
27
|
|
|
29
28
|
if (incrementDrawState) {
|
package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorTextureRenderer.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {TrianglesBatchingRenderer} from "./TrianglesBatchingRenderer.js";
|
|
2
2
|
|
|
3
|
-
|
|
4
3
|
/**
|
|
5
4
|
* @private
|
|
6
5
|
*/
|
|
6
|
+
|
|
7
7
|
export class TrianglesColorTextureRenderer extends TrianglesBatchingRenderer {
|
|
8
8
|
_getHash() {
|
|
9
9
|
const scene = this._scene;
|
|
@@ -11,11 +11,10 @@ export class TrianglesColorTextureRenderer extends TrianglesBatchingRenderer {
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
drawLayer(frameCtx, layer, renderPass) {
|
|
14
|
-
super.drawLayer(frameCtx, layer, renderPass, {incrementDrawState: true});
|
|
14
|
+
super.drawLayer(frameCtx, layer, renderPass, { incrementDrawState: true });
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
_buildVertexShader() {
|
|
18
|
-
|
|
19
18
|
const scene = this._scene;
|
|
20
19
|
const sectionPlanesState = scene._sectionPlanesState;
|
|
21
20
|
const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
|
|
@@ -36,7 +35,7 @@ export class TrianglesColorTextureRenderer extends TrianglesBatchingRenderer {
|
|
|
36
35
|
|
|
37
36
|
this._addMatricesUniformBlockLines(src);
|
|
38
37
|
|
|
39
|
-
src.push("uniform mat3 uvDecodeMatrix;")
|
|
38
|
+
src.push("uniform mat3 uvDecodeMatrix;");
|
|
40
39
|
|
|
41
40
|
if (scene.logarithmicDepthBufferEnabled) {
|
|
42
41
|
src.push("uniform float logDepthBufFC;");
|
|
@@ -70,6 +69,7 @@ export class TrianglesColorTextureRenderer extends TrianglesBatchingRenderer {
|
|
|
70
69
|
if (scene.entityOffsetsEnabled) {
|
|
71
70
|
src.push("worldPosition.xyz = worldPosition.xyz + offset;");
|
|
72
71
|
}
|
|
72
|
+
|
|
73
73
|
src.push("vec4 viewPosition = viewMatrix * worldPosition; ");
|
|
74
74
|
src.push("vViewPosition = viewPosition;");
|
|
75
75
|
src.push("vColor = vec4(float(color.r) / 255.0, float(color.g) / 255.0, float(color.b) / 255.0, float(color.a) / 255.0);");
|
|
@@ -80,10 +80,12 @@ export class TrianglesColorTextureRenderer extends TrianglesBatchingRenderer {
|
|
|
80
80
|
src.push("vFragDepth = 1.0 + clipPos.w;");
|
|
81
81
|
src.push("isPerspective = float (isPerspectiveMatrix(projMatrix));");
|
|
82
82
|
}
|
|
83
|
+
|
|
83
84
|
if (clipping) {
|
|
84
85
|
src.push("vWorldPosition = worldPosition;");
|
|
85
86
|
src.push("vFlags = flags;");
|
|
86
87
|
}
|
|
88
|
+
|
|
87
89
|
src.push("gl_Position = clipPos;");
|
|
88
90
|
src.push("}");
|
|
89
91
|
src.push("}");
|
|
@@ -96,6 +98,7 @@ export class TrianglesColorTextureRenderer extends TrianglesBatchingRenderer {
|
|
|
96
98
|
const lightsState = scene._lightsState;
|
|
97
99
|
const sectionPlanesState = scene._sectionPlanesState;
|
|
98
100
|
const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
|
|
101
|
+
const useAlphaCutoff = this._useAlphaCutoff;
|
|
99
102
|
const src = [];
|
|
100
103
|
src.push("#version 300 es");
|
|
101
104
|
src.push("// Triangles batching color texture fragment shader");
|
|
@@ -154,6 +157,7 @@ export class TrianglesColorTextureRenderer extends TrianglesBatchingRenderer {
|
|
|
154
157
|
src.push("uniform vec4 sliceColor;");
|
|
155
158
|
}
|
|
156
159
|
this._addMatricesUniformBlockLines(src);
|
|
160
|
+
|
|
157
161
|
src.push("uniform vec4 lightAmbient;");
|
|
158
162
|
for (let i = 0, len = lightsState.lights.length; i < len; i++) {
|
|
159
163
|
const light = lightsState.lights[i];
|
|
@@ -173,6 +177,10 @@ export class TrianglesColorTextureRenderer extends TrianglesBatchingRenderer {
|
|
|
173
177
|
}
|
|
174
178
|
}
|
|
175
179
|
|
|
180
|
+
if (useAlphaCutoff) {
|
|
181
|
+
src.push("uniform float materialAlphaCutoff;");
|
|
182
|
+
}
|
|
183
|
+
|
|
176
184
|
src.push("in vec4 vViewPosition;");
|
|
177
185
|
src.push("in vec4 vColor;");
|
|
178
186
|
src.push("in vec2 vUV;");
|
|
@@ -240,11 +248,21 @@ export class TrianglesColorTextureRenderer extends TrianglesBatchingRenderer {
|
|
|
240
248
|
}
|
|
241
249
|
|
|
242
250
|
src.push("vec4 color = vec4((lightAmbient.rgb * lightAmbient.a * newColor.rgb) + (reflectedColor * newColor.rgb), newColor.a);");
|
|
251
|
+
|
|
252
|
+
src.push("vec4 sampleColor = texture(uColorMap, vUV);");
|
|
253
|
+
|
|
254
|
+
if (useAlphaCutoff) {
|
|
255
|
+
src.push("if (sampleColor.a < materialAlphaCutoff) {");
|
|
256
|
+
src.push(" discard;");
|
|
257
|
+
src.push("}");
|
|
258
|
+
}
|
|
259
|
+
|
|
243
260
|
if (gammaOutput) {
|
|
244
|
-
src.push("
|
|
245
|
-
} else {
|
|
246
|
-
src.push("vec4 colorTexel = color * texture(uColorMap, vUV);");
|
|
261
|
+
src.push("sampleColor = sRGBToLinear(sampleColor);");
|
|
247
262
|
}
|
|
263
|
+
|
|
264
|
+
src.push("vec4 colorTexel = color * sampleColor;");
|
|
265
|
+
|
|
248
266
|
src.push("float opacity = color.a;");
|
|
249
267
|
|
|
250
268
|
if (this._withSAO) {
|
|
@@ -214,7 +214,7 @@ export class TrianglesSnapRenderer extends VBORenderer{
|
|
|
214
214
|
|
|
215
215
|
src.push(`int pickFlag = int(flags) >> 12 & 0xF;`);
|
|
216
216
|
src.push(`if (pickFlag != renderPass) {`);
|
|
217
|
-
src.push(" gl_Position = vec4(
|
|
217
|
+
src.push(" gl_Position = vec4(2.0, 0.0, 0.0, 0.0);"); // Cull vertex
|
|
218
218
|
src.push(" } else {");
|
|
219
219
|
src.push(" vec4 worldPosition = worldMatrix * (positionsDecodeMatrix * vec4(position, 1.0)); ");
|
|
220
220
|
if (scene.entityOffsetsEnabled) {
|
|
@@ -28,7 +28,7 @@ class VBOInstancingLinesLayer {
|
|
|
28
28
|
*/
|
|
29
29
|
constructor(cfg) {
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
// console.info("VBOInstancingLinesLayer");
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
34
|
* Owner model
|
|
@@ -108,6 +108,11 @@ class VBOInstancingLinesLayer {
|
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
this._finalized = false;
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* The type of primitives in this layer.
|
|
114
|
+
*/
|
|
115
|
+
this.primitive = cfg.primitive;
|
|
111
116
|
}
|
|
112
117
|
|
|
113
118
|
get aabb() {
|
package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapRenderer.js
CHANGED
|
@@ -221,7 +221,7 @@ export class VBOInstancingLinesSnapRenderer extends VBORenderer {
|
|
|
221
221
|
// renderPass = PICK
|
|
222
222
|
src.push(`int pickFlag = int(flags) >> 12 & 0xF;`);
|
|
223
223
|
src.push(`if (pickFlag != renderPass) {`);
|
|
224
|
-
src.push(" gl_Position = vec4(
|
|
224
|
+
src.push(" gl_Position = vec4(2.0, 0.0, 0.0, 0.0);"); // Cull vertex
|
|
225
225
|
src.push("} else {");
|
|
226
226
|
src.push(" vec4 worldPosition = positionsDecodeMatrix * vec4(position, 1.0); ");
|
|
227
227
|
src.push(" worldPosition = worldMatrix * vec4(dot(worldPosition, modelMatrixCol0), dot(worldPosition, modelMatrixCol1), dot(worldPosition, modelMatrixCol2), 1.0);");
|
|
@@ -27,7 +27,7 @@ export class VBOInstancingPointsLayer {
|
|
|
27
27
|
*/
|
|
28
28
|
constructor(cfg) {
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
// console.info("VBOInstancingPointsLayer");
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
* Owner model
|
|
@@ -101,6 +101,11 @@ export class VBOInstancingPointsLayer {
|
|
|
101
101
|
this.aabbDirty = true;
|
|
102
102
|
|
|
103
103
|
this._finalized = false;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* The type of primitives in this layer.
|
|
107
|
+
*/
|
|
108
|
+
this.primitive = cfg.geometry.primitive;
|
|
104
109
|
}
|
|
105
110
|
|
|
106
111
|
get aabb() {
|
|
@@ -36,7 +36,7 @@ export class VBOInstancingTrianglesLayer {
|
|
|
36
36
|
*/
|
|
37
37
|
constructor(cfg) {
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
// console.info("Creating VBOInstancingTrianglesLayer");
|
|
40
40
|
|
|
41
41
|
/**
|
|
42
42
|
* Owner model
|
|
@@ -139,6 +139,11 @@ export class VBOInstancingTrianglesLayer {
|
|
|
139
139
|
* @type {number|*}
|
|
140
140
|
*/
|
|
141
141
|
this.numIndices = cfg.geometry.numIndices;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* The type of primitives in this layer.
|
|
145
|
+
*/
|
|
146
|
+
this.primitive = cfg.geometry.primitive;
|
|
142
147
|
}
|
|
143
148
|
|
|
144
149
|
get aabb() {
|
|
@@ -252,7 +257,7 @@ export class VBOInstancingTrianglesLayer {
|
|
|
252
257
|
|
|
253
258
|
const portion = {};
|
|
254
259
|
|
|
255
|
-
if (this.model.scene.
|
|
260
|
+
if (this.model.scene.readableGeometryEnabled) {
|
|
256
261
|
portion.matrix = meshMatrix.slice();
|
|
257
262
|
portion.inverseMatrix = null; // Lazy-computed in precisionRayPickSurface
|
|
258
263
|
portion.normalMatrix = null; // Lazy-computed in precisionRayPickSurface
|
|
@@ -690,7 +695,7 @@ export class VBOInstancingTrianglesLayer {
|
|
|
690
695
|
}
|
|
691
696
|
|
|
692
697
|
getEachVertex(portionId, callback) {
|
|
693
|
-
if (!this.model.scene.
|
|
698
|
+
if (!this.model.scene.readableGeometryEnabled) {
|
|
694
699
|
return false;
|
|
695
700
|
}
|
|
696
701
|
const state = this._state;
|
|
@@ -702,13 +707,12 @@ export class VBOInstancingTrianglesLayer {
|
|
|
702
707
|
}
|
|
703
708
|
const positions = geometry.quantizedPositions;
|
|
704
709
|
const origin = state.origin;
|
|
705
|
-
const
|
|
706
|
-
const
|
|
707
|
-
const
|
|
708
|
-
const offsetZ = origin[2] + offset[2];
|
|
710
|
+
const offsetX = origin[0] ;
|
|
711
|
+
const offsetY = origin[1] ;
|
|
712
|
+
const offsetZ = origin[2] ;
|
|
709
713
|
const worldPos = tempVec4a;
|
|
710
714
|
const portionMatrix = portion.matrix;
|
|
711
|
-
const
|
|
715
|
+
const sceneModelMatrix = this.model.matrix;
|
|
712
716
|
const positionsDecodeMatrix = state.positionsDecodeMatrix;
|
|
713
717
|
for (let i = 0, len = positions.length; i < len; i += 3) {
|
|
714
718
|
worldPos[0] = positions[i];
|
|
@@ -716,7 +720,7 @@ export class VBOInstancingTrianglesLayer {
|
|
|
716
720
|
worldPos[2] = positions[i + 2];
|
|
717
721
|
math.decompressPosition(worldPos, positionsDecodeMatrix);
|
|
718
722
|
math.transformPoint3(portionMatrix, worldPos);
|
|
719
|
-
math.transformPoint3(
|
|
723
|
+
math.transformPoint3(sceneModelMatrix, worldPos);
|
|
720
724
|
worldPos[0] += offsetX;
|
|
721
725
|
worldPos[1] += offsetY;
|
|
722
726
|
worldPos[2] += offsetZ;
|
|
@@ -724,6 +728,23 @@ export class VBOInstancingTrianglesLayer {
|
|
|
724
728
|
}
|
|
725
729
|
}
|
|
726
730
|
|
|
731
|
+
getEachIndex(portionId, callback) {
|
|
732
|
+
if (!this.model.scene.readableGeometryEnabled) {
|
|
733
|
+
return false;
|
|
734
|
+
}
|
|
735
|
+
const state = this._state;
|
|
736
|
+
const geometry = state.geometry;
|
|
737
|
+
const portion = this._portions[portionId];
|
|
738
|
+
if (!portion) {
|
|
739
|
+
this.model.error("portion not found: " + portionId);
|
|
740
|
+
return;
|
|
741
|
+
}
|
|
742
|
+
const indices = geometry.indices;
|
|
743
|
+
for (let i = 0, len = indices.length; i < len; i++) {
|
|
744
|
+
callback(indices[i]);
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
|
|
727
748
|
setMatrix(portionId, matrix) {
|
|
728
749
|
if (!this._finalized) {
|
|
729
750
|
throw "Not finalized";
|
|
@@ -764,14 +785,21 @@ export class VBOInstancingTrianglesLayer {
|
|
|
764
785
|
return;
|
|
765
786
|
}
|
|
766
787
|
this._updateBackfaceCull(renderFlags, frameCtx);
|
|
788
|
+
const useAlphaCutoff = this._state.textureSet && (typeof(this._state.textureSet.alphaCutoff) === "number");
|
|
767
789
|
if (frameCtx.withSAO && this.model.saoEnabled) {
|
|
768
790
|
if (frameCtx.pbrEnabled && this.model.pbrEnabled && this._state.pbrSupported) {
|
|
769
791
|
if (this._renderers.pbrRendererWithSAO) {
|
|
770
792
|
this._renderers.pbrRendererWithSAO.drawLayer(frameCtx, this, RENDER_PASSES.COLOR_OPAQUE);
|
|
771
793
|
}
|
|
772
794
|
} else if (frameCtx.colorTextureEnabled && this.model.colorTextureEnabled && this._state.colorTextureSupported) {
|
|
773
|
-
if (
|
|
774
|
-
this._renderers.
|
|
795
|
+
if (useAlphaCutoff) {
|
|
796
|
+
if (this._renderers.colorTextureRendererWithSAOAlphaCutoff) {
|
|
797
|
+
this._renderers.colorTextureRendererWithSAOAlphaCutoff.drawLayer(frameCtx, this, RENDER_PASSES.COLOR_OPAQUE);
|
|
798
|
+
}
|
|
799
|
+
} else {
|
|
800
|
+
if (this._renderers.colorTextureRendererWithSAO) {
|
|
801
|
+
this._renderers.colorTextureRendererWithSAO.drawLayer(frameCtx, this, RENDER_PASSES.COLOR_OPAQUE);
|
|
802
|
+
}
|
|
775
803
|
}
|
|
776
804
|
} else if (this._state.normalsBuf) {
|
|
777
805
|
if (this._renderers.colorRendererWithSAO) {
|
|
@@ -787,8 +815,14 @@ export class VBOInstancingTrianglesLayer {
|
|
|
787
815
|
this._renderers.pbrRenderer.drawLayer(frameCtx, this, RENDER_PASSES.COLOR_OPAQUE);
|
|
788
816
|
}
|
|
789
817
|
} else if (frameCtx.colorTextureEnabled && this.model.colorTextureEnabled && this._state.colorTextureSupported) {
|
|
790
|
-
if (
|
|
791
|
-
this._renderers.
|
|
818
|
+
if (useAlphaCutoff) {
|
|
819
|
+
if (this._renderers.colorTextureRendererAlphaCutoff) {
|
|
820
|
+
this._renderers.colorTextureRendererAlphaCutoff.drawLayer(frameCtx, this, RENDER_PASSES.COLOR_OPAQUE);
|
|
821
|
+
}
|
|
822
|
+
} else {
|
|
823
|
+
if (this._renderers.colorTextureRenderer) {
|
|
824
|
+
this._renderers.colorTextureRenderer.drawLayer(frameCtx, this, RENDER_PASSES.COLOR_OPAQUE);
|
|
825
|
+
}
|
|
792
826
|
}
|
|
793
827
|
} else if (this._state.normalsBuf) {
|
|
794
828
|
if (this._renderers.colorRenderer) {
|
|
@@ -1030,7 +1064,7 @@ export class VBOInstancingTrianglesLayer {
|
|
|
1030
1064
|
|
|
1031
1065
|
precisionRayPickSurface(portionId, worldRayOrigin, worldRayDir, worldSurfacePos, worldNormal) {
|
|
1032
1066
|
|
|
1033
|
-
if (!this.model.scene.
|
|
1067
|
+
if (!this.model.scene.readableGeometryEnabled) {
|
|
1034
1068
|
return false;
|
|
1035
1069
|
}
|
|
1036
1070
|
|
|
@@ -42,14 +42,6 @@ class Renderers {
|
|
|
42
42
|
this._flatColorRendererWithSAO.destroy();
|
|
43
43
|
this._flatColorRendererWithSAO = null;
|
|
44
44
|
}
|
|
45
|
-
if (this._pbrRenderer && (!this._pbrRenderer.getValid())) {
|
|
46
|
-
this._pbrRenderer.destroy();
|
|
47
|
-
this._pbrRenderer = null;
|
|
48
|
-
}
|
|
49
|
-
if (this._pbrRendererWithSAO && (!this._pbrRendererWithSAO.getValid())) {
|
|
50
|
-
this._pbrRendererWithSAO.destroy();
|
|
51
|
-
this._pbrRendererWithSAO = null;
|
|
52
|
-
}
|
|
53
45
|
if (this._colorTextureRenderer && (!this._colorTextureRenderer.getValid())) {
|
|
54
46
|
this._colorTextureRenderer.destroy();
|
|
55
47
|
this._colorTextureRenderer = null;
|
|
@@ -58,6 +50,22 @@ class Renderers {
|
|
|
58
50
|
this._colorTextureRendererWithSAO.destroy();
|
|
59
51
|
this._colorTextureRendererWithSAO = null;
|
|
60
52
|
}
|
|
53
|
+
if (this._colorTextureRendererAlphaCutoff && (!this._colorTextureRendererAlphaCutoff.getValid())) {
|
|
54
|
+
this._colorTextureRendererAlphaCutoff.destroy();
|
|
55
|
+
this._colorTextureRendererAlphaCutoff = null;
|
|
56
|
+
}
|
|
57
|
+
if (this._colorTextureRendererWithSAOAlphaCutoff && (!this._colorTextureRendererWithSAOAlphaCutoff.getValid())) {
|
|
58
|
+
this._colorTextureRendererWithSAOAlphaCutoff.destroy();
|
|
59
|
+
this._colorTextureRendererWithSAOAlphaCutoff = null;
|
|
60
|
+
}
|
|
61
|
+
if (this._pbrRenderer && (!this._pbrRenderer.getValid())) {
|
|
62
|
+
this._pbrRenderer.destroy();
|
|
63
|
+
this._pbrRenderer = null;
|
|
64
|
+
}
|
|
65
|
+
if (this._pbrRendererWithSAO && (!this._pbrRendererWithSAO.getValid())) {
|
|
66
|
+
this._pbrRendererWithSAO.destroy();
|
|
67
|
+
this._pbrRendererWithSAO = null;
|
|
68
|
+
}
|
|
61
69
|
if (this._depthRenderer && (!this._depthRenderer.getValid())) {
|
|
62
70
|
this._depthRenderer.destroy();
|
|
63
71
|
this._depthRenderer = null;
|
|
@@ -90,7 +98,7 @@ class Renderers {
|
|
|
90
98
|
this._pickNormalsRenderer.destroy();
|
|
91
99
|
this._pickNormalsRenderer = null;
|
|
92
100
|
}
|
|
93
|
-
if (this._pickNormalsFlatRenderer &&
|
|
101
|
+
if (this._pickNormalsFlatRenderer && this._pickNormalsFlatRenderer.getValid() === false) {
|
|
94
102
|
this._pickNormalsFlatRenderer.destroy();
|
|
95
103
|
this._pickNormalsFlatRenderer = null;
|
|
96
104
|
}
|
|
@@ -163,20 +171,6 @@ class Renderers {
|
|
|
163
171
|
return this._flatColorRendererWithSAO;
|
|
164
172
|
}
|
|
165
173
|
|
|
166
|
-
get pbrRenderer() {
|
|
167
|
-
if (!this._pbrRenderer) {
|
|
168
|
-
this._pbrRenderer = new TrianglesPBRRenderer(this._scene, false);
|
|
169
|
-
}
|
|
170
|
-
return this._pbrRenderer;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
get pbrRendererWithSAO() {
|
|
174
|
-
if (!this._pbrRendererWithSAO) {
|
|
175
|
-
this._pbrRendererWithSAO = new TrianglesPBRRenderer(this._scene, true);
|
|
176
|
-
}
|
|
177
|
-
return this._pbrRendererWithSAO;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
174
|
get colorTextureRenderer() {
|
|
181
175
|
if (!this._colorTextureRenderer) {
|
|
182
176
|
this._colorTextureRenderer = new TrianglesColorTextureRenderer(this._scene, false);
|
|
@@ -191,6 +185,34 @@ class Renderers {
|
|
|
191
185
|
return this._colorTextureRendererWithSAO;
|
|
192
186
|
}
|
|
193
187
|
|
|
188
|
+
get colorTextureRendererAlphaCutoff() {
|
|
189
|
+
if (!this._colorTextureRendererAlphaCutoff) {
|
|
190
|
+
this._colorTextureRendererAlphaCutoff = new TrianglesColorTextureRenderer(this._scene, false, { useAlphaCutoff: true });
|
|
191
|
+
}
|
|
192
|
+
return this._colorTextureRendererAlphaCutoff;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
get colorTextureRendererWithSAOAlphaCutoff() {
|
|
196
|
+
if (!this._colorTextureRendererWithSAOAlphaCutoff) {
|
|
197
|
+
this._colorTextureRendererWithSAOAlphaCutoff = new TrianglesColorTextureRenderer(this._scene, true, { useAlphaCutoff: true });
|
|
198
|
+
}
|
|
199
|
+
return this._colorTextureRendererWithSAOAlphaCutoff;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
get pbrRenderer() {
|
|
203
|
+
if (!this._pbrRenderer) {
|
|
204
|
+
this._pbrRenderer = new TrianglesPBRRenderer(this._scene, false);
|
|
205
|
+
}
|
|
206
|
+
return this._pbrRenderer;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
get pbrRendererWithSAO() {
|
|
210
|
+
if (!this._pbrRendererWithSAO) {
|
|
211
|
+
this._pbrRendererWithSAO = new TrianglesPBRRenderer(this._scene, true);
|
|
212
|
+
}
|
|
213
|
+
return this._pbrRendererWithSAO;
|
|
214
|
+
}
|
|
215
|
+
|
|
194
216
|
get silhouetteRenderer() {
|
|
195
217
|
if (!this._silhouetteRenderer) {
|
|
196
218
|
this._silhouetteRenderer = new TrianglesSilhouetteRenderer(this._scene);
|
|
@@ -268,13 +290,6 @@ class Renderers {
|
|
|
268
290
|
return this._shadowRenderer;
|
|
269
291
|
}
|
|
270
292
|
|
|
271
|
-
get snapInitRenderer() {
|
|
272
|
-
if (!this._snapInitRenderer) {
|
|
273
|
-
this._snapInitRenderer = new TrianglesSnapInitRenderer(this._scene, false);
|
|
274
|
-
}
|
|
275
|
-
return this._snapInitRenderer;
|
|
276
|
-
}
|
|
277
|
-
|
|
278
293
|
get snapRenderer() {
|
|
279
294
|
if (!this._snapRenderer) {
|
|
280
295
|
this._snapRenderer = new TrianglesSnapRenderer(this._scene);
|
|
@@ -282,6 +297,13 @@ class Renderers {
|
|
|
282
297
|
return this._snapRenderer;
|
|
283
298
|
}
|
|
284
299
|
|
|
300
|
+
get snapInitRenderer() {
|
|
301
|
+
if (!this._snapInitRenderer) {
|
|
302
|
+
this._snapInitRenderer = new TrianglesSnapInitRenderer(this._scene);
|
|
303
|
+
}
|
|
304
|
+
return this._snapInitRenderer;
|
|
305
|
+
}
|
|
306
|
+
|
|
285
307
|
_destroy() {
|
|
286
308
|
if (this._colorRenderer) {
|
|
287
309
|
this._colorRenderer.destroy();
|
|
@@ -295,18 +317,24 @@ class Renderers {
|
|
|
295
317
|
if (this._flatColorRendererWithSAO) {
|
|
296
318
|
this._flatColorRendererWithSAO.destroy();
|
|
297
319
|
}
|
|
298
|
-
if (this._pbrRenderer) {
|
|
299
|
-
this._pbrRenderer.destroy();
|
|
300
|
-
}
|
|
301
|
-
if (this._pbrRendererWithSAO) {
|
|
302
|
-
this._pbrRendererWithSAO.destroy();
|
|
303
|
-
}
|
|
304
320
|
if (this._colorTextureRenderer) {
|
|
305
321
|
this._colorTextureRenderer.destroy();
|
|
306
322
|
}
|
|
307
323
|
if (this._colorTextureRendererWithSAO) {
|
|
308
324
|
this._colorTextureRendererWithSAO.destroy();
|
|
309
325
|
}
|
|
326
|
+
if (this._colorTextureRendererAlphaCutoff) {
|
|
327
|
+
this._colorTextureRendererAlphaCutoff.destroy();
|
|
328
|
+
}
|
|
329
|
+
if (this._colorTextureRendererWithSAOAlphaCutoff) {
|
|
330
|
+
this._colorTextureRendererWithSAOAlphaCutoff.destroy();
|
|
331
|
+
}
|
|
332
|
+
if (this._pbrRenderer) {
|
|
333
|
+
this._pbrRenderer.destroy();
|
|
334
|
+
}
|
|
335
|
+
if (this._pbrRendererWithSAO) {
|
|
336
|
+
this._pbrRendererWithSAO.destroy();
|
|
337
|
+
}
|
|
310
338
|
if (this._depthRenderer) {
|
|
311
339
|
this._depthRenderer.destroy();
|
|
312
340
|
}
|
|
@@ -356,21 +384,20 @@ const cachedRenderers = {};
|
|
|
356
384
|
*/
|
|
357
385
|
export function getRenderers(scene) {
|
|
358
386
|
const sceneId = scene.id;
|
|
359
|
-
let
|
|
360
|
-
if (!
|
|
361
|
-
|
|
362
|
-
cachedRenderers[sceneId] =
|
|
363
|
-
|
|
364
|
-
|
|
387
|
+
let renderers = cachedRenderers[sceneId];
|
|
388
|
+
if (!renderers) {
|
|
389
|
+
renderers = new Renderers(scene);
|
|
390
|
+
cachedRenderers[sceneId] = renderers;
|
|
391
|
+
renderers._compile();
|
|
392
|
+
renderers.eagerCreateRenders();
|
|
365
393
|
scene.on("compile", () => {
|
|
366
|
-
|
|
367
|
-
|
|
394
|
+
renderers._compile();
|
|
395
|
+
renderers.eagerCreateRenders();
|
|
368
396
|
});
|
|
369
397
|
scene.on("destroyed", () => {
|
|
370
398
|
delete cachedRenderers[sceneId];
|
|
371
|
-
|
|
399
|
+
renderers._destroy();
|
|
372
400
|
});
|
|
373
401
|
}
|
|
374
|
-
return
|
|
402
|
+
return renderers;
|
|
375
403
|
}
|
|
376
|
-
|