@xeokit/xeokit-sdk 2.6.91 → 2.6.93
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/dist/xeokit-sdk.cjs.js +13128 -44669
- package/dist/xeokit-sdk.es.js +13129 -44668
- package/dist/xeokit-sdk.es5.js +1414 -3498
- package/dist/xeokit-sdk.min.cjs.js +8 -8
- package/dist/xeokit-sdk.min.es.js +8 -8
- package/dist/xeokit-sdk.min.es5.js +7 -7
- package/package.json +1 -1
- package/src/plugins/AngleMeasurementsPlugin/AngleMeasurement.js +21 -1
- package/src/plugins/DistanceMeasurementsPlugin/DistanceMeasurement.js +32 -6
- package/src/viewer/Viewer.js +55 -103
- package/src/viewer/scene/canvas/Canvas.js +3 -43
- package/src/viewer/scene/geometry/ReadableGeometry.js +0 -25
- package/src/viewer/scene/lights/CubeTexture.js +0 -13
- package/src/viewer/scene/lights/DirLight.js +2 -1
- package/src/viewer/scene/lights/PointLight.js +2 -1
- package/src/viewer/scene/materials/Texture.js +0 -9
- package/src/viewer/scene/math/rtcCoords.js +1 -38
- package/src/viewer/scene/mesh/Mesh.js +454 -212
- package/src/viewer/scene/mesh/draw/DrawShaderSource.js +305 -1504
- package/src/viewer/scene/mesh/draw/LambertShaderSource.js +35 -0
- package/src/viewer/scene/mesh/emphasis/EmphasisShaderSource.js +34 -0
- package/src/viewer/scene/mesh/occlusion/OcclusionShaderSource.js +9 -158
- package/src/viewer/scene/mesh/pick/PickMeshShaderSource.js +21 -151
- package/src/viewer/scene/mesh/pick/PickTriangleShaderSource.js +12 -124
- package/src/viewer/scene/mesh/shadow/ShadowShaderSource.js +22 -97
- package/src/viewer/scene/model/SceneModel.js +248 -852
- package/src/viewer/scene/model/SceneModelEntity.js +4 -4
- package/src/viewer/scene/model/SceneModelMesh.js +3 -3
- package/src/viewer/scene/model/layer/DTXLayer.js +940 -0
- package/src/viewer/scene/model/layer/Layer.js +788 -0
- package/src/viewer/scene/model/layer/VBOLayer.js +1019 -0
- package/src/viewer/scene/model/layer/programs/ColorProgram.js +35 -0
- package/src/viewer/scene/model/layer/programs/ColorTextureProgram.js +46 -0
- package/src/viewer/scene/model/layer/programs/DepthProgram.js +11 -0
- package/src/viewer/scene/model/layer/programs/EdgesProgram.js +12 -0
- package/src/viewer/scene/model/layer/programs/FlatColorProgram.js +24 -0
- package/src/viewer/scene/model/layer/programs/OcclusionProgram.js +12 -0
- package/src/viewer/scene/model/layer/programs/PBRProgram.js +180 -0
- package/src/viewer/scene/model/layer/programs/PickDepthProgram.js +30 -0
- package/src/viewer/scene/model/layer/programs/PickMeshProgram.js +12 -0
- package/src/viewer/scene/model/layer/programs/PickNormalsProgram.js +18 -0
- package/src/viewer/scene/model/layer/programs/ShadowProgram.js +23 -0
- package/src/viewer/scene/model/layer/programs/SilhouetteProgram.js +15 -0
- package/src/viewer/scene/model/layer/programs/SnapProgram.js +29 -0
- package/src/viewer/scene/scene/Scene.js +21 -38
- package/src/viewer/scene/webgl/ArrayBuf.js +5 -20
- package/src/viewer/scene/webgl/FrameContext.js +14 -86
- package/src/viewer/scene/webgl/RenderBuffer.js +62 -262
- package/src/viewer/scene/webgl/Renderer.js +880 -843
- package/src/viewer/scene/webgl/WebGLRenderer.js +612 -0
- package/src/viewer/scene/webgl/occlusion/OcclusionLayer.js +60 -132
- package/src/viewer/scene/webgl/occlusion/OcclusionTester.js +167 -328
- package/src/viewer/scene/mesh/draw/DrawRenderer.js +0 -998
- package/src/viewer/scene/mesh/emphasis/EmphasisEdgesRenderer.js +0 -259
- package/src/viewer/scene/mesh/emphasis/EmphasisEdgesShaderSource.js +0 -160
- package/src/viewer/scene/mesh/emphasis/EmphasisFillRenderer.js +0 -286
- package/src/viewer/scene/mesh/emphasis/EmphasisFillShaderSource.js +0 -263
- package/src/viewer/scene/mesh/occlusion/OcclusionRenderer.js +0 -221
- package/src/viewer/scene/mesh/pick/PickMeshRenderer.js +0 -223
- package/src/viewer/scene/mesh/pick/PickTriangleRenderer.js +0 -200
- package/src/viewer/scene/mesh/shadow/ShadowRenderer.js +0 -214
- package/src/viewer/scene/model/RENDER_PASSES.js +0 -34
- package/src/viewer/scene/model/dtx/BindableDataTexture.js +0 -31
- package/src/viewer/scene/model/dtx/lines/DTXLinesBuffer.js +0 -27
- package/src/viewer/scene/model/dtx/lines/DTXLinesLayer.js +0 -897
- package/src/viewer/scene/model/dtx/lines/DTXLinesState.js +0 -46
- package/src/viewer/scene/model/dtx/lines/DTXLinesTextureFactory.js +0 -411
- package/src/viewer/scene/model/dtx/lines/dataTextureRamStats.js +0 -49
- package/src/viewer/scene/model/dtx/lines/rebucketPositions.js +0 -208
- package/src/viewer/scene/model/dtx/lines/renderers/DTXLinesColorRenderer.js +0 -389
- package/src/viewer/scene/model/dtx/lines/renderers/DTXLinesRenderers.js +0 -65
- package/src/viewer/scene/model/dtx/triangles/DTXTrianglesLayer.js +0 -1399
- package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesBuffer.js +0 -46
- package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesState.js +0 -250
- package/src/viewer/scene/model/dtx/triangles/lib/DTXTrianglesTextureFactory.js +0 -518
- package/src/viewer/scene/model/dtx/triangles/lib/dataTextureRamStats.js +0 -54
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesColorRenderer.js +0 -639
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesDepthRenderer.js +0 -464
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesColorRenderer.js +0 -423
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesEdgesRenderer.js +0 -431
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesNormalsRenderer.js +0 -345
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesOcclusionRenderer.js +0 -436
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickDepthRenderer.js +0 -466
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickMeshRenderer.js +0 -437
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickNormalsFlatRenderer.js +0 -460
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesPickNormalsRenderer.js +0 -437
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesRenderers.js +0 -307
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSilhouetteRenderer.js +0 -472
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapInitRenderer.js +0 -474
- package/src/viewer/scene/model/dtx/triangles/renderers/DTXTrianglesSnapRenderer.js +0 -435
- package/src/viewer/scene/model/vbo/ScratchMemory.js +0 -63
- package/src/viewer/scene/model/vbo/VBORenderer.js +0 -664
- package/src/viewer/scene/model/vbo/batching/lines/VBOBatchingLinesLayer.js +0 -704
- package/src/viewer/scene/model/vbo/batching/lines/lib/VBOBatchingLinesBuffer.js +0 -19
- package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLineSnapInitRenderer.js +0 -318
- package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesColorRenderer.js +0 -114
- package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesRenderers.js +0 -99
- package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSilhouetteRenderer.js +0 -124
- package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSnapInitRenderer.js +0 -313
- package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOBatchingLinesSnapRenderer.js +0 -311
- package/src/viewer/scene/model/vbo/batching/lines/renderers/VBOSceneModelLineBatchingRenderer.js +0 -24
- package/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsLayer.js +0 -688
- package/src/viewer/scene/model/vbo/batching/points/VBOBatchingPointsRenderer.js +0 -24
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsColorRenderer.js +0 -168
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsOcclusionRenderer.js +0 -136
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsPickDepthRenderer.js +0 -156
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsPickMeshRenderer.js +0 -148
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsRenderers.js +0 -144
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsShadowRenderer.js +0 -107
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSilhouetteRenderer.js +0 -146
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSnapInitRenderer.js +0 -315
- package/src/viewer/scene/model/vbo/batching/points/renderers/VBOBatchingPointsSnapRenderer.js +0 -305
- package/src/viewer/scene/model/vbo/batching/triangles/VBOBatchingTrianglesBuffer.js +0 -24
- package/src/viewer/scene/model/vbo/batching/triangles/VBOBatchingTrianglesLayer.js +0 -1346
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesColorRenderer.js +0 -131
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesEmphasisRenderer.js +0 -135
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/EdgesRenderer.js +0 -12
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/Renderers.js +0 -403
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesBatchingRenderer.js +0 -35
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorRenderer.js +0 -252
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesColorTextureRenderer.js +0 -294
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesDepthRenderer.js +0 -115
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesFlatColorRenderer.js +0 -246
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesNormalsRenderer.js +0 -139
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesOcclusionRenderer.js +0 -125
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPBRRenderer.js +0 -561
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickDepthRenderer.js +0 -144
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickMeshRenderer.js +0 -130
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +0 -121
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesPickNormalsRenderer.js +0 -131
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesShadowRenderer.js +0 -107
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSilhouetteRenderer.js +0 -144
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapInitRenderer.js +0 -313
- package/src/viewer/scene/model/vbo/batching/triangles/renderers/TrianglesSnapRenderer.js +0 -312
- package/src/viewer/scene/model/vbo/float16.js +0 -760
- package/src/viewer/scene/model/vbo/instancing/lines/VBOInstancingLinesLayer.js +0 -711
- package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesColorRenderer.js +0 -148
- package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesRenderer.js +0 -26
- package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesRenderers.js +0 -139
- package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSilhouetteRenderer.js +0 -127
- package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapInitRenderer.js +0 -308
- package/src/viewer/scene/model/vbo/instancing/lines/renderers/VBOInstancingLinesSnapRenderer.js +0 -299
- package/src/viewer/scene/model/vbo/instancing/points/VBOInstancingPointsLayer.js +0 -733
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsColorRenderer.js +0 -174
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsDepthRenderer.js +0 -156
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsOcclusionRenderer.js +0 -149
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsPickDepthRenderer.js +0 -170
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsPickMeshRenderer.js +0 -152
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsRenderer.js +0 -26
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsRenderers.js +0 -174
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsShadowRenderer.js +0 -119
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSilhouetteRenderer.js +0 -154
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSnapInitRenderer.js +0 -307
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingPointsSnapRenderer.js +0 -293
- package/src/viewer/scene/model/vbo/instancing/points/renderers/VBOInstancingTrianglesRenderer.js +0 -150
- package/src/viewer/scene/model/vbo/instancing/triangles/VBOInstancingTrianglesLayer.js +0 -1289
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesColorRenderer.js +0 -135
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesEmphasisRenderer.js +0 -137
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/EdgesRenderer.js +0 -12
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/Renderers.js +0 -403
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorRenderer.js +0 -267
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesColorTextureRenderer.js +0 -299
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesDepthRenderer.js +0 -126
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatColorRenderer.js +0 -255
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesFlatNormalsRenderer.js +0 -130
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesInstancingRenderer.js +0 -32
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesNormalsRenderer.js +0 -138
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesOcclusionRenderer.js +0 -128
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPBRRenderer.js +0 -561
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickDepthRenderer.js +0 -149
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickMeshRenderer.js +0 -136
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsFlatRenderer.js +0 -130
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesPickNormalsRenderer.js +0 -145
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesShadowRenderer.js +0 -113
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSilhouetteRenderer.js +0 -148
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapInitRenderer.js +0 -319
- package/src/viewer/scene/model/vbo/instancing/triangles/renderers/TrianglesSnapRenderer.js +0 -310
- package/src/viewer/scene/webgl/Attribute.js +0 -23
- package/src/viewer/scene/webgl/Program.js +0 -181
- package/src/viewer/scene/webgl/RenderBufferManager.js +0 -34
- package/src/viewer/scene/webgl/Sampler.js +0 -18
- package/src/viewer/scene/webgl/Shader.js +0 -49
- package/src/viewer/scene/webgl/sao/SAODepthLimitedBlurRenderer.js +0 -324
- package/src/viewer/scene/webgl/sao/SAOOcclusionRenderer.js +0 -384
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import {createLightSetup} from "../../webgl/WebGLRenderer.js";
|
|
2
|
+
|
|
3
|
+
export const LambertShaderSource = function(meshDrawHash, programVariables, geometry, material, scene) {
|
|
4
|
+
const lightSetup = createLightSetup(programVariables, scene._lightsState);
|
|
5
|
+
const colorize = programVariables.createUniform("vec4", "colorize", (set, state) => set(state.meshColorize));
|
|
6
|
+
const materialAlpha = programVariables.createUniform("float", "materialAlpha", (set, state) => set(state.material.alpha));
|
|
7
|
+
const materialColor = programVariables.createUniform("vec3", "materialColor", (set, state) => set(state.material.color));
|
|
8
|
+
const materialEmissive = programVariables.createUniform("vec3", "materialEmissive", (set, state) => set(state.material.emissive));
|
|
9
|
+
const vColor = programVariables.createVarying("vec4", "vColor", () => {
|
|
10
|
+
const attributes = geometry.attributes;
|
|
11
|
+
const lightComponents = [
|
|
12
|
+
lightSetup.getAmbientColor()
|
|
13
|
+
].concat(attributes.normal
|
|
14
|
+
? lightSetup.directionalLights.map(
|
|
15
|
+
light => `(max(dot(${attributes.normal.view}, ${light.getDirection(geometry.viewMatrix, attributes.position.view)}), 0.0) * ${light.getColor()})`)
|
|
16
|
+
: [ ]);
|
|
17
|
+
return `${colorize} * vec4((${lightComponents.join(" + ")}) * ${materialColor} + ${materialEmissive}, ${materialAlpha});`; // TODO: How to have ambient bright enough for canvas BG but not too bright for scene?
|
|
18
|
+
});
|
|
19
|
+
const outColor = programVariables.createOutput("vec4", "outColor");
|
|
20
|
+
|
|
21
|
+
return {
|
|
22
|
+
getHash: () => [
|
|
23
|
+
meshDrawHash,
|
|
24
|
+
scene.gammaOutput ? "go" : "",
|
|
25
|
+
lightSetup.getHash(),
|
|
26
|
+
material._state.hash
|
|
27
|
+
],
|
|
28
|
+
programName: "Lambert",
|
|
29
|
+
canActAsBackground: true,
|
|
30
|
+
discardPoints: true,
|
|
31
|
+
setupPointSize: true,
|
|
32
|
+
setsLineWidth: true,
|
|
33
|
+
appendFragmentOutputs: (src, getGammaOutputExpression) => src.push(`${outColor} = ${getGammaOutputExpression ? getGammaOutputExpression(vColor) : vColor};`)
|
|
34
|
+
};
|
|
35
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import {createLightSetup} from "../../webgl/WebGLRenderer.js";
|
|
2
|
+
|
|
3
|
+
export const EmphasisShaderSource = function(meshHash, programVariables, geometry, scene, isFill) {
|
|
4
|
+
const lightSetup = isFill && createLightSetup(programVariables, scene._lightsState);
|
|
5
|
+
const uColor = programVariables.createUniform("vec3", "uColor", (set, state) => set(isFill ? state.material.fillColor : state.material.edgeColor));
|
|
6
|
+
const uAlpha = programVariables.createUniform("float", "uAlpha", (set, state) => set(isFill ? state.material.fillAlpha : state.material.edgeAlpha));
|
|
7
|
+
const vColor = programVariables.createVarying("vec4", "vColor", () => {
|
|
8
|
+
const attributes = geometry.attributes;
|
|
9
|
+
const lightComponents = isFill && [
|
|
10
|
+
lightSetup.getAmbientColor()
|
|
11
|
+
].concat(attributes.normal
|
|
12
|
+
? lightSetup.directionalLights.map(
|
|
13
|
+
light => `(max(dot(${attributes.normal.view}, ${light.getDirection(geometry.viewMatrix, attributes.position.view)}), 0.0) * ${light.getColor()})`)
|
|
14
|
+
: [ ]);
|
|
15
|
+
// TODO: A blending mode for emphasis materials, to select add/multiply/mix
|
|
16
|
+
// `vec4((mix(reflectedColor, ${uColor}, 0.7)), ${uAlpha})`
|
|
17
|
+
return `vec4(${uColor}${lightComponents ? ` * (${lightComponents.join(" + ")})` : ""}, ${uAlpha})`;
|
|
18
|
+
// `${vColor} = vec4(reflectedColor + ${uColor}, ${uAlpha})`
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const outColor = programVariables.createOutput("vec4", "outColor");
|
|
22
|
+
return {
|
|
23
|
+
getHash: () => [
|
|
24
|
+
meshHash,
|
|
25
|
+
scene.gammaOutput ? "go" : "", // Gamma input not needed
|
|
26
|
+
lightSetup && lightSetup.getHash()
|
|
27
|
+
],
|
|
28
|
+
programName: isFill ? "EmphasisFill" : "EmphasisEdges",
|
|
29
|
+
dontSetFrontFace: true,
|
|
30
|
+
discardPoints: isFill,
|
|
31
|
+
drawEdges: ! isFill,
|
|
32
|
+
appendFragmentOutputs: (src, getGammaOutputExpression) => src.push(`${outColor} = ${getGammaOutputExpression ? getGammaOutputExpression(vColor) : vColor};`)
|
|
33
|
+
};
|
|
34
|
+
};
|
|
@@ -1,158 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class OcclusionShaderSource {
|
|
11
|
-
constructor(mesh) {
|
|
12
|
-
this.vertex = buildVertex(mesh);
|
|
13
|
-
this.fragment = buildFragment(mesh);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function buildVertex(mesh) {
|
|
18
|
-
const scene = mesh.scene;
|
|
19
|
-
const sectionPlanesState = scene._sectionPlanesState;
|
|
20
|
-
const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
|
|
21
|
-
const quantizedGeometry = !!mesh._geometry._state.compressGeometry;
|
|
22
|
-
const billboard = mesh._state.billboard;
|
|
23
|
-
const stationary = mesh._state.stationary;
|
|
24
|
-
const src = [];
|
|
25
|
-
src.push('#version 300 es');
|
|
26
|
-
src.push("// Mesh occlusion vertex shader");
|
|
27
|
-
src.push("in vec3 position;");
|
|
28
|
-
src.push("uniform mat4 modelMatrix;");
|
|
29
|
-
src.push("uniform mat4 viewMatrix;");
|
|
30
|
-
src.push("uniform mat4 projMatrix;");
|
|
31
|
-
src.push("uniform vec3 offset;");
|
|
32
|
-
src.push("uniform vec3 scale;");
|
|
33
|
-
if (quantizedGeometry) {
|
|
34
|
-
src.push("uniform mat4 positionsDecodeMatrix;");
|
|
35
|
-
}
|
|
36
|
-
if (clipping) {
|
|
37
|
-
src.push("out vec4 vWorldPosition;");
|
|
38
|
-
}
|
|
39
|
-
if (scene.logarithmicDepthBufferEnabled) {
|
|
40
|
-
src.push("uniform float logDepthBufFC;");
|
|
41
|
-
src.push("out float vFragDepth;");
|
|
42
|
-
src.push("bool isPerspectiveMatrix(mat4 m) {");
|
|
43
|
-
src.push(" return (m[2][3] == - 1.0);");
|
|
44
|
-
src.push("}");
|
|
45
|
-
src.push("out float isPerspective;");
|
|
46
|
-
}
|
|
47
|
-
if (billboard === "spherical" || billboard === "cylindrical") {
|
|
48
|
-
src.push("void billboard(inout mat4 mat) {");
|
|
49
|
-
src.push(" mat[0][0] = scale[0];");
|
|
50
|
-
src.push(" mat[0][1] = 0.0;");
|
|
51
|
-
src.push(" mat[0][2] = 0.0;");
|
|
52
|
-
if (billboard === "spherical") {
|
|
53
|
-
src.push(" mat[1][0] = 0.0;");
|
|
54
|
-
src.push(" mat[1][1] = scale[1];");
|
|
55
|
-
src.push(" mat[1][2] = 0.0;");
|
|
56
|
-
}
|
|
57
|
-
src.push(" mat[2][0] = 0.0;");
|
|
58
|
-
src.push(" mat[2][1] = 0.0;");
|
|
59
|
-
src.push(" mat[2][2] =1.0;");
|
|
60
|
-
src.push("}");
|
|
61
|
-
}
|
|
62
|
-
src.push("void main(void) {");
|
|
63
|
-
src.push("vec4 localPosition = vec4(position, 1.0); ");
|
|
64
|
-
src.push("vec4 worldPosition;");
|
|
65
|
-
if (quantizedGeometry) {
|
|
66
|
-
src.push("localPosition = positionsDecodeMatrix * localPosition;");
|
|
67
|
-
}
|
|
68
|
-
src.push("mat4 viewMatrix2 = viewMatrix;");
|
|
69
|
-
src.push("mat4 modelMatrix2 = modelMatrix;");
|
|
70
|
-
if (stationary) {
|
|
71
|
-
src.push("viewMatrix2[3][0] = viewMatrix2[3][1] = viewMatrix2[3][2] = 0.0;")
|
|
72
|
-
}
|
|
73
|
-
if (billboard === "spherical" || billboard === "cylindrical") {
|
|
74
|
-
src.push("mat4 modelViewMatrix = viewMatrix2 * modelMatrix2;");
|
|
75
|
-
src.push("billboard(modelMatrix2);");
|
|
76
|
-
src.push("billboard(viewMatrix2);");
|
|
77
|
-
src.push("billboard(modelViewMatrix);");
|
|
78
|
-
src.push("worldPosition = modelMatrix2 * localPosition;");
|
|
79
|
-
src.push("worldPosition.xyz = worldPosition.xyz + offset;");
|
|
80
|
-
src.push("vec4 viewPosition = modelViewMatrix * localPosition;");
|
|
81
|
-
} else {
|
|
82
|
-
src.push("worldPosition = modelMatrix2 * localPosition;");
|
|
83
|
-
src.push("worldPosition.xyz = worldPosition.xyz + offset;");
|
|
84
|
-
src.push("vec4 viewPosition = viewMatrix2 * worldPosition; ");
|
|
85
|
-
}
|
|
86
|
-
if (clipping) {
|
|
87
|
-
src.push(" vWorldPosition = worldPosition;");
|
|
88
|
-
}
|
|
89
|
-
src.push("vec4 clipPos = projMatrix * viewPosition;");
|
|
90
|
-
if (scene.logarithmicDepthBufferEnabled) {
|
|
91
|
-
src.push("vFragDepth = 1.0 + clipPos.w;");
|
|
92
|
-
src.push("isPerspective = float (isPerspectiveMatrix(projMatrix));");
|
|
93
|
-
}
|
|
94
|
-
src.push("gl_Position = clipPos;");
|
|
95
|
-
src.push("}");
|
|
96
|
-
return src;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function buildFragment(mesh) {
|
|
100
|
-
|
|
101
|
-
const scene = mesh.scene;
|
|
102
|
-
const sectionPlanesState = scene._sectionPlanesState;
|
|
103
|
-
const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
|
|
104
|
-
const src = [];
|
|
105
|
-
src.push('#version 300 es');
|
|
106
|
-
src.push("// Mesh occlusion fragment shader");
|
|
107
|
-
src.push("#ifdef GL_FRAGMENT_PRECISION_HIGH");
|
|
108
|
-
src.push("precision highp float;");
|
|
109
|
-
src.push("precision highp int;");
|
|
110
|
-
src.push("#else");
|
|
111
|
-
src.push("precision mediump float;");
|
|
112
|
-
src.push("precision mediump int;");
|
|
113
|
-
src.push("#endif");
|
|
114
|
-
|
|
115
|
-
if (scene.logarithmicDepthBufferEnabled) {
|
|
116
|
-
src.push("in float isPerspective;");
|
|
117
|
-
src.push("uniform float logDepthBufFC;");
|
|
118
|
-
src.push("in float vFragDepth;");
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
if (clipping) {
|
|
122
|
-
src.push("uniform bool clippable;");
|
|
123
|
-
src.push("in vec4 vWorldPosition;");
|
|
124
|
-
for (var i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
|
|
125
|
-
src.push("uniform bool sectionPlaneActive" + i + ";");
|
|
126
|
-
src.push("uniform vec3 sectionPlanePos" + i + ";");
|
|
127
|
-
src.push("uniform vec3 sectionPlaneDir" + i + ";");
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
src.push("out vec4 outColor;");
|
|
132
|
-
|
|
133
|
-
src.push("void main(void) {");
|
|
134
|
-
|
|
135
|
-
if (clipping) {
|
|
136
|
-
src.push("if (clippable) {");
|
|
137
|
-
src.push(" float dist = 0.0;");
|
|
138
|
-
for (var i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
|
|
139
|
-
src.push("if (sectionPlaneActive" + i + ") {");
|
|
140
|
-
src.push(" dist += clamp(dot(-sectionPlaneDir" + i + ".xyz, vWorldPosition.xyz - sectionPlanePos" + i + ".xyz), 0.0, 1000.0);");
|
|
141
|
-
src.push("}");
|
|
142
|
-
}
|
|
143
|
-
src.push(" if (dist > 0.0) { discard; }");
|
|
144
|
-
src.push("}");
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
src.push(" outColor = vec4(0.0, 0.0, 1.0, 1.0); ");
|
|
148
|
-
|
|
149
|
-
if (scene.logarithmicDepthBufferEnabled) {
|
|
150
|
-
src.push("gl_FragDepth = isPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;");
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
src.push("}");
|
|
154
|
-
|
|
155
|
-
return src;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
export {OcclusionShaderSource};
|
|
1
|
+
export const OcclusionShaderSource = function(meshPickOcclusionHash, programVariables) {
|
|
2
|
+
const outColor = programVariables.createOutput("vec4", "outColor");
|
|
3
|
+
return {
|
|
4
|
+
getHash: () => [ meshPickOcclusionHash ],
|
|
5
|
+
programName: "Occlusion",
|
|
6
|
+
skipIfTransparent: true,
|
|
7
|
+
appendFragmentOutputs: (src) => src.push(`${outColor} = vec4(0.0, 0.0, 1.0, 1.0);`)
|
|
8
|
+
};
|
|
9
|
+
};
|
|
@@ -1,152 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*/
|
|
1
|
+
import {math} from "../../math/math.js";
|
|
2
|
+
const tmpVec4 = math.vec4();
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
src.push("// Mesh picking vertex shader");
|
|
25
|
-
src.push("in vec3 position;");
|
|
26
|
-
src.push("uniform mat4 modelMatrix;");
|
|
27
|
-
src.push("uniform mat4 viewMatrix;");
|
|
28
|
-
src.push("uniform mat4 projMatrix;");
|
|
29
|
-
src.push("out vec4 vViewPosition;");
|
|
30
|
-
src.push("uniform vec3 offset;");
|
|
31
|
-
src.push("uniform vec3 scale;");
|
|
32
|
-
if (quantizedGeometry) {
|
|
33
|
-
src.push("uniform mat4 positionsDecodeMatrix;");
|
|
34
|
-
}
|
|
35
|
-
if (clipping) {
|
|
36
|
-
src.push("out vec4 vWorldPosition;");
|
|
37
|
-
}
|
|
38
|
-
if (scene.logarithmicDepthBufferEnabled) {
|
|
39
|
-
src.push("uniform float logDepthBufFC;");
|
|
40
|
-
src.push("out float vFragDepth;");
|
|
41
|
-
src.push("bool isPerspectiveMatrix(mat4 m) {");
|
|
42
|
-
src.push(" return (m[2][3] == - 1.0);");
|
|
43
|
-
src.push("}");
|
|
44
|
-
src.push("out float isPerspective;");
|
|
45
|
-
}
|
|
46
|
-
if (billboard === "spherical" || billboard === "cylindrical") {
|
|
47
|
-
src.push("void billboard(inout mat4 mat) {");
|
|
48
|
-
src.push(" mat[0][0] = scale[0];");
|
|
49
|
-
src.push(" mat[0][1] = 0.0;");
|
|
50
|
-
src.push(" mat[0][2] = 0.0;");
|
|
51
|
-
if (billboard === "spherical") {
|
|
52
|
-
src.push(" mat[1][0] = 0.0;");
|
|
53
|
-
src.push(" mat[1][1] = scale[1];");
|
|
54
|
-
src.push(" mat[1][2] = 0.0;");
|
|
55
|
-
}
|
|
56
|
-
src.push(" mat[2][0] = 0.0;");
|
|
57
|
-
src.push(" mat[2][1] = 0.0;");
|
|
58
|
-
src.push(" mat[2][2] =1.0;");
|
|
59
|
-
src.push("}");
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
src.push("uniform vec2 pickClipPos;");
|
|
63
|
-
|
|
64
|
-
src.push("vec4 remapClipPos(vec4 clipPos) {");
|
|
65
|
-
src.push(" clipPos.xy /= clipPos.w;")
|
|
66
|
-
src.push(" clipPos.xy -= pickClipPos;");
|
|
67
|
-
src.push(" clipPos.xy *= clipPos.w;")
|
|
68
|
-
src.push(" return clipPos;")
|
|
69
|
-
src.push("}");
|
|
70
|
-
|
|
71
|
-
src.push("void main(void) {");
|
|
72
|
-
src.push("vec4 localPosition = vec4(position, 1.0); ");
|
|
73
|
-
if (quantizedGeometry) {
|
|
74
|
-
src.push("localPosition = positionsDecodeMatrix * localPosition;");
|
|
75
|
-
}
|
|
76
|
-
src.push("mat4 viewMatrix2 = viewMatrix;");
|
|
77
|
-
src.push("mat4 modelMatrix2 = modelMatrix;");
|
|
78
|
-
if (stationary) {
|
|
79
|
-
src.push("viewMatrix2[3][0] = viewMatrix2[3][1] = viewMatrix2[3][2] = 0.0;")
|
|
80
|
-
}
|
|
81
|
-
if (billboard === "spherical" || billboard === "cylindrical") {
|
|
82
|
-
src.push("mat4 modelViewMatrix = viewMatrix2 * modelMatrix2;");
|
|
83
|
-
src.push("billboard(modelMatrix2);");
|
|
84
|
-
src.push("billboard(viewMatrix2);");
|
|
85
|
-
}
|
|
86
|
-
src.push(" vec4 worldPosition = modelMatrix2 * localPosition;");
|
|
87
|
-
src.push(" worldPosition.xyz = worldPosition.xyz + offset;");
|
|
88
|
-
src.push(" vec4 viewPosition = viewMatrix2 * worldPosition;");
|
|
89
|
-
if (clipping) {
|
|
90
|
-
src.push(" vWorldPosition = worldPosition;");
|
|
91
|
-
}
|
|
92
|
-
src.push("vec4 clipPos = projMatrix * viewPosition;");
|
|
93
|
-
if (scene.logarithmicDepthBufferEnabled) {
|
|
94
|
-
src.push("vFragDepth = 1.0 + clipPos.w;");
|
|
95
|
-
src.push("isPerspective = float (isPerspectiveMatrix(projMatrix));");
|
|
96
|
-
}
|
|
97
|
-
src.push("gl_Position = remapClipPos(clipPos);");
|
|
98
|
-
src.push("}");
|
|
99
|
-
return src;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function buildFragment(mesh) {
|
|
103
|
-
const scene = mesh.scene;
|
|
104
|
-
const sectionPlanesState = scene._sectionPlanesState;
|
|
105
|
-
const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
|
|
106
|
-
const src = [];
|
|
107
|
-
src.push('#version 300 es');
|
|
108
|
-
src.push("// Mesh picking fragment shader");
|
|
109
|
-
src.push("#ifdef GL_FRAGMENT_PRECISION_HIGH");
|
|
110
|
-
src.push("precision highp float;");
|
|
111
|
-
src.push("precision highp int;");
|
|
112
|
-
src.push("#else");
|
|
113
|
-
src.push("precision mediump float;");
|
|
114
|
-
src.push("precision mediump int;");
|
|
115
|
-
src.push("#endif");
|
|
116
|
-
if (scene.logarithmicDepthBufferEnabled) {
|
|
117
|
-
src.push("in float isPerspective;");
|
|
118
|
-
src.push("uniform float logDepthBufFC;");
|
|
119
|
-
src.push("in float vFragDepth;");
|
|
120
|
-
}
|
|
121
|
-
src.push("uniform vec4 pickColor;");
|
|
122
|
-
if (clipping) {
|
|
123
|
-
src.push("uniform bool clippable;");
|
|
124
|
-
src.push("in vec4 vWorldPosition;");
|
|
125
|
-
for (var i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
|
|
126
|
-
src.push("uniform bool sectionPlaneActive" + i + ";");
|
|
127
|
-
src.push("uniform vec3 sectionPlanePos" + i + ";");
|
|
128
|
-
src.push("uniform vec3 sectionPlaneDir" + i + ";");
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
src.push("out vec4 outColor;");
|
|
132
|
-
src.push("void main(void) {");
|
|
133
|
-
if (clipping) {
|
|
134
|
-
src.push("if (clippable) {");
|
|
135
|
-
src.push(" float dist = 0.0;");
|
|
136
|
-
for (var i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
|
|
137
|
-
src.push("if (sectionPlaneActive" + i + ") {");
|
|
138
|
-
src.push(" dist += clamp(dot(-sectionPlaneDir" + i + ".xyz, vWorldPosition.xyz - sectionPlanePos" + i + ".xyz), 0.0, 1000.0);");
|
|
139
|
-
src.push("}");
|
|
140
|
-
}
|
|
141
|
-
src.push(" if (dist > 0.0) { discard; }");
|
|
142
|
-
src.push("}");
|
|
143
|
-
}
|
|
144
|
-
if (scene.logarithmicDepthBufferEnabled) {
|
|
145
|
-
src.push("gl_FragDepth = isPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;");
|
|
146
|
-
}
|
|
147
|
-
src.push(" outColor = pickColor; ");
|
|
148
|
-
src.push("}");
|
|
149
|
-
return src;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
export {PickMeshShaderSource};
|
|
4
|
+
export const PickMeshShaderSource = function(meshHash, programVariables) {
|
|
5
|
+
const pickColor = programVariables.createUniform("vec4", "pickColor", (set, state) => {
|
|
6
|
+
var pickID = state.meshPickID; // Mesh-indexed color
|
|
7
|
+
tmpVec4[0] = pickID & 0xFF;
|
|
8
|
+
tmpVec4[1] = pickID >> 8 & 0xFF;
|
|
9
|
+
tmpVec4[2] = pickID >> 16 & 0xFF;
|
|
10
|
+
tmpVec4[3] = pickID >> 24 & 0xFF;
|
|
11
|
+
math.mulVec4Scalar(tmpVec4, 1 / 255, tmpVec4);
|
|
12
|
+
set(tmpVec4);
|
|
13
|
+
});
|
|
14
|
+
const outColor = programVariables.createOutput("vec4", "outColor");
|
|
15
|
+
return {
|
|
16
|
+
getHash: () => [ meshHash ],
|
|
17
|
+
programName: "PickMesh",
|
|
18
|
+
isPick: true,
|
|
19
|
+
dontBillboardAnything: true,
|
|
20
|
+
appendFragmentOutputs: (src) => src.push(`${outColor} = ${pickColor};`)
|
|
21
|
+
};
|
|
22
|
+
};
|
|
@@ -1,124 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const scene = mesh.scene;
|
|
14
|
-
const sectionPlanesState = scene._sectionPlanesState;
|
|
15
|
-
const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
|
|
16
|
-
const quantizedGeometry = !!mesh._geometry._state.compressGeometry;
|
|
17
|
-
const src = [];
|
|
18
|
-
src.push('#version 300 es');
|
|
19
|
-
src.push("// Surface picking vertex shader");
|
|
20
|
-
src.push("in vec3 position;");
|
|
21
|
-
src.push("in vec4 color;");
|
|
22
|
-
src.push("uniform mat4 modelMatrix;");
|
|
23
|
-
src.push("uniform mat4 viewMatrix;");
|
|
24
|
-
src.push("uniform mat4 projMatrix;");
|
|
25
|
-
src.push("uniform vec3 offset;");
|
|
26
|
-
if (clipping) {
|
|
27
|
-
src.push("uniform bool clippable;");
|
|
28
|
-
src.push("out vec4 vWorldPosition;");
|
|
29
|
-
}
|
|
30
|
-
if (scene.logarithmicDepthBufferEnabled) {
|
|
31
|
-
src.push("uniform float logDepthBufFC;");
|
|
32
|
-
src.push("out float vFragDepth;");
|
|
33
|
-
src.push("bool isPerspectiveMatrix(mat4 m) {");
|
|
34
|
-
src.push(" return (m[2][3] == - 1.0);");
|
|
35
|
-
src.push("}");
|
|
36
|
-
src.push("out float isPerspective;");
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
src.push("uniform vec2 pickClipPos;");
|
|
40
|
-
|
|
41
|
-
src.push("vec4 remapClipPos(vec4 clipPos) {");
|
|
42
|
-
src.push(" clipPos.xy /= clipPos.w;")
|
|
43
|
-
src.push(" clipPos.xy -= pickClipPos;");
|
|
44
|
-
src.push(" clipPos.xy *= clipPos.w;")
|
|
45
|
-
src.push(" return clipPos;")
|
|
46
|
-
src.push("}");
|
|
47
|
-
|
|
48
|
-
src.push("out vec4 vColor;");
|
|
49
|
-
if (quantizedGeometry) {
|
|
50
|
-
src.push("uniform mat4 positionsDecodeMatrix;");
|
|
51
|
-
}
|
|
52
|
-
src.push("void main(void) {");
|
|
53
|
-
src.push("vec4 localPosition = vec4(position, 1.0); ");
|
|
54
|
-
if (quantizedGeometry) {
|
|
55
|
-
src.push("localPosition = positionsDecodeMatrix * localPosition;");
|
|
56
|
-
}
|
|
57
|
-
src.push(" vec4 worldPosition = modelMatrix * localPosition; ");
|
|
58
|
-
src.push(" worldPosition.xyz = worldPosition.xyz + offset;");
|
|
59
|
-
src.push(" vec4 viewPosition = viewMatrix * worldPosition;");
|
|
60
|
-
if (clipping) {
|
|
61
|
-
src.push(" vWorldPosition = worldPosition;");
|
|
62
|
-
}
|
|
63
|
-
src.push(" vColor = color;");
|
|
64
|
-
src.push("vec4 clipPos = projMatrix * viewPosition;");
|
|
65
|
-
if (scene.logarithmicDepthBufferEnabled) {
|
|
66
|
-
src.push("vFragDepth = 1.0 + clipPos.w;");
|
|
67
|
-
src.push("isPerspective = float (isPerspectiveMatrix(projMatrix));");
|
|
68
|
-
}
|
|
69
|
-
src.push("gl_Position = remapClipPos(clipPos);");
|
|
70
|
-
src.push("}");
|
|
71
|
-
return src;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
function buildFragment(mesh) {
|
|
75
|
-
const scene = mesh.scene;
|
|
76
|
-
const sectionPlanesState = scene._sectionPlanesState;
|
|
77
|
-
const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
|
|
78
|
-
const src = [];
|
|
79
|
-
src.push('#version 300 es');
|
|
80
|
-
src.push("// Surface picking fragment shader");
|
|
81
|
-
src.push("#ifdef GL_FRAGMENT_PRECISION_HIGH");
|
|
82
|
-
src.push("precision highp float;");
|
|
83
|
-
src.push("precision highp int;");
|
|
84
|
-
src.push("#else");
|
|
85
|
-
src.push("precision mediump float;");
|
|
86
|
-
src.push("precision mediump int;");
|
|
87
|
-
src.push("#endif");
|
|
88
|
-
src.push("in vec4 vColor;");
|
|
89
|
-
if (scene.logarithmicDepthBufferEnabled) {
|
|
90
|
-
src.push("in float isPerspective;");
|
|
91
|
-
src.push("uniform float logDepthBufFC;");
|
|
92
|
-
src.push("in float vFragDepth;");
|
|
93
|
-
}
|
|
94
|
-
if (clipping) {
|
|
95
|
-
src.push("uniform bool clippable;");
|
|
96
|
-
src.push("in vec4 vWorldPosition;");
|
|
97
|
-
for (let i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
|
|
98
|
-
src.push("uniform bool sectionPlaneActive" + i + ";");
|
|
99
|
-
src.push("uniform vec3 sectionPlanePos" + i + ";");
|
|
100
|
-
src.push("uniform vec3 sectionPlaneDir" + i + ";");
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
src.push("out vec4 outColor;");
|
|
104
|
-
src.push("void main(void) {");
|
|
105
|
-
if (clipping) {
|
|
106
|
-
src.push("if (clippable) {");
|
|
107
|
-
src.push(" float dist = 0.0;");
|
|
108
|
-
for (let i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
|
|
109
|
-
src.push("if (sectionPlaneActive" + i + ") {");
|
|
110
|
-
src.push(" dist += clamp(dot(-sectionPlaneDir" + i + ".xyz, vWorldPosition.xyz - sectionPlanePos" + i + ".xyz), 0.0, 1000.0);");
|
|
111
|
-
src.push("}");
|
|
112
|
-
}
|
|
113
|
-
src.push(" if (dist > 0.0) { discard; }");
|
|
114
|
-
src.push("}");
|
|
115
|
-
}
|
|
116
|
-
if (scene.logarithmicDepthBufferEnabled) {
|
|
117
|
-
src.push("gl_FragDepth = isPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;");
|
|
118
|
-
}
|
|
119
|
-
src.push(" outColor = vColor;");
|
|
120
|
-
src.push("}");
|
|
121
|
-
return src;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
export {PickTriangleShaderSource};
|
|
1
|
+
export const PickTriangleShaderSource = function(meshHash, programVariables, geometry) {
|
|
2
|
+
const vColor = programVariables.createVarying("vec4", "vColor", () => geometry.attributes.pickColor);
|
|
3
|
+
const outColor = programVariables.createOutput("vec4", "outColor");
|
|
4
|
+
return {
|
|
5
|
+
getHash: () => [ meshHash ],
|
|
6
|
+
programName: "PickTriangle",
|
|
7
|
+
isPick: true,
|
|
8
|
+
trianglePick: true,
|
|
9
|
+
dontBillboardAnything: true,
|
|
10
|
+
appendFragmentOutputs: (src) => src.push(`${outColor} = ${vColor};`)
|
|
11
|
+
};
|
|
12
|
+
};
|
|
@@ -1,98 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
function buildVertex(mesh) {
|
|
12
|
-
const scene = mesh.scene;
|
|
13
|
-
const clipping = scene._sectionPlanesState.sectionPlanes.length > 0;
|
|
14
|
-
const quantizedGeometry = !!mesh._geometry._state.compressGeometry;
|
|
15
|
-
const src = [];
|
|
16
|
-
src.push("// Mesh shadow vertex shader");
|
|
17
|
-
src.push("in vec3 position;");
|
|
18
|
-
src.push("uniform mat4 modelMatrix;");
|
|
19
|
-
src.push("uniform mat4 shadowViewMatrix;");
|
|
20
|
-
src.push("uniform mat4 shadowProjMatrix;");
|
|
21
|
-
src.push("uniform vec3 offset;");
|
|
22
|
-
if (quantizedGeometry) {
|
|
23
|
-
src.push("uniform mat4 positionsDecodeMatrix;");
|
|
24
|
-
}
|
|
25
|
-
if (clipping) {
|
|
26
|
-
src.push("out vec4 vWorldPosition;");
|
|
27
|
-
}
|
|
28
|
-
src.push("void main(void) {");
|
|
29
|
-
src.push("vec4 localPosition = vec4(position, 1.0); ");
|
|
30
|
-
src.push("vec4 worldPosition;");
|
|
31
|
-
if (quantizedGeometry) {
|
|
32
|
-
src.push("localPosition = positionsDecodeMatrix * localPosition;");
|
|
33
|
-
}
|
|
34
|
-
src.push("worldPosition = modelMatrix * localPosition;");
|
|
35
|
-
src.push("worldPosition.xyz = worldPosition.xyz + offset;");
|
|
36
|
-
src.push("vec4 viewPosition = shadowViewMatrix * worldPosition; ");
|
|
37
|
-
if (clipping) {
|
|
38
|
-
src.push("vWorldPosition = worldPosition;");
|
|
39
|
-
}
|
|
40
|
-
src.push(" gl_Position = shadowProjMatrix * viewPosition;");
|
|
41
|
-
src.push("}");
|
|
42
|
-
return src;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function buildFragment(mesh) {
|
|
46
|
-
const scene = mesh.scene;
|
|
47
|
-
const gl = scene.canvas.gl;
|
|
48
|
-
const sectionPlanesState = scene._sectionPlanesState;
|
|
49
|
-
const clipping = sectionPlanesState.getNumAllocatedSectionPlanes() > 0;
|
|
50
|
-
const src = [];
|
|
51
|
-
src.push("// Mesh shadow fragment shader");
|
|
52
|
-
|
|
53
|
-
src.push("#ifdef GL_FRAGMENT_PRECISION_HIGH");
|
|
54
|
-
src.push("precision highp float;");
|
|
55
|
-
src.push("precision highp int;");
|
|
56
|
-
src.push("#else");
|
|
57
|
-
src.push("precision mediump float;");
|
|
58
|
-
src.push("precision mediump int;");
|
|
59
|
-
src.push("#endif");
|
|
60
|
-
|
|
61
|
-
if (clipping) {
|
|
62
|
-
src.push("uniform bool clippable;");
|
|
63
|
-
src.push("in vec4 vWorldPosition;");
|
|
64
|
-
for (var i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
|
|
65
|
-
src.push("uniform bool sectionPlaneActive" + i + ";");
|
|
66
|
-
src.push("uniform vec3 sectionPlanePos" + i + ";");
|
|
67
|
-
src.push("uniform vec3 sectionPlaneDir" + i + ";");
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
src.push("vec4 encodeFloat( const in float depth ) {");
|
|
72
|
-
src.push(" const vec4 bitShift = vec4(256 * 256 * 256, 256 * 256, 256, 1.0);");
|
|
73
|
-
src.push(" const vec4 bitMask = vec4(0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0);");
|
|
74
|
-
src.push(" vec4 comp = fract(depth * bitShift);");
|
|
75
|
-
src.push(" comp -= comp.xxyz * bitMask;");
|
|
76
|
-
src.push(" return comp;");
|
|
77
|
-
src.push("}");
|
|
78
|
-
|
|
79
|
-
src.push("out vec4 outColor;");
|
|
80
|
-
|
|
81
|
-
src.push("void main(void) {");
|
|
82
|
-
if (clipping) {
|
|
83
|
-
src.push("if (clippable) {");
|
|
84
|
-
src.push(" float dist = 0.0;");
|
|
85
|
-
for (var i = 0; i < sectionPlanesState.getNumAllocatedSectionPlanes(); i++) {
|
|
86
|
-
src.push("if (sectionPlaneActive" + i + ") {");
|
|
87
|
-
src.push(" dist += clamp(dot(-sectionPlaneDir" + i + ".xyz, vWorldPosition.xyz - sectionPlanePos" + i + ".xyz), 0.0, 1000.0);");
|
|
1
|
+
export const ShadowShaderSource = function(meshHash, programVariables) {
|
|
2
|
+
const encodeFloat = programVariables.createFragmentDefinition(
|
|
3
|
+
"encodeFloat",
|
|
4
|
+
(name, src) => {
|
|
5
|
+
src.push(`vec4 ${name}( const in float depth ) {`);
|
|
6
|
+
src.push(" const vec4 bitShift = vec4(256 * 256 * 256, 256 * 256, 256, 1.0);");
|
|
7
|
+
src.push(" const vec4 bitMask = vec4(0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0);");
|
|
8
|
+
src.push(" vec4 comp = fract(depth * bitShift);");
|
|
9
|
+
src.push(" comp -= comp.xxyz * bitMask;");
|
|
10
|
+
src.push(" return comp;");
|
|
88
11
|
src.push("}");
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
12
|
+
});
|
|
13
|
+
const outColor = programVariables.createOutput("vec4", "outColor");
|
|
14
|
+
return {
|
|
15
|
+
getHash: () => [ meshHash ],
|
|
16
|
+
programName: "Shadow",
|
|
17
|
+
setsLineWidth: true,
|
|
18
|
+
useShadowView: true,
|
|
19
|
+
dontBillboardAnything: true,
|
|
20
|
+
dontGetLogDepth: true,
|
|
21
|
+
appendFragmentOutputs: (src, getGammaOutputExpression, gl_FragCoord) => src.push(`${outColor} = ${encodeFloat}(${gl_FragCoord}.z);`)
|
|
22
|
+
};
|
|
23
|
+
};
|