deeptwins-cesium-engine 0.1.2 → 0.1.4
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/Build/Workers/chunk-2HWLF3FT.js +837 -0
- package/Build/Workers/chunk-2KXMJ5XS.js +3792 -0
- package/Build/Workers/chunk-2NPCLB3H.js +56 -0
- package/Build/Workers/chunk-2ZHQTIBH.js +1483 -0
- package/Build/Workers/chunk-3GLYOW63.js +352 -0
- package/Build/Workers/chunk-3L22KMPU.js +219 -0
- package/Build/Workers/chunk-3Q6V2B2I.js +73 -0
- package/Build/Workers/chunk-3QOKKRIG.js +387 -0
- package/Build/Workers/chunk-44YZFGRH.js +1800 -0
- package/Build/Workers/chunk-45VV4SBO.js +2342 -0
- package/Build/Workers/chunk-4EJ4AA2S.js +368 -0
- package/Build/Workers/chunk-4IJFHUL6.js +414 -0
- package/Build/Workers/chunk-4K3V5CGW.js +454 -0
- package/Build/Workers/chunk-4M4QL6KJ.js +305 -0
- package/Build/Workers/chunk-4YNRIEQ6.js +288 -0
- package/Build/Workers/chunk-56CVDPH5.js +352 -0
- package/Build/Workers/chunk-5CTAAPXH.js +1483 -0
- package/Build/Workers/chunk-5ISZ6NJD.js +102 -0
- package/Build/Workers/chunk-5SDHYIOS.js +56 -0
- package/Build/Workers/chunk-66TGUMCU.js +2719 -0
- package/Build/Workers/chunk-6EJMTDQJ.js +163 -0
- package/Build/Workers/chunk-6VWXYSMH.js +959 -0
- package/Build/Workers/chunk-6VZ7VB2Q.js +241 -0
- package/Build/Workers/chunk-7AMRE57Q.js +301 -0
- package/Build/Workers/chunk-7DH6C33H.js +398 -0
- package/Build/Workers/chunk-7VUS3FVE.js +38 -0
- package/Build/Workers/chunk-7Y3ZA6H3.js +198 -0
- package/Build/Workers/chunk-A6BMHZNA.js +38 -0
- package/Build/Workers/chunk-A7XY2MN7.js +171 -0
- package/Build/Workers/chunk-AC7ND63S.js +57 -0
- package/Build/Workers/chunk-AHCZ757M.js +9230 -0
- package/Build/Workers/chunk-ANOA7E7F.js +56 -0
- package/Build/Workers/chunk-AYO5HHV6.js +789 -0
- package/Build/Workers/chunk-BE2N56VZ.js +1344 -0
- package/Build/Workers/chunk-BR3BPM64.js +9230 -0
- package/Build/Workers/chunk-BVMRWGOK.js +455 -0
- package/Build/Workers/chunk-BXEL2NX7.js +455 -0
- package/Build/Workers/chunk-C5BO2JCG.js +278 -0
- package/Build/Workers/chunk-CIRQNZVR.js +301 -0
- package/Build/Workers/chunk-CM67CQME.js +305 -0
- package/Build/Workers/chunk-D3QIW4DH.js +630 -0
- package/Build/Workers/chunk-E5W7QIGZ.js +511 -0
- package/Build/Workers/chunk-E6CYGUJI.js +1054 -0
- package/Build/Workers/chunk-EIZ23IOX.js +414 -0
- package/Build/Workers/chunk-EIZJUMQY.js +101 -0
- package/Build/Workers/chunk-EXTMZJXB.js +82 -0
- package/Build/Workers/chunk-EYOOSIBW.js +682 -0
- package/Build/Workers/chunk-F37WADVC.js +1054 -0
- package/Build/Workers/chunk-FIWPJFHX.js +101 -0
- package/Build/Workers/chunk-FM32TNGT.js +198 -0
- package/Build/Workers/chunk-FOMYIEIB.js +476 -0
- package/Build/Workers/chunk-FWYDLSVQ.js +97 -0
- package/Build/Workers/chunk-HGZR6CZF.js +1067 -0
- package/Build/Workers/chunk-HIXHDABG.js +288 -0
- package/Build/Workers/chunk-HMCCZZWE.js +97 -0
- package/Build/Workers/chunk-HW54WHGM.js +2719 -0
- package/Build/Workers/chunk-IHYAI7GF.js +973 -0
- package/Build/Workers/chunk-INLQ7LVK.js +837 -0
- package/Build/Workers/chunk-IQMESTCB.js +124 -0
- package/Build/Workers/chunk-J4PISUNT.js +2342 -0
- package/Build/Workers/chunk-JSWU557I.js +693 -0
- package/Build/Workers/chunk-KHONDSQ7.js +693 -0
- package/Build/Workers/chunk-KLUL2SOE.js +352 -0
- package/Build/Workers/chunk-KMBLKQCC.js +1992 -0
- package/Build/Workers/chunk-KOTWWQN7.js +171 -0
- package/Build/Workers/chunk-KWV6ZTF4.js +163 -0
- package/Build/Workers/chunk-LSEFPQHG.js +476 -0
- package/Build/Workers/chunk-M66X4O24.js +44 -0
- package/Build/Workers/chunk-M6IXKBC7.js +1992 -0
- package/Build/Workers/chunk-MFUC3D5C.js +162 -0
- package/Build/Workers/chunk-MRMNELAH.js +82 -0
- package/Build/Workers/chunk-N3NUA5H2.js +3792 -0
- package/Build/Workers/chunk-NFB2NXJN.js +138 -0
- package/Build/Workers/chunk-NQAXBK4K.js +789 -0
- package/Build/Workers/chunk-NUGQWV6S.js +352 -0
- package/Build/Workers/chunk-O7S7WL7K.js +278 -0
- package/Build/Workers/chunk-ODZYB26X.js +1287 -0
- package/Build/Workers/chunk-OEHJY463.js +3201 -0
- package/Build/Workers/chunk-OMMRNMXF.js +44 -0
- package/Build/Workers/chunk-OZ3CQDO3.js +138 -0
- package/Build/Workers/chunk-PNXBG64I.js +219 -0
- package/Build/Workers/chunk-PYR35GK4.js +973 -0
- package/Build/Workers/chunk-Q4CXGW74.js +57 -0
- package/Build/Workers/chunk-QGISLKCW.js +147 -0
- package/Build/Workers/chunk-QQHVOJW6.js +497 -0
- package/Build/Workers/chunk-QWCMMRJW.js +58 -0
- package/Build/Workers/chunk-RDEZCHF4.js +398 -0
- package/Build/Workers/chunk-SJTE7FVN.js +778 -0
- package/Build/Workers/chunk-SM5T67LR.js +162 -0
- package/Build/Workers/chunk-T27NNXEU.js +58 -0
- package/Build/Workers/chunk-T4J5BWUO.js +511 -0
- package/Build/Workers/chunk-T6JS4BRN.js +140 -0
- package/Build/Workers/chunk-UH6DUQBW.js +140 -0
- package/Build/Workers/chunk-UJAH6XKF.js +73 -0
- package/Build/Workers/chunk-UKSTJ2PH.js +454 -0
- package/Build/Workers/chunk-UQCDCCZ7.js +368 -0
- package/Build/Workers/chunk-UXIFNEA3.js +1287 -0
- package/Build/Workers/chunk-UXJ6J5L7.js +56 -0
- package/Build/Workers/chunk-V4VUAZXI.js +1800 -0
- package/Build/Workers/chunk-VQH2YXO2.js +497 -0
- package/Build/Workers/chunk-VXKCLSE4.js +241 -0
- package/Build/Workers/chunk-W3U6YBEI.js +280 -0
- package/Build/Workers/chunk-W75ZVFKP.js +778 -0
- package/Build/Workers/chunk-WCDFJYFB.js +1344 -0
- package/Build/Workers/chunk-WME5M6W3.js +630 -0
- package/Build/Workers/chunk-XDQBQB64.js +1067 -0
- package/Build/Workers/chunk-Y6HOIWE5.js +959 -0
- package/Build/Workers/chunk-YEMC2ZOR.js +147 -0
- package/Build/Workers/chunk-YWNF3TPE.js +682 -0
- package/Build/Workers/chunk-Z55VGWJP.js +280 -0
- package/Build/Workers/chunk-Z5YWP24C.js +124 -0
- package/Build/Workers/chunk-ZHXCWUJB.js +387 -0
- package/Build/Workers/chunk-ZIMPUF2I.js +102 -0
- package/Build/Workers/chunk-ZKDWYQKC.js +3201 -0
- package/Build/Workers/combineGeometry.js +24 -22
- package/Build/Workers/createBoxGeometry.js +18 -16
- package/Build/Workers/createBoxOutlineGeometry.js +23 -25
- package/Build/Workers/createCircleGeometry.js +29 -27
- package/Build/Workers/createCircleOutlineGeometry.js +22 -20
- package/Build/Workers/createCoplanarPolygonGeometry.js +43 -43
- package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +37 -35
- package/Build/Workers/createCorridorGeometry.js +46 -49
- package/Build/Workers/createCorridorOutlineGeometry.js +40 -43
- package/Build/Workers/createCylinderGeometry.js +20 -18
- package/Build/Workers/createCylinderOutlineGeometry.js +27 -25
- package/Build/Workers/createEllipseGeometry.js +28 -25
- package/Build/Workers/createEllipseOutlineGeometry.js +21 -18
- package/Build/Workers/createEllipsoidGeometry.js +19 -17
- package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -16
- package/Build/Workers/createFrustumGeometry.js +18 -16
- package/Build/Workers/createFrustumOutlineGeometry.js +21 -21
- package/Build/Workers/createGeometry.js +31 -26
- package/Build/Workers/createGroundPolylineGeometry.js +188 -135
- package/Build/Workers/createPlaneGeometry.js +22 -21
- package/Build/Workers/createPlaneOutlineGeometry.js +15 -13
- package/Build/Workers/createPolygonGeometry.js +51 -52
- package/Build/Workers/createPolygonOutlineGeometry.js +43 -44
- package/Build/Workers/createPolylineGeometry.js +37 -40
- package/Build/Workers/createPolylineVolumeGeometry.js +41 -44
- package/Build/Workers/createPolylineVolumeOutlineGeometry.js +36 -39
- package/Build/Workers/createRectangleGeometry.js +47 -53
- package/Build/Workers/createRectangleOutlineGeometry.js +32 -33
- package/Build/Workers/createSimplePolylineGeometry.js +33 -34
- package/Build/Workers/createSphereGeometry.js +20 -20
- package/Build/Workers/createSphereOutlineGeometry.js +19 -19
- package/Build/Workers/createTaskProcessorWorker.js +3 -3
- package/Build/Workers/createVectorTileClampedPolylines.js +16 -14
- package/Build/Workers/createVectorTileGeometries.js +24 -22
- package/Build/Workers/createVectorTilePoints.js +15 -13
- package/Build/Workers/createVectorTilePolygons.js +24 -21
- package/Build/Workers/createVectorTilePolylines.js +16 -14
- package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +25 -25
- package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +29 -27
- package/Build/Workers/createVerticesFromHeightmap.js +42 -63
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +26 -280
- package/Build/Workers/createWallGeometry.js +35 -36
- package/Build/Workers/createWallOutlineGeometry.js +33 -34
- package/Build/Workers/decodeDraco.js +10 -11
- package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
- package/Build/Workers/decodeI3S.js +16 -20
- package/Build/Workers/gaussianSplatSorter.js +4 -4
- package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
- package/Build/Workers/incrementallyBuildTerrainPicker.js +20 -12
- package/Build/Workers/transcodeKTX2.js +42 -14
- package/Build/Workers/transferTypedArrayTest.js +1 -1
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +24 -21
- package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
- package/Source/Shaders/BillboardCollectionFS.js +85 -81
- package/Source/Shaders/BillboardCollectionVS.js +60 -118
- package/Source/Shaders/Builtin/Constants/passCesium3DTile.js +1 -1
- package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.js +1 -1
- package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.js +1 -1
- package/Source/Shaders/Builtin/Constants/passCesium3DTileEdges.js +12 -0
- package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.js +11 -0
- package/Source/Shaders/Builtin/Constants/passGaussianSplats.js +11 -0
- package/Source/Shaders/Builtin/Constants/passOpaque.js +1 -1
- package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
- package/Source/Shaders/Builtin/Constants/passTranslucent.js +1 -1
- package/Source/Shaders/Builtin/Constants/passVoxels.js +1 -1
- package/Source/Shaders/Builtin/CzmBuiltins.js +12 -0
- package/Source/Shaders/Builtin/Functions/columbusViewMorph.js +8 -1
- package/Source/Shaders/Builtin/Functions/computeTextureTransform.js +25 -0
- package/Source/Shaders/Builtin/Functions/decodeRGB8.js +24 -0
- package/Source/Shaders/Builtin/Functions/modelToWindowCoordinates.js +2 -1
- package/Source/Shaders/Builtin/Functions/unpackTexture.js +37 -0
- package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.js +0 -1
- package/Source/Shaders/EllipsoidVS.js +4 -4
- package/Source/Shaders/FXAA3_11.js +2 -0
- package/Source/Shaders/GlobeFS.js +22 -0
- package/Source/Shaders/GlobeVS.js +3 -2
- package/Source/Shaders/Model/MaterialStageFS.js +50 -20
- package/Source/Shaders/Model/MetadataStageFS.js +2 -1
- package/Source/Shaders/Model/MetadataStageVS.js +2 -1
- package/Source/Shaders/Model/ModelFS.js +32 -2
- package/Source/Shaders/Model/ModelVS.js +15 -1
- package/Source/Shaders/Model/PointCloudStylingStageVS.js +2 -1
- package/Source/Shaders/Model/PrimitiveOutlineStageFS.js +0 -1
- package/Source/Shaders/PointPrimitiveCollectionVS.js +8 -39
- package/Source/Shaders/PolygonSignedDistanceFS.js +64 -33
- package/Source/Shaders/PolylineCommon.js +1 -1
- package/Source/Shaders/ShadowVolumeAppearanceFS.js +7 -15
- package/Source/Shaders/SkyAtmosphereVS.js +2 -1
- package/Source/Shaders/Voxels/IntersectBox.js +20 -33
- package/Source/Shaders/Voxels/IntersectCylinder.js +28 -32
- package/Source/Shaders/Voxels/IntersectDepth.js +10 -6
- package/Source/Shaders/Voxels/IntersectEllipsoid.js +12 -20
- package/Source/Shaders/Voxels/IntersectLongitude.js +21 -9
- package/Source/Shaders/Voxels/Intersection.js +3 -5
- package/Source/Shaders/Voxels/IntersectionUtils.js +2 -1
- package/Source/Shaders/Voxels/Megatexture.js +15 -83
- package/Source/Shaders/Voxels/Octree.js +53 -61
- package/Source/Shaders/Voxels/VoxelFS.js +67 -52
- package/Source/Shaders/Voxels/VoxelUtils.js +0 -19
- package/index.js +346 -261
- package/package.json +1 -1
- package/Source/Shaders/Voxels/IntersectClippingPlanes.js +0 -80
- package/Source/Shaders/Voxels/convertUvToBox.js +0 -46
- package/Source/Shaders/Voxels/convertUvToCylinder.js +0 -101
- package/Source/Shaders/Voxels/convertUvToEllipsoid.js +0 -141
|
@@ -30,6 +30,11 @@ struct TraversalData {\n\
|
|
|
30
30
|
int parentOctreeIndex;\n\
|
|
31
31
|
};\n\
|
|
32
32
|
\n\
|
|
33
|
+
struct TileAndUvCoordinate {\n\
|
|
34
|
+
ivec4 tileCoords;\n\
|
|
35
|
+
vec3 tileUv;\n\
|
|
36
|
+
};\n\
|
|
37
|
+
\n\
|
|
33
38
|
struct SampleData {\n\
|
|
34
39
|
int megatextureIndex;\n\
|
|
35
40
|
ivec4 tileCoords;\n\
|
|
@@ -40,10 +45,6 @@ struct SampleData {\n\
|
|
|
40
45
|
#endif\n\
|
|
41
46
|
};\n\
|
|
42
47
|
\n\
|
|
43
|
-
// Integer mod: For WebGL1 only\n\
|
|
44
|
-
int intMod(in int a, in int b) {\n\
|
|
45
|
-
return a - (b * (a / b));\n\
|
|
46
|
-
}\n\
|
|
47
48
|
int normU8_toInt(in float value) {\n\
|
|
48
49
|
return int(value * 255.0);\n\
|
|
49
50
|
}\n\
|
|
@@ -65,14 +66,14 @@ OctreeNodeData getOctreeNodeData(in vec2 octreeUv) {\n\
|
|
|
65
66
|
\n\
|
|
66
67
|
OctreeNodeData getOctreeChildData(in int parentOctreeIndex, in ivec3 childCoord) {\n\
|
|
67
68
|
int childIndex = childCoord.z * 4 + childCoord.y * 2 + childCoord.x;\n\
|
|
68
|
-
int octreeCoordX =
|
|
69
|
+
int octreeCoordX = (parentOctreeIndex % u_octreeInternalNodeTilesPerRow) * 9 + 1 + childIndex;\n\
|
|
69
70
|
int octreeCoordY = parentOctreeIndex / u_octreeInternalNodeTilesPerRow;\n\
|
|
70
71
|
vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5);\n\
|
|
71
72
|
return getOctreeNodeData(octreeUv);\n\
|
|
72
73
|
}\n\
|
|
73
74
|
\n\
|
|
74
75
|
int getOctreeParentIndex(in int octreeIndex) {\n\
|
|
75
|
-
int octreeCoordX =
|
|
76
|
+
int octreeCoordX = (octreeIndex % u_octreeInternalNodeTilesPerRow) * 9;\n\
|
|
76
77
|
int octreeCoordY = octreeIndex / u_octreeInternalNodeTilesPerRow;\n\
|
|
77
78
|
vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5);\n\
|
|
78
79
|
vec4 parentData = texture(u_octreeInternalNodeTexture, octreeUv);\n\
|
|
@@ -80,33 +81,31 @@ int getOctreeParentIndex(in int octreeIndex) {\n\
|
|
|
80
81
|
return parentOctreeIndex;\n\
|
|
81
82
|
}\n\
|
|
82
83
|
\n\
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
// PERFORMANCE_IDEA: use bit-shifting (only in WebGL2)\n\
|
|
89
|
-
float dimAtLevel = exp2(float(octreeCoords.w));\n\
|
|
90
|
-
return shapePosition * dimAtLevel - vec3(octreeCoords.xyz);\n\
|
|
84
|
+
vec3 getTileUv(in TileAndUvCoordinate tileAndUv, in ivec4 octreeCoords) {\n\
|
|
85
|
+
int levelDifference = tileAndUv.tileCoords.w - octreeCoords.w;\n\
|
|
86
|
+
float scalar = exp2(-1.0 * float(levelDifference));\n\
|
|
87
|
+
vec3 originShift = vec3(tileAndUv.tileCoords.xyz - (octreeCoords.xyz << levelDifference)) * scalar;\n\
|
|
88
|
+
return tileAndUv.tileUv * scalar + originShift;\n\
|
|
91
89
|
}\n\
|
|
92
90
|
\n\
|
|
93
|
-
vec3 getClampedTileUv(in
|
|
94
|
-
vec3 tileUv = getTileUv(
|
|
91
|
+
vec3 getClampedTileUv(in TileAndUvCoordinate tileAndUv, in ivec4 octreeCoords) {\n\
|
|
92
|
+
vec3 tileUv = getTileUv(tileAndUv, octreeCoords);\n\
|
|
95
93
|
return clamp(tileUv, vec3(0.0), vec3(1.0));\n\
|
|
96
94
|
}\n\
|
|
97
95
|
\n\
|
|
98
|
-
void addSampleCoordinates(in
|
|
99
|
-
vec3 tileUv = getClampedTileUv(
|
|
96
|
+
void addSampleCoordinates(in TileAndUvCoordinate tileAndUv, inout SampleData sampleData) {\n\
|
|
97
|
+
vec3 tileUv = getClampedTileUv(tileAndUv, sampleData.tileCoords);\n\
|
|
100
98
|
\n\
|
|
101
99
|
vec3 inputCoordinate = tileUv * vec3(u_dimensions);\n\
|
|
102
100
|
#if defined(PADDING)\n\
|
|
103
101
|
inputCoordinate += vec3(u_paddingBefore);\n\
|
|
104
102
|
#endif\n\
|
|
105
|
-
#if defined(
|
|
103
|
+
#if defined(Y_UP_METADATA_ORDER)\n\
|
|
106
104
|
#if defined(SHAPE_BOX)\n\
|
|
107
105
|
float inputY = inputCoordinate.y;\n\
|
|
108
|
-
inputCoordinate.y =
|
|
109
|
-
|
|
106
|
+
inputCoordinate.y = inputCoordinate.z;\n\
|
|
107
|
+
// u_inputDimensions.z is the y-up dimension along the 3D Tiles y-axis.\n\
|
|
108
|
+
inputCoordinate.z = float(u_inputDimensions.z) - inputY;\n\
|
|
110
109
|
#elif defined(SHAPE_CYLINDER)\n\
|
|
111
110
|
float angle = inputCoordinate.y;\n\
|
|
112
111
|
float height = inputCoordinate.z;\n\
|
|
@@ -138,7 +137,7 @@ void getOctreeLeafSampleDatas(in OctreeNodeData data, in ivec4 octreeCoords, out
|
|
|
138
137
|
int leafIndex = data.data;\n\
|
|
139
138
|
int leafNodeTexelCount = 2;\n\
|
|
140
139
|
// Adding 0.5 moves to the center of the texel\n\
|
|
141
|
-
float leafCoordXStart = float(
|
|
140
|
+
float leafCoordXStart = float((leafIndex % u_octreeLeafNodeTilesPerRow) * leafNodeTexelCount) + 0.5;\n\
|
|
142
141
|
float leafCoordY = float(leafIndex / u_octreeLeafNodeTilesPerRow) + 0.5;\n\
|
|
143
142
|
\n\
|
|
144
143
|
// Get an interpolation weight and a flag to determine whether to read the parent texture\n\
|
|
@@ -163,32 +162,25 @@ void getOctreeLeafSampleDatas(in OctreeNodeData data, in ivec4 octreeCoords, out
|
|
|
163
162
|
}\n\
|
|
164
163
|
#endif\n\
|
|
165
164
|
\n\
|
|
166
|
-
OctreeNodeData traverseOctreeDownwards(in
|
|
167
|
-
float sizeAtLevel = exp2(-1.0 * float(traversalData.octreeCoords.w));\n\
|
|
168
|
-
vec3 start = vec3(traversalData.octreeCoords.xyz) * sizeAtLevel;\n\
|
|
169
|
-
vec3 end = start + vec3(sizeAtLevel);\n\
|
|
165
|
+
OctreeNodeData traverseOctreeDownwards(in ivec4 tileCoordinate, inout TraversalData traversalData) {\n\
|
|
170
166
|
OctreeNodeData childData;\n\
|
|
171
167
|
\n\
|
|
172
168
|
for (int i = 0; i < OCTREE_MAX_LEVELS; ++i) {\n\
|
|
173
|
-
//
|
|
174
|
-
//
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
ivec4 octreeCoords = traversalData.octreeCoords;\n\
|
|
180
|
-
traversalData.octreeCoords = ivec4(octreeCoords.xyz * 2 + ivec3(childCoord), octreeCoords.w + 1);\n\
|
|
169
|
+
// tileCoordinate.xyz is defined at the level of detail tileCoordinate.w.\n\
|
|
170
|
+
// Find the corresponding coordinate at the level traversalData.octreeCoords.w\n\
|
|
171
|
+
int level = traversalData.octreeCoords.w + 1;\n\
|
|
172
|
+
int levelDifference = tileCoordinate.w - level;\n\
|
|
173
|
+
ivec3 coordinateAtLevel = tileCoordinate.xyz >> levelDifference;\n\
|
|
174
|
+
traversalData.octreeCoords = ivec4(coordinateAtLevel, level);\n\
|
|
181
175
|
\n\
|
|
182
|
-
|
|
176
|
+
ivec3 childCoordinate = coordinateAtLevel & 1;\n\
|
|
177
|
+
childData = getOctreeChildData(traversalData.parentOctreeIndex, childCoordinate);\n\
|
|
183
178
|
\n\
|
|
184
179
|
if (childData.flag != OCTREE_FLAG_INTERNAL) {\n\
|
|
185
180
|
// leaf tile - stop traversing\n\
|
|
186
181
|
break;\n\
|
|
187
182
|
}\n\
|
|
188
183
|
\n\
|
|
189
|
-
// interior tile - keep going deeper\n\
|
|
190
|
-
start = mix(start, center, childCoord);\n\
|
|
191
|
-
end = mix(center, end, childCoord);\n\
|
|
192
184
|
traversalData.parentOctreeIndex = childData.data;\n\
|
|
193
185
|
}\n\
|
|
194
186
|
\n\
|
|
@@ -199,50 +191,50 @@ OctreeNodeData traverseOctreeDownwards(in vec3 shapePosition, inout TraversalDat
|
|
|
199
191
|
* Transform a given position to an octree tile coordinate and a position within that tile,\n\
|
|
200
192
|
* and find the corresponding megatexture index and texture coordinates\n\
|
|
201
193
|
*/\n\
|
|
202
|
-
void traverseOctreeFromBeginning(in
|
|
194
|
+
void traverseOctreeFromBeginning(in TileAndUvCoordinate tileAndUv, out TraversalData traversalData, out SampleData sampleDatas[SAMPLE_COUNT]) {\n\
|
|
203
195
|
traversalData.octreeCoords = ivec4(0);\n\
|
|
204
196
|
traversalData.parentOctreeIndex = 0;\n\
|
|
205
197
|
\n\
|
|
206
198
|
OctreeNodeData nodeData = getOctreeNodeData(vec2(0.0));\n\
|
|
207
199
|
if (nodeData.flag != OCTREE_FLAG_LEAF) {\n\
|
|
208
|
-
nodeData = traverseOctreeDownwards(
|
|
200
|
+
nodeData = traverseOctreeDownwards(tileAndUv.tileCoords, traversalData);\n\
|
|
209
201
|
}\n\
|
|
210
202
|
\n\
|
|
211
203
|
#if (SAMPLE_COUNT == 1)\n\
|
|
212
204
|
getOctreeLeafSampleData(nodeData, traversalData.octreeCoords, sampleDatas[0]);\n\
|
|
213
|
-
addSampleCoordinates(
|
|
205
|
+
addSampleCoordinates(tileAndUv, sampleDatas[0]);\n\
|
|
214
206
|
#else\n\
|
|
215
207
|
getOctreeLeafSampleDatas(nodeData, traversalData.octreeCoords, sampleDatas);\n\
|
|
216
|
-
addSampleCoordinates(
|
|
217
|
-
addSampleCoordinates(
|
|
208
|
+
addSampleCoordinates(tileAndUv, sampleDatas[0]);\n\
|
|
209
|
+
addSampleCoordinates(tileAndUv, sampleDatas[1]);\n\
|
|
218
210
|
#endif\n\
|
|
219
211
|
}\n\
|
|
220
212
|
\n\
|
|
221
|
-
bool
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
// Assume (!) the position is always inside the root tile.\n\
|
|
229
|
-
return inside || octreeCoords.w == 0;\n\
|
|
213
|
+
bool insideTile(in ivec4 tileCoordinate, in ivec4 octreeCoords) {\n\
|
|
214
|
+
int levelDifference = tileCoordinate.w - octreeCoords.w;\n\
|
|
215
|
+
if (levelDifference < 0) {\n\
|
|
216
|
+
return false;\n\
|
|
217
|
+
}\n\
|
|
218
|
+
ivec3 coordinateAtLevel = tileCoordinate.xyz >> levelDifference;\n\
|
|
219
|
+
return coordinateAtLevel == octreeCoords.xyz;\n\
|
|
230
220
|
}\n\
|
|
231
221
|
\n\
|
|
232
|
-
void traverseOctreeFromExisting(in
|
|
233
|
-
|
|
222
|
+
void traverseOctreeFromExisting(in TileAndUvCoordinate tileAndUv, inout TraversalData traversalData, inout SampleData sampleDatas[SAMPLE_COUNT]) {\n\
|
|
223
|
+
ivec4 tileCoords = tileAndUv.tileCoords;\n\
|
|
224
|
+
if (insideTile(tileCoords, traversalData.octreeCoords)) {\n\
|
|
234
225
|
for (int i = 0; i < SAMPLE_COUNT; i++) {\n\
|
|
235
|
-
addSampleCoordinates(
|
|
226
|
+
addSampleCoordinates(tileAndUv, sampleDatas[i]);\n\
|
|
236
227
|
}\n\
|
|
237
228
|
return;\n\
|
|
238
229
|
}\n\
|
|
239
230
|
\n\
|
|
240
|
-
// Go up tree until we find a parent tile containing
|
|
231
|
+
// Go up tree until we find a parent tile containing tileCoords.\n\
|
|
232
|
+
// Assumes all parents are available all they way up to the root.\n\
|
|
241
233
|
for (int i = 0; i < OCTREE_MAX_LEVELS; ++i) {\n\
|
|
242
234
|
traversalData.octreeCoords.xyz /= 2;\n\
|
|
243
235
|
traversalData.octreeCoords.w -= 1;\n\
|
|
244
236
|
\n\
|
|
245
|
-
if (insideTile(
|
|
237
|
+
if (insideTile(tileCoords, traversalData.octreeCoords)) {\n\
|
|
246
238
|
break;\n\
|
|
247
239
|
}\n\
|
|
248
240
|
\n\
|
|
@@ -250,15 +242,15 @@ void traverseOctreeFromExisting(in vec3 shapePosition, inout TraversalData trave
|
|
|
250
242
|
}\n\
|
|
251
243
|
\n\
|
|
252
244
|
// Go down tree\n\
|
|
253
|
-
OctreeNodeData nodeData = traverseOctreeDownwards(
|
|
245
|
+
OctreeNodeData nodeData = traverseOctreeDownwards(tileCoords, traversalData);\n\
|
|
254
246
|
\n\
|
|
255
247
|
#if (SAMPLE_COUNT == 1)\n\
|
|
256
248
|
getOctreeLeafSampleData(nodeData, traversalData.octreeCoords, sampleDatas[0]);\n\
|
|
257
|
-
addSampleCoordinates(
|
|
249
|
+
addSampleCoordinates(tileAndUv, sampleDatas[0]);\n\
|
|
258
250
|
#else\n\
|
|
259
251
|
getOctreeLeafSampleDatas(nodeData, traversalData.octreeCoords, sampleDatas);\n\
|
|
260
|
-
addSampleCoordinates(
|
|
261
|
-
addSampleCoordinates(
|
|
252
|
+
addSampleCoordinates(tileAndUv, sampleDatas[0]);\n\
|
|
253
|
+
addSampleCoordinates(tileAndUv, sampleDatas[1]);\n\
|
|
262
254
|
#endif\n\
|
|
263
255
|
}\n\
|
|
264
256
|
";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
//This file is automatically rebuilt by the Cesium build process.
|
|
2
2
|
export default "// See Intersection.glsl for the definition of intersectScene\n\
|
|
3
3
|
// See IntersectionUtils.glsl for the definition of nextIntersection\n\
|
|
4
|
-
// See
|
|
5
|
-
// for the
|
|
6
|
-
// selected based on the VoxelPrimitive shape type,
|
|
7
|
-
// Scene/VoxelRenderResources.js.\n\
|
|
4
|
+
// See convertLocalToBoxUv.glsl, convertLocalToCylinderUv.glsl, or convertLocalToEllipsoidUv.glsl\n\
|
|
5
|
+
// for the definitions of convertLocalToShapeSpaceDerivative and getTileAndUvCoordinate. \n\
|
|
6
|
+
// The appropriate functions are selected based on the VoxelPrimitive shape type, \n\
|
|
7
|
+
// and added to the shader in Scene/VoxelRenderResources.js.\n\
|
|
8
8
|
// See Octree.glsl for the definitions of TraversalData, SampleData,\n\
|
|
9
9
|
// traverseOctreeFromBeginning, and traverseOctreeFromExisting\n\
|
|
10
10
|
// See Megatexture.glsl for the definition of accumulatePropertiesFromMegatexture\n\
|
|
@@ -16,8 +16,10 @@ export default "// See Intersection.glsl for the definition of intersectScene\n\
|
|
|
16
16
|
#define ALPHA_ACCUM_MAX 0.98 // Must be > 0.0 and <= 1.0\n\
|
|
17
17
|
#endif\n\
|
|
18
18
|
\n\
|
|
19
|
+
uniform mat4 u_transformPositionViewToLocal;\n\
|
|
19
20
|
uniform mat3 u_transformDirectionViewToLocal;\n\
|
|
20
|
-
uniform vec3
|
|
21
|
+
uniform vec3 u_cameraPositionLocal;\n\
|
|
22
|
+
uniform vec3 u_cameraDirectionLocal;\n\
|
|
21
23
|
uniform float u_stepSize;\n\
|
|
22
24
|
\n\
|
|
23
25
|
#if defined(PICKING)\n\
|
|
@@ -62,16 +64,15 @@ RayShapeIntersection getVoxelIntersection(in vec3 tileUv, in vec3 sampleSizeAlon
|
|
|
62
64
|
}\n\
|
|
63
65
|
\n\
|
|
64
66
|
vec4 getStepSize(in SampleData sampleData, in Ray viewRay, in RayShapeIntersection shapeIntersection, in mat3 jacobianT, in float currentT) {\n\
|
|
65
|
-
|
|
66
|
-
// But the ray is marched in a space where the shape fills [0, 1].\n\
|
|
67
|
-
// So we need to scale the Jacobian by 2.\n\
|
|
68
|
-
vec3 gradient = 2.0 * viewRay.rawDir * jacobianT;\n\
|
|
67
|
+
vec3 gradient = viewRay.dir * jacobianT;\n\
|
|
69
68
|
vec3 sampleSizeAlongRay = getSampleSize(sampleData.tileCoords.w) / gradient;\n\
|
|
70
69
|
\n\
|
|
71
70
|
RayShapeIntersection voxelIntersection = getVoxelIntersection(sampleData.tileUv, sampleSizeAlongRay);\n\
|
|
72
71
|
\n\
|
|
73
|
-
// Transform normal from shape space to Cartesian space\n\
|
|
74
|
-
vec3 voxelNormal =
|
|
72
|
+
// Transform normal from shape space to Cartesian space to eye space\n\
|
|
73
|
+
vec3 voxelNormal = jacobianT * voxelIntersection.entry.xyz;\n\
|
|
74
|
+
voxelNormal = normalize(czm_normal * voxelNormal);\n\
|
|
75
|
+
\n\
|
|
75
76
|
// Compare with the shape intersection, to choose the appropriate normal\n\
|
|
76
77
|
vec4 voxelEntry = vec4(voxelNormal, currentT + voxelIntersection.entry.w);\n\
|
|
77
78
|
vec4 entry = intersectionMax(shapeIntersection.entry, voxelEntry);\n\
|
|
@@ -112,26 +113,41 @@ int getSampleIndex(in SampleData sampleData) {\n\
|
|
|
112
113
|
return sampleIndex.x + u_inputDimensions.x * (sampleIndex.y + u_inputDimensions.y * sampleIndex.z);\n\
|
|
113
114
|
}\n\
|
|
114
115
|
\n\
|
|
116
|
+
/**\n\
|
|
117
|
+
* Compute the view ray at the current fragment, in the local coordinates of the shape.\n\
|
|
118
|
+
*/\n\
|
|
119
|
+
Ray getViewRayLocal() {\n\
|
|
120
|
+
vec4 eyeCoordinates = czm_windowToEyeCoordinates(gl_FragCoord);\n\
|
|
121
|
+
vec3 origin;\n\
|
|
122
|
+
vec3 direction;\n\
|
|
123
|
+
if (czm_orthographicIn3D == 1.0) {\n\
|
|
124
|
+
eyeCoordinates.z = 0.0;\n\
|
|
125
|
+
origin = (u_transformPositionViewToLocal * eyeCoordinates).xyz;\n\
|
|
126
|
+
direction = u_cameraDirectionLocal;\n\
|
|
127
|
+
} else {\n\
|
|
128
|
+
origin = u_cameraPositionLocal;\n\
|
|
129
|
+
direction = u_transformDirectionViewToLocal * normalize(eyeCoordinates.xyz);\n\
|
|
130
|
+
}\n\
|
|
131
|
+
return Ray(origin, direction);\n\
|
|
132
|
+
}\n\
|
|
133
|
+
\n\
|
|
134
|
+
Ray getViewRayEC() {\n\
|
|
135
|
+
vec4 eyeCoordinates = czm_windowToEyeCoordinates(gl_FragCoord);\n\
|
|
136
|
+
vec3 viewPosEC = (czm_orthographicIn3D == 1.0)\n\
|
|
137
|
+
? vec3(eyeCoordinates.xy, 0.0)\n\
|
|
138
|
+
: vec3(0.0);\n\
|
|
139
|
+
vec3 viewDirEC = normalize(eyeCoordinates.xyz);\n\
|
|
140
|
+
return Ray(viewPosEC, viewDirEC);\n\
|
|
141
|
+
}\n\
|
|
142
|
+
\n\
|
|
115
143
|
void main()\n\
|
|
116
144
|
{\n\
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
vec3 eyeDirection = normalize(czm_windowToEyeCoordinates(fragCoord).xyz);\n\
|
|
120
|
-
vec3 viewDirWorld = normalize(czm_inverseViewRotation * eyeDirection); // normalize again just in case\n\
|
|
121
|
-
vec3 viewDirUv = normalize(u_transformDirectionViewToLocal * eyeDirection); // normalize again just in case\n\
|
|
122
|
-
vec3 viewPosUv = u_cameraPositionUv;\n\
|
|
123
|
-
#if defined(SHAPE_ELLIPSOID)\n\
|
|
124
|
-
// viewDirUv has been scaled to a space where the ellipsoid is a sphere.\n\
|
|
125
|
-
// Undo this scaling to get the raw direction.\n\
|
|
126
|
-
vec3 rawDir = viewDirUv * u_ellipsoidRadiiUv;\n\
|
|
127
|
-
Ray viewRayUv = Ray(viewPosUv, viewDirUv, rawDir);\n\
|
|
128
|
-
#else\n\
|
|
129
|
-
Ray viewRayUv = Ray(viewPosUv, viewDirUv, viewDirUv);\n\
|
|
130
|
-
#endif\n\
|
|
145
|
+
Ray viewRayLocal = getViewRayLocal();\n\
|
|
146
|
+
Ray viewRayEC = getViewRayEC();\n\
|
|
131
147
|
\n\
|
|
132
148
|
Intersections ix;\n\
|
|
133
|
-
|
|
134
|
-
|
|
149
|
+
vec2 screenCoord = (gl_FragCoord.xy - czm_viewport.xy) / czm_viewport.zw; // [0,1]\n\
|
|
150
|
+
RayShapeIntersection shapeIntersection = intersectScene(screenCoord, viewRayLocal, viewRayEC, ix);\n\
|
|
135
151
|
// Exit early if the scene was completely missed.\n\
|
|
136
152
|
if (shapeIntersection.entry.w == NO_HIT) {\n\
|
|
137
153
|
discard;\n\
|
|
@@ -139,26 +155,24 @@ void main()\n\
|
|
|
139
155
|
\n\
|
|
140
156
|
float currentT = shapeIntersection.entry.w;\n\
|
|
141
157
|
float endT = shapeIntersection.exit.w;\n\
|
|
142
|
-
|
|
143
|
-
|
|
158
|
+
\n\
|
|
159
|
+
vec3 positionEC = viewRayEC.pos + currentT * viewRayEC.dir;\n\
|
|
160
|
+
TileAndUvCoordinate tileAndUv = getTileAndUvCoordinate(positionEC);\n\
|
|
161
|
+
vec3 positionLocal = viewRayLocal.pos + currentT * viewRayLocal.dir;\n\
|
|
162
|
+
mat3 jacobianT = convertLocalToShapeSpaceDerivative(positionLocal);\n\
|
|
144
163
|
\n\
|
|
145
164
|
// Traverse the tree from the start position\n\
|
|
146
165
|
TraversalData traversalData;\n\
|
|
147
166
|
SampleData sampleDatas[SAMPLE_COUNT];\n\
|
|
148
|
-
traverseOctreeFromBeginning(
|
|
149
|
-
vec4 step = getStepSize(sampleDatas[0],
|
|
150
|
-
\n\
|
|
151
|
-
#if defined(JITTER)\n\
|
|
152
|
-
float noise = hash(screenCoord); // [0,1]\n\
|
|
153
|
-
currentT += noise * step.w;\n\
|
|
154
|
-
positionUv += noise * step.w * viewDirUv;\n\
|
|
155
|
-
#endif\n\
|
|
167
|
+
traverseOctreeFromBeginning(tileAndUv, traversalData, sampleDatas);\n\
|
|
168
|
+
vec4 step = getStepSize(sampleDatas[0], viewRayLocal, shapeIntersection, jacobianT, currentT);\n\
|
|
156
169
|
\n\
|
|
157
170
|
FragmentInput fragmentInput;\n\
|
|
158
171
|
#if defined(STATISTICS)\n\
|
|
159
|
-
setStatistics(fragmentInput.
|
|
172
|
+
setStatistics(fragmentInput.metadataStatistics);\n\
|
|
160
173
|
#endif\n\
|
|
161
174
|
\n\
|
|
175
|
+
czm_modelMaterial materialOutput;\n\
|
|
162
176
|
vec4 colorAccum = vec4(0.0);\n\
|
|
163
177
|
\n\
|
|
164
178
|
for (int stepCount = 0; stepCount < STEP_COUNT_MAX; ++stepCount) {\n\
|
|
@@ -167,19 +181,20 @@ void main()\n\
|
|
|
167
181
|
\n\
|
|
168
182
|
// Prepare the custom shader inputs\n\
|
|
169
183
|
copyPropertiesToMetadata(properties, fragmentInput.metadata);\n\
|
|
170
|
-
|
|
171
|
-
fragmentInput.
|
|
172
|
-
|
|
173
|
-
fragmentInput.
|
|
174
|
-
|
|
175
|
-
fragmentInput.voxel.
|
|
184
|
+
\n\
|
|
185
|
+
fragmentInput.attributes.positionEC = positionEC;\n\
|
|
186
|
+
// Re-normalize normals: some shape intersections may have been scaled to encode positive/negative shapes\n\
|
|
187
|
+
fragmentInput.attributes.normalEC = normalize(step.xyz);\n\
|
|
188
|
+
\n\
|
|
189
|
+
fragmentInput.voxel.viewDirUv = viewRayLocal.dir;\n\
|
|
190
|
+
\n\
|
|
176
191
|
fragmentInput.voxel.travelDistance = step.w;\n\
|
|
177
192
|
fragmentInput.voxel.stepCount = stepCount;\n\
|
|
178
193
|
fragmentInput.voxel.tileIndex = sampleDatas[0].megatextureIndex;\n\
|
|
179
194
|
fragmentInput.voxel.sampleIndex = getSampleIndex(sampleDatas[0]);\n\
|
|
195
|
+
fragmentInput.voxel.distanceToDepthBuffer = ix.distanceToDepthBuffer - currentT;\n\
|
|
180
196
|
\n\
|
|
181
197
|
// Run the custom shader\n\
|
|
182
|
-
czm_modelMaterial materialOutput;\n\
|
|
183
198
|
fragmentMain(fragmentInput, materialOutput);\n\
|
|
184
199
|
\n\
|
|
185
200
|
// Sanitize the custom shader output\n\
|
|
@@ -199,13 +214,11 @@ void main()\n\
|
|
|
199
214
|
if (step.w == 0.0) {\n\
|
|
200
215
|
// Shape is infinitely thin. The ray may have hit the edge of a\n\
|
|
201
216
|
// foreground voxel. Step ahead slightly to check for more voxels\n\
|
|
202
|
-
step.w
|
|
217
|
+
step.w = 0.001;\n\
|
|
203
218
|
}\n\
|
|
204
219
|
\n\
|
|
205
220
|
// Keep raymarching\n\
|
|
206
221
|
currentT += step.w;\n\
|
|
207
|
-
positionUv = viewPosUv + currentT * viewDirUv;\n\
|
|
208
|
-
\n\
|
|
209
222
|
// Check if there's more intersections.\n\
|
|
210
223
|
if (currentT > endT) {\n\
|
|
211
224
|
#if (INTERSECTION_COUNT == 1)\n\
|
|
@@ -218,16 +231,18 @@ void main()\n\
|
|
|
218
231
|
// Found another intersection. Resume raymarching there\n\
|
|
219
232
|
currentT = shapeIntersection.entry.w;\n\
|
|
220
233
|
endT = shapeIntersection.exit.w;\n\
|
|
221
|
-
positionUv = viewPosUv + currentT * viewDirUv;\n\
|
|
222
234
|
}\n\
|
|
223
235
|
#endif\n\
|
|
224
236
|
}\n\
|
|
237
|
+
positionEC = viewRayEC.pos + currentT * viewRayEC.dir;\n\
|
|
238
|
+
tileAndUv = getTileAndUvCoordinate(positionEC);\n\
|
|
239
|
+
positionLocal = viewRayLocal.pos + currentT * viewRayLocal.dir;\n\
|
|
240
|
+
jacobianT = convertLocalToShapeSpaceDerivative(positionLocal);\n\
|
|
225
241
|
\n\
|
|
226
242
|
// Traverse the tree from the current ray position.\n\
|
|
227
243
|
// This is similar to traverseOctreeFromBeginning but is faster when the ray is in the same tile as the previous step.\n\
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
step = getStepSize(sampleDatas[0], viewRayUv, shapeIntersection, pointJacobian.jacobianT, currentT);\n\
|
|
244
|
+
traverseOctreeFromExisting(tileAndUv, traversalData, sampleDatas);\n\
|
|
245
|
+
step = getStepSize(sampleDatas[0], viewRayLocal, shapeIntersection, jacobianT, currentT);\n\
|
|
231
246
|
}\n\
|
|
232
247
|
\n\
|
|
233
248
|
// Convert the alpha from [0,ALPHA_ACCUM_MAX] to [0,1]\n\
|
|
@@ -2,22 +2,8 @@
|
|
|
2
2
|
export default "struct Ray {\n\
|
|
3
3
|
vec3 pos;\n\
|
|
4
4
|
vec3 dir;\n\
|
|
5
|
-
vec3 rawDir;\n\
|
|
6
5
|
};\n\
|
|
7
6
|
\n\
|
|
8
|
-
#if defined(JITTER)\n\
|
|
9
|
-
/**\n\
|
|
10
|
-
* Generate a pseudo-random value for a given 2D screen coordinate.\n\
|
|
11
|
-
* Similar to https://www.shadertoy.com/view/4djSRW with a modified hashscale.\n\
|
|
12
|
-
*/\n\
|
|
13
|
-
float hash(vec2 p)\n\
|
|
14
|
-
{\n\
|
|
15
|
-
vec3 p3 = fract(vec3(p.xyx) * 50.0);\n\
|
|
16
|
-
p3 += dot(p3, p3.yzx + 19.19);\n\
|
|
17
|
-
return fract((p3.x + p3.y) * p3.z);\n\
|
|
18
|
-
}\n\
|
|
19
|
-
#endif\n\
|
|
20
|
-
\n\
|
|
21
7
|
float minComponent(in vec3 v) {\n\
|
|
22
8
|
return min(min(v.x, v.y), v.z);\n\
|
|
23
9
|
}\n\
|
|
@@ -25,9 +11,4 @@ float minComponent(in vec3 v) {\n\
|
|
|
25
11
|
float maxComponent(in vec3 v) {\n\
|
|
26
12
|
return max(max(v.x, v.y), v.z);\n\
|
|
27
13
|
}\n\
|
|
28
|
-
\n\
|
|
29
|
-
struct PointJacobianT {\n\
|
|
30
|
-
vec3 point;\n\
|
|
31
|
-
mat3 jacobianT;\n\
|
|
32
|
-
};\n\
|
|
33
14
|
";
|