@pirireis/webglobeplugins 1.0.3 → 1.0.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/package.json +2 -2
- package/plugins/alarms/alarmFadeInFadeOutPlugin/AlarmTimeLineFadeInFadeOutPlugin.js +399 -0
- package/{Math → webglobeplugins/Math}/tessellation/triangle-tessellation.js +82 -4
- package/{heatwave → webglobeplugins/heatwave}/isobar.js +3 -0
- package/{programs → webglobeplugins/programs}/polygon-on-globe/texture-dem-triangles.js +17 -4
- package/webglobeplugins/programs/totems/attachments/adaptive-opacity.js +131 -0
- package/{programs/totems → webglobeplugins/programs/totems/attachments}/dem-textures-manager.js +11 -5
- package/{programs → webglobeplugins/programs}/vectorfields/logics/drawrectangleparticles.js +34 -28
- package/{programs → webglobeplugins/programs}/vectorfields/logics/particle-ubo.js +7 -4
- package/{programs → webglobeplugins/programs}/vectorfields/logics/pixelbased.js +3 -7
- package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/data/cache.js +10 -8
- package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/data/master-worker.js +104 -40
- package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/polygon-to-triangles.js +76 -0
- package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/data/worker-contact.js +3 -2
- package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +162 -0
- package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/terrain-polygon.js +66 -3
- package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/test-records.js +14 -0
- package/{semiplugins → webglobeplugins/semiplugins}/shell/bbox-renderer/object.js +5 -2
- package/{tracks → webglobeplugins/tracks}/timetracks/program-line-strip.js +2 -0
- package/{util → webglobeplugins/util}/gl-util/buffer/attribute-loader.js +18 -6
- package/{util → webglobeplugins/util}/gl-util/uniform-block/manager.js +13 -4
- package/{vectorfield → webglobeplugins/vectorfield}/waveparticles/plugin.js +77 -37
- package/{vectorfield → webglobeplugins/vectorfield}/wind/adapters/image-to-fields.js +46 -15
- package/{vectorfield → webglobeplugins/vectorfield}/wind/plugin-persistant.js +32 -17
- package/{vectorfield → webglobeplugins/vectorfield}/wind/plugin.js +4 -4
- package/semiplugins/shape-on-terrain/terrain-polygon/data/polygon-to-triangles.js +0 -100
- package/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +0 -125
- package/vectorfield/wind/plugin-persistant copy.js +0 -364
- package/{Math → webglobeplugins/Math}/angle-calculation.js +0 -0
- package/{Math → webglobeplugins/Math}/arc-cdf-points.js +0 -0
- package/{Math → webglobeplugins/Math}/arc-generate-points-exponantial.js +0 -0
- package/{Math → webglobeplugins/Math}/arc.js +0 -0
- package/{Math → webglobeplugins/Math}/bounds/line-bbox.js +0 -0
- package/{Math → webglobeplugins/Math}/circle-cdf-points.js +0 -0
- package/{Math → webglobeplugins/Math}/circle.js +0 -0
- package/{Math → webglobeplugins/Math}/constants.js +0 -0
- package/{Math → webglobeplugins/Math}/contour/quadtreecontours.js +0 -0
- package/{Math → webglobeplugins/Math}/contour/quadtreecontours1.js +0 -0
- package/{Math → webglobeplugins/Math}/finite-line-2d.js +0 -0
- package/{Math → webglobeplugins/Math}/haversine.js +0 -0
- package/{Math → webglobeplugins/Math}/index.js +0 -0
- package/{Math → webglobeplugins/Math}/juction/arc-plane.js +0 -0
- package/{Math → webglobeplugins/Math}/juction/line-sphere.js +0 -0
- package/{Math → webglobeplugins/Math}/juction/plane-plane.js +0 -0
- package/{Math → webglobeplugins/Math}/line.js +0 -0
- package/{Math → webglobeplugins/Math}/matrix4.js +0 -0
- package/{Math → webglobeplugins/Math}/methods.js +0 -0
- package/{Math → webglobeplugins/Math}/plane.js +0 -0
- package/{Math → webglobeplugins/Math}/quaternion.js +0 -0
- package/{Math → webglobeplugins/Math}/templete-shapes/grid-visually-equal.js +0 -0
- package/{Math → webglobeplugins/Math}/tessellation/constants.js +0 -0
- package/{Math → webglobeplugins/Math}/tessellation/methods.js +0 -0
- package/{Math → webglobeplugins/Math}/tessellation/nearest-value-padding.js +0 -0
- package/{Math → webglobeplugins/Math}/tessellation/spherical-triangle-area.js +0 -0
- package/{Math → webglobeplugins/Math}/tessellation/tile-merger.js +0 -0
- package/{Math → webglobeplugins/Math}/tessellation/types.js +0 -0
- package/{Math → webglobeplugins/Math}/types.js +0 -0
- package/{Math → webglobeplugins/Math}/utils.js +0 -0
- package/{Math → webglobeplugins/Math}/vec3.js +0 -0
- package/{Math → webglobeplugins/Math}/xyz-tile.js +0 -0
- package/{algorithms → webglobeplugins/algorithms}/search-binary.js +0 -0
- package/{altitude-locator → webglobeplugins/altitude-locator}/adaptors.js +0 -0
- package/{altitude-locator → webglobeplugins/altitude-locator}/keymethod.js +0 -0
- package/{altitude-locator → webglobeplugins/altitude-locator}/plugin.js +0 -0
- package/{altitude-locator → webglobeplugins/altitude-locator}/types.js +0 -0
- package/{compass-rose → webglobeplugins/compass-rose}/compass-rose-padding-flat.js +0 -0
- package/{compass-rose → webglobeplugins/compass-rose}/compass-text-writer.js +0 -0
- package/{compass-rose → webglobeplugins/compass-rose}/index.js +0 -0
- package/{constants.js → webglobeplugins/constants.js} +0 -0
- package/{heatwave → webglobeplugins/heatwave}/datamanager.js +0 -0
- package/{heatwave → webglobeplugins/heatwave}/heatwave.js +0 -0
- package/{heatwave → webglobeplugins/heatwave}/index.js +0 -0
- package/{heatwave → webglobeplugins/heatwave}/texture-point-sampler.js +0 -0
- package/{investigation-tools → webglobeplugins/investigation-tools}/draw/tiles/adapters.js +0 -0
- package/{investigation-tools → webglobeplugins/investigation-tools}/draw/tiles/tiles.js +0 -0
- package/{jest.config.js → webglobeplugins/jest.config.js} +0 -0
- package/{pin → webglobeplugins/pin}/pin-object-array1.js +0 -0
- package/{pin → webglobeplugins/pin}/pin-point-totem1.js +0 -0
- package/{programs → webglobeplugins/programs}/arrowfield/arrow-field.js +0 -0
- package/{programs → webglobeplugins/programs}/arrowfield/logic.js +0 -0
- package/{programs → webglobeplugins/programs}/data2legend/density-to-legend.js +0 -0
- package/{programs → webglobeplugins/programs}/data2legend/point-to-density-texture.js +0 -0
- package/{programs → webglobeplugins/programs}/float2legendwithratio/index.js +0 -0
- package/{programs → webglobeplugins/programs}/float2legendwithratio/logic.js +0 -0
- package/{programs → webglobeplugins/programs}/float2legendwithratio/object.js +0 -0
- package/{programs → webglobeplugins/programs}/helpers/blender.js +0 -0
- package/{programs → webglobeplugins/programs}/helpers/fadeaway.js +0 -0
- package/{programs → webglobeplugins/programs}/index.js +0 -0
- package/{programs → webglobeplugins/programs}/line-on-globe/circle-accurate-3d.js +0 -0
- package/{programs → webglobeplugins/programs}/line-on-globe/circle-accurate-flat.js +0 -0
- package/{programs → webglobeplugins/programs}/line-on-globe/degree-padding-around-circle-3d.js +0 -0
- package/{programs → webglobeplugins/programs}/line-on-globe/index.js +0 -0
- package/{programs → webglobeplugins/programs}/line-on-globe/lines-color-instanced-flat.js +0 -0
- package/{programs → webglobeplugins/programs}/line-on-globe/linestrip/data.js +0 -0
- package/{programs → webglobeplugins/programs}/line-on-globe/linestrip/linestrip.js +0 -0
- package/{programs → webglobeplugins/programs}/line-on-globe/naive-accurate-flexible.js +0 -0
- package/{programs → webglobeplugins/programs}/line-on-globe/util.js +0 -0
- package/{programs → webglobeplugins/programs}/picking/pickable-polygon-renderer.js +0 -0
- package/{programs → webglobeplugins/programs}/picking/pickable-renderer.js +0 -0
- package/{programs → webglobeplugins/programs}/point-on-globe/element-globe-surface-glow.js +0 -0
- package/{programs → webglobeplugins/programs}/point-on-globe/element-point-glow.js +0 -0
- package/{programs → webglobeplugins/programs}/point-on-globe/square-pixel-point.js +0 -0
- package/{programs → webglobeplugins/programs}/programcache.js +0 -0
- package/{programs → webglobeplugins/programs}/rings/index.js +0 -0
- package/{programs → webglobeplugins/programs}/rings/partial-ring/piece-of-pie.js +0 -0
- package/{programs → webglobeplugins/programs}/totems/camera-totem-attactment-interface.js +0 -0
- package/{programs → webglobeplugins/programs}/totems/camerauniformblock.js +0 -0
- package/{programs → webglobeplugins/programs}/totems/canvas-webglobe-info.js +0 -0
- package/{programs → webglobeplugins/programs}/totems/globe-changes.js +0 -0
- package/{programs → webglobeplugins/programs}/totems/gpu-selection-uniform-block.js +0 -0
- package/{programs → webglobeplugins/programs}/totems/index.js +0 -0
- package/{programs → webglobeplugins/programs}/two-d/pixel-padding-for-compass.js +0 -0
- package/{programs → webglobeplugins/programs}/util.js +0 -0
- package/{programs → webglobeplugins/programs}/vectorfields/logics/constants.js +0 -0
- package/{programs → webglobeplugins/programs}/vectorfields/logics/index.js +0 -0
- package/{programs → webglobeplugins/programs}/vectorfields/logics/ubo.js +0 -0
- package/{programs → webglobeplugins/programs}/vectorfields/pingpongbuffermanager.js +0 -0
- package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/bearing-line/adapters.js +0 -0
- package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/bearing-line/plugin.js +1 -1
- /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/bearing-line/types.js +0 -0
- /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/circle-line-chain/adapters.js +0 -0
- /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/circle-line-chain/chain-list-map.js +0 -0
- /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/circle-line-chain/plugin.js +0 -0
- /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/circle-line-chain/types.js +0 -0
- /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/range-ring/adapters.js +0 -0
- /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/range-ring/enum.js +0 -0
- /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/range-ring/plugin.js +0 -0
- /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/range-ring/rangeringangletext.js +0 -0
- /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/range-ring/types.js +0 -0
- /package/{semiplugins → webglobeplugins/semiplugins}/interface.js +0 -0
- /package/{semiplugins → webglobeplugins/semiplugins}/lightweight/line-plugin.js +0 -0
- /package/{semiplugins → webglobeplugins/semiplugins}/lightweight/piece-of-pie-plugin.js +0 -0
- /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/arc-plugin.js +0 -0
- /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/circle-plugin.js +0 -0
- /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/padding-1-degree.js +0 -0
- /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/adapters.js +0 -0
- /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/data/index-polygon-map.js +0 -0
- /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/data/manager.js +0 -0
- /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/data/random.js +0 -0
- /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/data/types.js +0 -0
- /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/types.js +0 -0
- /package/{semiplugins → webglobeplugins/semiplugins}/shell/bbox-renderer/index.js +0 -0
- /package/{semiplugins → webglobeplugins/semiplugins}/shell/bbox-renderer/logic.js +0 -0
- /package/{semiplugins → webglobeplugins/semiplugins}/type.js +0 -0
- /package/{semiplugins → webglobeplugins/semiplugins}/utility/container-plugin.js +0 -0
- /package/{semiplugins → webglobeplugins/semiplugins}/utility/object-pass-container-plugin.js +0 -0
- /package/{shaders → webglobeplugins/shaders}/fragment-toy/firework.js +0 -0
- /package/{shaders → webglobeplugins/shaders}/fragment-toy/singularity.js +0 -0
- /package/{tracks → webglobeplugins/tracks}/point-heat-map/adaptors/timetracksplugin-format-to-this.js +0 -0
- /package/{tracks → webglobeplugins/tracks}/point-heat-map/index.js +0 -0
- /package/{tracks → webglobeplugins/tracks}/point-heat-map/plugin-webworker.js +0 -0
- /package/{tracks → webglobeplugins/tracks}/point-heat-map/point-to-heat-map-flow.js +0 -0
- /package/{tracks → webglobeplugins/tracks}/point-tracks/key-methods.js +0 -0
- /package/{tracks → webglobeplugins/tracks}/point-tracks/plugin.js +0 -0
- /package/{tracks → webglobeplugins/tracks}/timetracks/adaptors-line-strip.js +0 -0
- /package/{tracks → webglobeplugins/tracks}/timetracks/plugin-line-strip.js +0 -0
- /package/{tracks → webglobeplugins/tracks}/timetracks/programpoint-line-strip.js +0 -0
- /package/{types.js → webglobeplugins/types.js} +0 -0
- /package/{util → webglobeplugins/util}/account/bufferoffsetmanager.js +0 -0
- /package/{util → webglobeplugins/util}/account/create-buffermap-orchastration.js +0 -0
- /package/{util → webglobeplugins/util}/account/index.js +0 -0
- /package/{util → webglobeplugins/util}/account/single-attribute-buffer-management/buffer-manager.js +0 -0
- /package/{util → webglobeplugins/util}/account/single-attribute-buffer-management/buffer-orchestrator.js +0 -0
- /package/{util → webglobeplugins/util}/account/single-attribute-buffer-management/buffer-orchestrator1.js +0 -0
- /package/{util → webglobeplugins/util}/account/single-attribute-buffer-management/index.js +0 -0
- /package/{util → webglobeplugins/util}/account/single-attribute-buffer-management/object-store.js +0 -0
- /package/{util → webglobeplugins/util}/account/single-attribute-buffer-management/types.js +0 -0
- /package/{util → webglobeplugins/util}/account/util.js +0 -0
- /package/{util → webglobeplugins/util}/algorithms/index.js +0 -0
- /package/{util → webglobeplugins/util}/algorithms/search-binary.js +0 -0
- /package/{util → webglobeplugins/util}/build-strategy/static-dynamic.js +0 -0
- /package/{util → webglobeplugins/util}/check/index.js +0 -0
- /package/{util → webglobeplugins/util}/check/typecheck.js +0 -0
- /package/{util → webglobeplugins/util}/frame-counter-trigger.js +0 -0
- /package/{util → webglobeplugins/util}/geometry/index.js +0 -0
- /package/{util → webglobeplugins/util}/gl-util/buffer/index.js +0 -0
- /package/{util → webglobeplugins/util}/gl-util/draw-options/methods.js +0 -0
- /package/{util → webglobeplugins/util}/globe-default-gl-states.js +0 -0
- /package/{util → webglobeplugins/util}/helper-methods.js +0 -0
- /package/{util → webglobeplugins/util}/index.js +0 -0
- /package/{util → webglobeplugins/util}/interpolation/index.js +0 -0
- /package/{util → webglobeplugins/util}/interpolation/timetrack/index.js +0 -0
- /package/{util → webglobeplugins/util}/interpolation/timetrack/timetrack-interpolator.js +0 -0
- /package/{util → webglobeplugins/util}/interpolation/timetrack/web-worker.js +0 -0
- /package/{util → webglobeplugins/util}/picking/fence.js +0 -0
- /package/{util → webglobeplugins/util}/picking/picker-displayer.js +0 -0
- /package/{util → webglobeplugins/util}/programs/draw-from-pixel-coords.js +0 -0
- /package/{util → webglobeplugins/util}/programs/draw-texture-on-canvas.js +0 -0
- /package/{util → webglobeplugins/util}/programs/supersampletotextures.js +0 -0
- /package/{util/programs/texturetoglobe.js → webglobeplugins/util/programs/texturetoglobe_delete.js} +0 -0
- /package/{util → webglobeplugins/util}/shaderfunctions/geometrytransformations.js +0 -0
- /package/{util → webglobeplugins/util}/shaderfunctions/index.js +0 -0
- /package/{util → webglobeplugins/util}/shaderfunctions/nodata.js +0 -0
- /package/{util → webglobeplugins/util}/shaderfunctions/noisefunctions.js +0 -0
- /package/{util → webglobeplugins/util}/webglobjectbuilders.js +0 -0
- /package/{vectorfield → webglobeplugins/vectorfield}/arrowfield/adaptor.js +0 -0
- /package/{vectorfield → webglobeplugins/vectorfield}/arrowfield/index.js +0 -0
- /package/{vectorfield → webglobeplugins/vectorfield}/arrowfield/plugin.js +0 -0
- /package/{vectorfield → webglobeplugins/vectorfield}/waveparticles/adaptor.js +0 -0
- /package/{vectorfield → webglobeplugins/vectorfield}/waveparticles/index.js +0 -0
- /package/{vectorfield → webglobeplugins/vectorfield}/wind/adapters/types.js +0 -0
- /package/{vectorfield → webglobeplugins/vectorfield}/wind/imagetovectorfieldandmagnitude.js +0 -0
- /package/{vectorfield → webglobeplugins/vectorfield}/wind/index.js +0 -0
- /package/{vectorfield → webglobeplugins/vectorfield}/wind/vectorfieldimage.js +0 -0
- /package/{write-text → webglobeplugins/write-text}/context-text-bulk.js +0 -0
- /package/{write-text → webglobeplugins/write-text}/context-text3.js +0 -0
- /package/{write-text → webglobeplugins/write-text}/context-text4.js +0 -0
- /package/{write-text → webglobeplugins/write-text}/context-textDELETE.js +0 -0
- /package/{write-text → webglobeplugins/write-text}/objectarraylabels/index.js +0 -0
- /package/{write-text → webglobeplugins/write-text}/objectarraylabels/objectarraylabels.js +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pirireis/webglobeplugins",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"author": "Toprak Nihat Deniz Ozturk",
|
|
6
6
|
"license": "MIT",
|
|
@@ -13,6 +13,6 @@
|
|
|
13
13
|
"rbush": "^4.0.1"
|
|
14
14
|
},
|
|
15
15
|
"peerDependencies": {
|
|
16
|
-
"@pirireis/webglobe": "
|
|
16
|
+
"@pirireis/webglobe": "6.2.51^"
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parametreler
|
|
3
|
+
* Toplam Animasyon suresi
|
|
4
|
+
* nokta konumu lat long
|
|
5
|
+
* nokta boyutu
|
|
6
|
+
* nokta rengi
|
|
7
|
+
* buyume kusulme olamlimi? Varsa fade in ile buyuyup, fade out ile kuculecek.
|
|
8
|
+
* fade in suresi
|
|
9
|
+
* fade out suresi
|
|
10
|
+
* */
|
|
11
|
+
/**
|
|
12
|
+
* TODO:
|
|
13
|
+
* AFAD verisini hizli yuklenmesi icin bir formata ceviren kod ekle
|
|
14
|
+
* CONTENT basligi altina veri cevirici ve webgl programini yaz
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* @typedef {Number[]} Color [r, g, b]
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* @typedef {Object} FadeAlarmPoint
|
|
21
|
+
* @property {number} long
|
|
22
|
+
* @property {number} lat
|
|
23
|
+
* @property {number} height
|
|
24
|
+
* @property {number} minSize
|
|
25
|
+
* @property {number} maxSize
|
|
26
|
+
* @property {Color} color
|
|
27
|
+
* @property {number} startTime
|
|
28
|
+
* @property {number} fadeInTime
|
|
29
|
+
* @property {number} fadeOutTime
|
|
30
|
+
* @property {number} minAlpha
|
|
31
|
+
* @property {number} maxAlpha
|
|
32
|
+
*/
|
|
33
|
+
const floatCount = 13;
|
|
34
|
+
const TIME_STEP = 26;
|
|
35
|
+
export default class AlarmTimeLineFadeInFadeOut {
|
|
36
|
+
constructor(id) {
|
|
37
|
+
this.id = id;
|
|
38
|
+
this.pause();
|
|
39
|
+
this.globe = null;
|
|
40
|
+
this.gl = null;
|
|
41
|
+
this._buildLOD = 6;
|
|
42
|
+
this._lastLOD = 0;
|
|
43
|
+
this._shaderProgram = null;
|
|
44
|
+
this._animationDeltaTime = 0;
|
|
45
|
+
this._animationFullTimeLength = 50000.0;
|
|
46
|
+
this._continue = false;
|
|
47
|
+
this._speedMultiplier = 1.0;
|
|
48
|
+
// time relevant
|
|
49
|
+
this._tickTimerId = null;
|
|
50
|
+
// @type {FadeAlarmPoint[]}
|
|
51
|
+
this._dataArray = [];
|
|
52
|
+
this._translateFloat32Array = new Float32Array(3);
|
|
53
|
+
this._mixtureBuffer = null;
|
|
54
|
+
this._buildTimerId = null;
|
|
55
|
+
this._projectionFunction = null;
|
|
56
|
+
}
|
|
57
|
+
_vertexShaderSource = `
|
|
58
|
+
precision highp float;
|
|
59
|
+
|
|
60
|
+
attribute vec3 aVertexPosition;
|
|
61
|
+
attribute vec3 aVertexColor;
|
|
62
|
+
attribute float aMinSize;
|
|
63
|
+
attribute float aMaxSize;
|
|
64
|
+
attribute float aStartTime;
|
|
65
|
+
attribute float aFadeInTime;
|
|
66
|
+
attribute float aFadeOutTime;
|
|
67
|
+
attribute float aMinAlpha;
|
|
68
|
+
attribute float aMaxAlpha;
|
|
69
|
+
|
|
70
|
+
uniform bool u_is_flat;
|
|
71
|
+
uniform vec2 u_mapWH;
|
|
72
|
+
uniform vec2 u_scrWH;
|
|
73
|
+
|
|
74
|
+
varying vec3 vColor;
|
|
75
|
+
varying float vAlpha;
|
|
76
|
+
|
|
77
|
+
uniform float uDeltaTime;
|
|
78
|
+
|
|
79
|
+
uniform mat4 uModelViewMatrix;
|
|
80
|
+
uniform mat4 uProjectionMatrix;
|
|
81
|
+
uniform vec3 uTranslate;
|
|
82
|
+
|
|
83
|
+
void main(void) {
|
|
84
|
+
float time = uDeltaTime - aStartTime;
|
|
85
|
+
|
|
86
|
+
// exit case
|
|
87
|
+
if (time < 0.0 || (time > (aFadeInTime + aFadeOutTime)) ) {
|
|
88
|
+
gl_Position = vec4(-2.0, -2.0, 0.0, 1.0);
|
|
89
|
+
vColor = vec3(0.0, 0.0, 0.0);
|
|
90
|
+
vAlpha = 0.0;
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
float ratio;
|
|
94
|
+
// fade in case
|
|
95
|
+
if (time < aFadeInTime) {
|
|
96
|
+
ratio = time / aFadeInTime;
|
|
97
|
+
}
|
|
98
|
+
// fade out case
|
|
99
|
+
if (time > aFadeInTime) {
|
|
100
|
+
ratio = 1.0 - ((time - aFadeInTime) / aFadeOutTime);
|
|
101
|
+
}
|
|
102
|
+
if(u_is_flat==true){
|
|
103
|
+
float normalizedX = ( aVertexPosition.x - uTranslate.x) / u_mapWH.x;
|
|
104
|
+
float normalizedY = ( aVertexPosition.y - uTranslate.y) / u_mapWH.y;
|
|
105
|
+
gl_Position = uProjectionMatrix * vec4(normalizedX * u_scrWH.x, (1.0 - normalizedY) * u_scrWH.y, 0.0, 1.0);
|
|
106
|
+
}else{
|
|
107
|
+
gl_Position = uProjectionMatrix * uModelViewMatrix * vec4(aVertexPosition - uTranslate, 1.0);
|
|
108
|
+
}
|
|
109
|
+
gl_PointSize = mix(aMinSize, aMaxSize, ratio);
|
|
110
|
+
|
|
111
|
+
vColor = aVertexColor;
|
|
112
|
+
vAlpha = mix(aMinAlpha, aMaxAlpha, ratio);
|
|
113
|
+
}
|
|
114
|
+
`;
|
|
115
|
+
_fragmentShaderSource = `
|
|
116
|
+
precision highp float;
|
|
117
|
+
|
|
118
|
+
varying vec3 vColor;
|
|
119
|
+
varying float vAlpha;
|
|
120
|
+
|
|
121
|
+
void main(void) {
|
|
122
|
+
// circle
|
|
123
|
+
vec2 cxy = 2.0 * gl_PointCoord - 1.0;
|
|
124
|
+
float r = dot(cxy, cxy);
|
|
125
|
+
if (r > 1.0) discard;
|
|
126
|
+
// square
|
|
127
|
+
// float t = abs(cxy.x) * abs(cxy.y);
|
|
128
|
+
// if (t > 0.1) discard;
|
|
129
|
+
if (vAlpha == 0.0) { discard;}
|
|
130
|
+
float alphaRatio = sqrt(1.0 - r) ;
|
|
131
|
+
gl_FragColor = vec4(vColor, vAlpha ) * alphaRatio;
|
|
132
|
+
}
|
|
133
|
+
`;
|
|
134
|
+
_createProgram() {
|
|
135
|
+
const { gl, _vertexShaderSource, _fragmentShaderSource } = this;
|
|
136
|
+
let vertexShader = gl.createShader(gl.VERTEX_SHADER);
|
|
137
|
+
gl.shaderSource(vertexShader, _vertexShaderSource);
|
|
138
|
+
gl.compileShader(vertexShader);
|
|
139
|
+
if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {
|
|
140
|
+
alert("An error occurred compiling the vertex shader: " + gl.getShaderInfoLog(vertexShader));
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
let fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
|
|
144
|
+
gl.shaderSource(fragmentShader, _fragmentShaderSource);
|
|
145
|
+
gl.compileShader(fragmentShader);
|
|
146
|
+
if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {
|
|
147
|
+
alert("An error occurred compiling the fragment shader: " + gl.getShaderInfoLog(fragmentShader));
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
this._shaderProgram = gl.createProgram();
|
|
151
|
+
gl.attachShader(this._shaderProgram, vertexShader);
|
|
152
|
+
gl.attachShader(this._shaderProgram, fragmentShader);
|
|
153
|
+
gl.linkProgram(this._shaderProgram);
|
|
154
|
+
if (!gl.getProgramParameter(this._shaderProgram, gl.LINK_STATUS)) {
|
|
155
|
+
alert("Could not initialise shaders");
|
|
156
|
+
console.log(gl.getProgramInfoLog(this._shaderProgram));
|
|
157
|
+
}
|
|
158
|
+
gl.detachShader(this._shaderProgram, vertexShader);
|
|
159
|
+
gl.detachShader(this._shaderProgram, fragmentShader);
|
|
160
|
+
gl.deleteShader(vertexShader);
|
|
161
|
+
gl.deleteShader(fragmentShader);
|
|
162
|
+
}
|
|
163
|
+
_assignProgramLocations() {
|
|
164
|
+
const { gl, _shaderProgram } = this;
|
|
165
|
+
this._aVertexPosition = gl.getAttribLocation(_shaderProgram, "aVertexPosition");
|
|
166
|
+
this._aVertexColor = gl.getAttribLocation(_shaderProgram, "aVertexColor");
|
|
167
|
+
this._aMinSize = gl.getAttribLocation(_shaderProgram, "aMinSize");
|
|
168
|
+
this._aMaxSize = gl.getAttribLocation(_shaderProgram, "aMaxSize");
|
|
169
|
+
this._aStartTime = gl.getAttribLocation(_shaderProgram, "aStartTime");
|
|
170
|
+
this._aFadeInTime = gl.getAttribLocation(_shaderProgram, "aFadeInTime");
|
|
171
|
+
this._aFadeOutTime = gl.getAttribLocation(_shaderProgram, "aFadeOutTime");
|
|
172
|
+
this._aMinAlpha = gl.getAttribLocation(_shaderProgram, "aMinAlpha");
|
|
173
|
+
this._aMaxAlpha = gl.getAttribLocation(_shaderProgram, "aMaxAlpha");
|
|
174
|
+
this._uDeltaTime = gl.getUniformLocation(_shaderProgram, "uDeltaTime");
|
|
175
|
+
this._uModelViewMatrix = gl.getUniformLocation(_shaderProgram, "uModelViewMatrix");
|
|
176
|
+
this._uProjectionMatrix = gl.getUniformLocation(_shaderProgram, "uProjectionMatrix");
|
|
177
|
+
this._uTranslate = gl.getUniformLocation(_shaderProgram, "uTranslate");
|
|
178
|
+
this._uMapWH = gl.getUniformLocation(_shaderProgram, "u_mapWH");
|
|
179
|
+
this._uScrWH = gl.getUniformLocation(_shaderProgram, "u_scrWH");
|
|
180
|
+
this._uIsFlat = gl.getUniformLocation(_shaderProgram, "u_is_flat");
|
|
181
|
+
}
|
|
182
|
+
// registry takes place here
|
|
183
|
+
init(globe, gl) {
|
|
184
|
+
console.log("init AlarmFadeInFadeOut");
|
|
185
|
+
this.globe = globe;
|
|
186
|
+
this.gl = gl;
|
|
187
|
+
this._mixtureBuffer = gl.createBuffer();
|
|
188
|
+
this.setGeometry();
|
|
189
|
+
this._createProgram();
|
|
190
|
+
this._assignProgramLocations();
|
|
191
|
+
this._startTickTimer();
|
|
192
|
+
this._resizeHandler = this._resizeEventHandler.bind(this);
|
|
193
|
+
window.addEventListener('resize', this._resizeHandler, true);
|
|
194
|
+
}
|
|
195
|
+
_resizeEventHandler() {
|
|
196
|
+
this._loadUniforms();
|
|
197
|
+
}
|
|
198
|
+
addPoint(long, lat, height, minSize, maxSize, color, startTime, fadeInTime, fadeOutTime, minAlpha, maxAlpha) {
|
|
199
|
+
// add point to the array
|
|
200
|
+
this._dataArray.push({
|
|
201
|
+
long,
|
|
202
|
+
lat,
|
|
203
|
+
height,
|
|
204
|
+
minSize,
|
|
205
|
+
maxSize,
|
|
206
|
+
color,
|
|
207
|
+
startTime,
|
|
208
|
+
fadeInTime,
|
|
209
|
+
fadeOutTime,
|
|
210
|
+
minAlpha,
|
|
211
|
+
maxAlpha
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
setAnimationFullTimeLength(time) {
|
|
215
|
+
this._animationFullTimeLength = time;
|
|
216
|
+
}
|
|
217
|
+
updateBuffer() {
|
|
218
|
+
if (this._dataArray.length === 0)
|
|
219
|
+
return;
|
|
220
|
+
this._build();
|
|
221
|
+
}
|
|
222
|
+
clearPoints() {
|
|
223
|
+
this._dataArray = [];
|
|
224
|
+
this._build();
|
|
225
|
+
}
|
|
226
|
+
setCurrentTimeByPercentage(percentage) {
|
|
227
|
+
const passingTime = this._animationFullTimeLength * (percentage % 100) / 100;
|
|
228
|
+
this._animationDeltaTime = passingTime;
|
|
229
|
+
}
|
|
230
|
+
setSpeedMultiplier(multiplier) {
|
|
231
|
+
this._speedMultiplier = multiplier;
|
|
232
|
+
}
|
|
233
|
+
continue() {
|
|
234
|
+
if (this._animationFullTimeLength == null)
|
|
235
|
+
throw new Error("Animation full time length is not set");
|
|
236
|
+
this._continue = true;
|
|
237
|
+
if (this._tickTimerId == null) {
|
|
238
|
+
this._startTickTimer();
|
|
239
|
+
}
|
|
240
|
+
console.log("continue");
|
|
241
|
+
}
|
|
242
|
+
isContinuing() {
|
|
243
|
+
return this._continue;
|
|
244
|
+
}
|
|
245
|
+
pause() {
|
|
246
|
+
this._continue = false;
|
|
247
|
+
if (this._tickTimerId != null) {
|
|
248
|
+
clearInterval(this._tickTimerId);
|
|
249
|
+
this._tickTimerId = null;
|
|
250
|
+
}
|
|
251
|
+
console.log("pause");
|
|
252
|
+
}
|
|
253
|
+
_tick() {
|
|
254
|
+
this._animationDeltaTime = (this._animationDeltaTime + TIME_STEP * this._speedMultiplier) % this._animationFullTimeLength;
|
|
255
|
+
}
|
|
256
|
+
_startTickTimer() {
|
|
257
|
+
this._tickTimerId = setInterval(() => {
|
|
258
|
+
if (this._continue)
|
|
259
|
+
this._tick();
|
|
260
|
+
}, TIME_STEP);
|
|
261
|
+
}
|
|
262
|
+
getPercentage() {
|
|
263
|
+
return this._animationDeltaTime / this._animationFullTimeLength;
|
|
264
|
+
}
|
|
265
|
+
// globe calls this function
|
|
266
|
+
draw3D(projMatrix, modelMatrix, transPos) {
|
|
267
|
+
// if (this._continue) this._tick();
|
|
268
|
+
this._draw(projMatrix, modelMatrix, transPos);
|
|
269
|
+
}
|
|
270
|
+
_draw(projMatrix, modelMatrix, transPos) {
|
|
271
|
+
if (this._dataArray.length === 0)
|
|
272
|
+
return;
|
|
273
|
+
const { gl, globe } = this;
|
|
274
|
+
if (globe == null) {
|
|
275
|
+
console.log("globe is null");
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
const lastDepth = gl.getParameter(gl.DEPTH_TEST);
|
|
279
|
+
gl.disable(gl.DEPTH_TEST);
|
|
280
|
+
gl.enable(gl.BLEND);
|
|
281
|
+
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
|
|
282
|
+
this._translateFloat32Array.set([transPos.x, transPos.y, transPos.z], 0);
|
|
283
|
+
gl.useProgram(this._shaderProgram);
|
|
284
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this._mixtureBuffer);
|
|
285
|
+
gl.enableVertexAttribArray(this._aVertexPosition); // devamli enable edilmesine gerek olmayabilir mi?
|
|
286
|
+
gl.vertexAttribPointer(this._aVertexPosition, 3, gl.FLOAT, false, floatCount * 4, 0);
|
|
287
|
+
gl.enableVertexAttribArray(this._aVertexColor);
|
|
288
|
+
gl.vertexAttribPointer(this._aVertexColor, 3, gl.FLOAT, false, floatCount * 4, 3 * 4);
|
|
289
|
+
gl.enableVertexAttribArray(this._aMinSize);
|
|
290
|
+
gl.vertexAttribPointer(this._aMinSize, 1, gl.FLOAT, false, floatCount * 4, 6 * 4);
|
|
291
|
+
gl.enableVertexAttribArray(this._aMaxSize);
|
|
292
|
+
gl.vertexAttribPointer(this._aMaxSize, 1, gl.FLOAT, false, floatCount * 4, 7 * 4);
|
|
293
|
+
gl.enableVertexAttribArray(this._aStartTime);
|
|
294
|
+
gl.vertexAttribPointer(this._aStartTime, 1, gl.FLOAT, false, floatCount * 4, 8 * 4);
|
|
295
|
+
gl.enableVertexAttribArray(this._aFadeInTime);
|
|
296
|
+
gl.vertexAttribPointer(this._aFadeInTime, 1, gl.FLOAT, false, floatCount * 4, 9 * 4);
|
|
297
|
+
gl.enableVertexAttribArray(this._aFadeOutTime);
|
|
298
|
+
gl.vertexAttribPointer(this._aFadeOutTime, 1, gl.FLOAT, false, floatCount * 4, 10 * 4);
|
|
299
|
+
gl.enableVertexAttribArray(this._aMinAlpha);
|
|
300
|
+
gl.vertexAttribPointer(this._aMinAlpha, 1, gl.FLOAT, false, floatCount * 4, 11 * 4);
|
|
301
|
+
gl.enableVertexAttribArray(this._aMaxAlpha);
|
|
302
|
+
gl.vertexAttribPointer(this._aMaxAlpha, 1, gl.FLOAT, false, floatCount * 4, 12 * 4);
|
|
303
|
+
gl.uniform1f(this._uDeltaTime, this._animationDeltaTime);
|
|
304
|
+
if (globe.api_GetCurrentGeometry() === globe.api_GeometryTypes().FLAT) {
|
|
305
|
+
const { width, height } = globe.api_GetCurrentWorldWH();
|
|
306
|
+
gl.uniform2f(this._uMapWH, width, height);
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
gl.uniformMatrix4fv(this._uModelViewMatrix, false, modelMatrix);
|
|
310
|
+
}
|
|
311
|
+
gl.uniformMatrix4fv(this._uProjectionMatrix, false, projMatrix);
|
|
312
|
+
gl.uniform3fv(this._uTranslate, this._translateFloat32Array);
|
|
313
|
+
gl.drawArrays(gl.POINTS, 0, this._dataArray.length);
|
|
314
|
+
if (lastDepth) {
|
|
315
|
+
gl.enable(gl.DEPTH_TEST);
|
|
316
|
+
}
|
|
317
|
+
gl.disable(gl.BLEND);
|
|
318
|
+
globe.DrawRender();
|
|
319
|
+
}
|
|
320
|
+
_build() {
|
|
321
|
+
// build data and fill the buffer
|
|
322
|
+
const { gl, globe, _mixtureBuffer } = this;
|
|
323
|
+
if (globe == null || _mixtureBuffer == null) {
|
|
324
|
+
console.log("globe is null");
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
const floatArray = new Float32Array(this._dataArray.length * floatCount);
|
|
328
|
+
for (let i = 0; i < this._dataArray.length; i += 1) {
|
|
329
|
+
const data = this._dataArray[i];
|
|
330
|
+
const { long, lat, height, minSize, maxSize, color, fadeInTime, fadeOutTime } = data;
|
|
331
|
+
const [x, y, z] = globe.api_Get3DPoint(long, lat, height, false);
|
|
332
|
+
const [r, g, b] = color;
|
|
333
|
+
const startTime = data.startTime;
|
|
334
|
+
const minAlpha = data.minAlpha;
|
|
335
|
+
const maxAlpha = data.maxAlpha;
|
|
336
|
+
floatArray.set([x, y, z, r, g, b, minSize, maxSize, startTime, fadeInTime, fadeOutTime, minAlpha, maxAlpha], i * floatCount);
|
|
337
|
+
}
|
|
338
|
+
console.log("floatArray", floatArray);
|
|
339
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, _mixtureBuffer);
|
|
340
|
+
gl.bufferData(gl.ARRAY_BUFFER, floatArray, gl.STATIC_DRAW);
|
|
341
|
+
console.log("build");
|
|
342
|
+
if (this._buildTimerId == null) {
|
|
343
|
+
this._startBuildTimer();
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
_startBuildTimer() {
|
|
347
|
+
const { globe, _buildLOD } = this;
|
|
348
|
+
this._buildTimerId = setInterval(() => {
|
|
349
|
+
if (globe.api_GetCurrentGeometry() != globe.api_GeometryTypes().SPHERE)
|
|
350
|
+
return;
|
|
351
|
+
const LOD = globe.api_GetCurrentLOD();
|
|
352
|
+
if (!globe.api_IsScreenMoving() && LOD >= _buildLOD && LOD !== this._lastLOD) {
|
|
353
|
+
this._build();
|
|
354
|
+
this._lastLOD = LOD;
|
|
355
|
+
}
|
|
356
|
+
}, 1000);
|
|
357
|
+
console.log("startBuildTimer");
|
|
358
|
+
}
|
|
359
|
+
setGeometry() {
|
|
360
|
+
// arazi yuksekligine gore build tetikleyecek push mekanizmasi globeta yok
|
|
361
|
+
// timer start edilip durdurulacak
|
|
362
|
+
this._loadUniforms();
|
|
363
|
+
this.updateBuffer();
|
|
364
|
+
console.log("setGeometry");
|
|
365
|
+
}
|
|
366
|
+
_loadUniforms() {
|
|
367
|
+
const { gl, globe } = this;
|
|
368
|
+
const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
369
|
+
gl.useProgram(this._shaderProgram);
|
|
370
|
+
const geometry = globe.api_GetCurrentGeometry();
|
|
371
|
+
if (geometry === globe.api_GeometryTypes().SPHERE) {
|
|
372
|
+
gl.uniform1f(this._uIsFlat, false);
|
|
373
|
+
}
|
|
374
|
+
else if (geometry === globe.api_GeometryTypes().FLAT) {
|
|
375
|
+
gl.uniform1f(this._uIsFlat, true);
|
|
376
|
+
gl.uniform2f(this._uScrWH, globe.api_ScrW(), globe.api_ScrH());
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
alert("Geometry is not supported");
|
|
380
|
+
}
|
|
381
|
+
gl.useProgram(currentProgram);
|
|
382
|
+
}
|
|
383
|
+
free() {
|
|
384
|
+
console.log("free AlarmFadeInFadeOut");
|
|
385
|
+
const { gl } = this;
|
|
386
|
+
this.globe = null;
|
|
387
|
+
this.gl = null;
|
|
388
|
+
this.draw3D = null;
|
|
389
|
+
this._build = null;
|
|
390
|
+
clearInterval(this._buildTimerId);
|
|
391
|
+
clearInterval(this._tickTimerId);
|
|
392
|
+
gl.disableVertexAttribArray(this._aVertexPosition);
|
|
393
|
+
// gl.deleteBuffer(this._mixtureBuffer);
|
|
394
|
+
// gl.deleteProgram(this._shaderProgram);
|
|
395
|
+
this._shaderProgram = null;
|
|
396
|
+
this._mixtureBuffer = null;
|
|
397
|
+
window.removeEventListener('resize', this._resizeHandler, true);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
@@ -19,7 +19,7 @@ import { pointsOnArc } from "../juction/arc-plane";
|
|
|
19
19
|
import { latToTileY, tileYtoLat } from "./methods";
|
|
20
20
|
import Delaunator from "delaunator";
|
|
21
21
|
import { radianToMercatorXY } from "../methods";
|
|
22
|
-
const
|
|
22
|
+
export const uint32Escape = 4294967295;
|
|
23
23
|
// TODO:get rid of embedded lists. always flat list
|
|
24
24
|
const TILE_DEM_VERTEX_COUNT = 5; // 5x5 grid for DEM
|
|
25
25
|
const TILE_DEM_STEPCOUNT = TILE_DEM_VERTEX_COUNT - 1; // 4 inner divisions in each dimension
|
|
@@ -42,7 +42,16 @@ function radianCheck(point) {
|
|
|
42
42
|
return point[0] >= -Math.PI && point[0] <= Math.PI && point[1] >= -Math.PI
|
|
43
43
|
&& point[1] <= Math.PI / 2 && point[1] >= -Math.PI / 2;
|
|
44
44
|
}
|
|
45
|
-
|
|
45
|
+
const _3RealEdges = new Uint32Array([uint32Escape, 0, 1, 2, 0]);
|
|
46
|
+
const _2RealEdges_dismiss2 = new Uint32Array([uint32Escape, 0, 1, 2]);
|
|
47
|
+
const _2RealEdges_dismiss1 = new Uint32Array([uint32Escape, 2, 0, 1]);
|
|
48
|
+
const _2RealEdges_dismiss0 = new Uint32Array([uint32Escape, 1, 2, 0]);
|
|
49
|
+
const _1realEdge_0 = new Uint32Array([uint32Escape, 0, 1]);
|
|
50
|
+
const _1realEdge_1 = new Uint32Array([uint32Escape, 1, 2]);
|
|
51
|
+
const _1realEdge_2 = new Uint32Array([uint32Escape, 2, 0]);
|
|
52
|
+
const _noRealEdges = null;
|
|
53
|
+
export function createTriangleTessellationMeta(p1, p2, p3, isRealp0p1 = false, isRealp1p2 = false, isRealp2p3 = false) {
|
|
54
|
+
// TODO: this might be a problem
|
|
46
55
|
if (!radianCheck(p1) || !radianCheck(p2) || !radianCheck(p3)) {
|
|
47
56
|
throw new Error('Points must be in radian range: ' +
|
|
48
57
|
'p1:' + p1[0] + ',' + p1[1] +
|
|
@@ -55,6 +64,29 @@ export function createTriangleTessellationMeta(p1, p2, p3) {
|
|
|
55
64
|
const arc1 = createArc(p1v3, p2v3);
|
|
56
65
|
const arc2 = createArc(p2v3, p3v3);
|
|
57
66
|
const arc3 = createArc(p3v3, p1v3);
|
|
67
|
+
arc1.realEdge = isRealp0p1;
|
|
68
|
+
arc2.realEdge = isRealp1p2;
|
|
69
|
+
arc3.realEdge = isRealp2p3;
|
|
70
|
+
const realEdgeArcIndices = (() => {
|
|
71
|
+
switch (true) {
|
|
72
|
+
case isRealp0p1 && isRealp1p2 && isRealp2p3:
|
|
73
|
+
return _3RealEdges;
|
|
74
|
+
case isRealp0p1 && isRealp1p2 && !isRealp2p3:
|
|
75
|
+
return _2RealEdges_dismiss2;
|
|
76
|
+
case isRealp1p2 && isRealp2p3 && !isRealp0p1:
|
|
77
|
+
return _2RealEdges_dismiss1;
|
|
78
|
+
case isRealp2p3 && isRealp0p1 && !isRealp1p2:
|
|
79
|
+
return _2RealEdges_dismiss0;
|
|
80
|
+
case isRealp0p1 && !isRealp1p2 && !isRealp2p3:
|
|
81
|
+
return _1realEdge_0;
|
|
82
|
+
case isRealp1p2 && !isRealp2p3 && !isRealp0p1:
|
|
83
|
+
return _1realEdge_1;
|
|
84
|
+
case isRealp2p3 && !isRealp0p1 && !isRealp1p2:
|
|
85
|
+
return _1realEdge_2;
|
|
86
|
+
default:
|
|
87
|
+
return _noRealEdges;
|
|
88
|
+
}
|
|
89
|
+
})();
|
|
58
90
|
const limitVec = [0, 0, 0];
|
|
59
91
|
if (calculateZLimitPoint(arc1, limitVec)) {
|
|
60
92
|
arc1.exceededLimit = [limitVec[0], limitVec[1], limitVec[2]];
|
|
@@ -87,12 +119,15 @@ export function createTriangleTessellationMeta(p1, p2, p3) {
|
|
|
87
119
|
const meta = {
|
|
88
120
|
arcs: [arc1, arc2, arc3],
|
|
89
121
|
bbox,
|
|
90
|
-
showThreshold: calculateShowThreshold(arc1, arc2, arc3)
|
|
122
|
+
showThreshold: calculateShowThreshold(arc1, arc2, arc3),
|
|
91
123
|
};
|
|
124
|
+
// @ts-ignore
|
|
92
125
|
meta.shortCut = partialTessellation(meta, [{
|
|
93
126
|
bbox: meta.bbox,
|
|
94
127
|
zoom: 0
|
|
95
128
|
}], TILE_DEM_STEPCOUNT);
|
|
129
|
+
meta.shortCut.realEdgeArcIndices = realEdgeArcIndices;
|
|
130
|
+
// arcShortCut
|
|
96
131
|
return meta;
|
|
97
132
|
}
|
|
98
133
|
function calculateShowThreshold(arc1, arc2, arc3) {
|
|
@@ -221,7 +256,13 @@ function filterEdgePointTriangles(indeces, edgePointIndices) {
|
|
|
221
256
|
}
|
|
222
257
|
return new Uint32Array(result);
|
|
223
258
|
}
|
|
224
|
-
|
|
259
|
+
// function createArcPointHarvestingMeta(): ArcPointHarvestingMeta {
|
|
260
|
+
// return {
|
|
261
|
+
// parallelCutIndices: [],
|
|
262
|
+
// meridianCutIndices: [],
|
|
263
|
+
// };
|
|
264
|
+
// }
|
|
265
|
+
export function partialTessellation(triangleMeta, limits, innerCuts, calculateRealEdgeArc = false) {
|
|
225
266
|
// TODO: pointMap can be local variable and cleaned after function call to avoid reinitialization overhead
|
|
226
267
|
const pointMap = new Map(); // Key: "lon|lat", Value: index
|
|
227
268
|
const allVec3s = [];
|
|
@@ -367,6 +408,7 @@ export function partialTessellation(triangleMeta, limits, innerCuts) {
|
|
|
367
408
|
vec3s: new Float32Array(),
|
|
368
409
|
longLats: new Float32Array(),
|
|
369
410
|
indices: new Uint32Array(),
|
|
411
|
+
realEdgeArcIndices: null,
|
|
370
412
|
};
|
|
371
413
|
}
|
|
372
414
|
const delaunator = new Delaunator(allLongLats);
|
|
@@ -378,9 +420,45 @@ export function partialTessellation(triangleMeta, limits, innerCuts) {
|
|
|
378
420
|
allLongLats[i * 2] = xy[0];
|
|
379
421
|
allLongLats[i * 2 + 1] = xy[1];
|
|
380
422
|
}
|
|
423
|
+
const realEdgeArcIndices = calculateRealEdgeArc ? orderIndcecesAlongArc(triangleMeta, edgePointIndexSets, allLongLats) : null;
|
|
381
424
|
return {
|
|
382
425
|
vec3s: new Float32Array(allVec3s),
|
|
383
426
|
longLats: new Float32Array(allLongLats),
|
|
384
427
|
indices: indices,
|
|
428
|
+
realEdgeArcIndices,
|
|
385
429
|
};
|
|
386
430
|
}
|
|
431
|
+
function orderIndcecesAlongArc(triangleMeta, edgePointIndexSets, allLongLats) {
|
|
432
|
+
let result = [];
|
|
433
|
+
let itemCounter = 0;
|
|
434
|
+
for (let i = 0; i < 3; i++) {
|
|
435
|
+
const arc = triangleMeta.arcs[i];
|
|
436
|
+
if (!arc.realEdge) {
|
|
437
|
+
continue;
|
|
438
|
+
}
|
|
439
|
+
// convert set to list
|
|
440
|
+
const indices = Array.from(edgePointIndexSets[i]);
|
|
441
|
+
if (indices.length == 0) {
|
|
442
|
+
continue;
|
|
443
|
+
}
|
|
444
|
+
const dimension = Math.abs(arc.normal[2]) < 0.0001 ? 0 : 1;
|
|
445
|
+
indices.sort((a, b) => {
|
|
446
|
+
return allLongLats[a * 2 + dimension] - allLongLats[b * 2 + dimension];
|
|
447
|
+
});
|
|
448
|
+
result.push(indices);
|
|
449
|
+
itemCounter += indices.length + 1;
|
|
450
|
+
}
|
|
451
|
+
if (result.length === 0) {
|
|
452
|
+
return null;
|
|
453
|
+
}
|
|
454
|
+
const finalResult = new Uint32Array(itemCounter);
|
|
455
|
+
let counter = 0;
|
|
456
|
+
for (let i = 0; i < result.length; i++) {
|
|
457
|
+
finalResult[counter++] = uint32Escape;
|
|
458
|
+
const indices = result[i];
|
|
459
|
+
for (let j = 0; j < indices.length; j++) {
|
|
460
|
+
finalResult[counter++] = indices[j];
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
return finalResult;
|
|
464
|
+
}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Author: Toprak Nihat Deniz Ozturk
|
|
3
|
+
*/
|
|
1
4
|
import { DrawFromPixelCoords, } from "../util/programs/draw-from-pixel-coords";
|
|
2
5
|
import { latLongToPixelXY } from "../util/geometry/index";
|
|
3
6
|
import ContourMipmap, { scaleParameters } from "../Math/contour/quadtreecontours";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createProgram } from "../../util/webglobjectbuilders";
|
|
2
2
|
import { CameraUniformBlockTotemCache, CameraUniformBlockString } from "../totems/camerauniformblock";
|
|
3
|
-
import { DemTextureManagerCache, DEM_TEXTURE_BLOCK_STRING } from "../totems/dem-textures-manager";
|
|
3
|
+
import { DemTextureManagerCache, DEM_TEXTURE_BLOCK_STRING } from "../totems/attachments/dem-textures-manager";
|
|
4
4
|
import { cartesian3DToGLPosition, mercatorXYToGLPosition, POLE_BY_PI } from "../../util/shaderfunctions/geometrytransformations";
|
|
5
5
|
import { relativeBBoxPositionRadian } from "../../util/shaderfunctions/geometrytransformations";
|
|
6
6
|
import { drawArrays } from "../../util/gl-util/draw-options/methods";
|
|
@@ -22,6 +22,7 @@ const styleBlockManager = new UniformBlockManager('Style', [
|
|
|
22
22
|
{ name: "opacity", type: "float", value: new Float32Array([1.0]) },
|
|
23
23
|
{ name: "private_isPickedOn", type: "float", value: new Float32Array([0]) },
|
|
24
24
|
{ name: "private_pickedIndex", type: "float", value: new Float32Array([0]) },
|
|
25
|
+
{ name: "dontUseColor", type: "float", value: new Float32Array([0]) },
|
|
25
26
|
], uniformBindingPoints.style);
|
|
26
27
|
const vertexShaderSource = `#version 300 es
|
|
27
28
|
#pragma vscode_glsllint_stage : vert
|
|
@@ -39,7 +40,7 @@ ${DEM_TEXTURE_BLOCK_STRING}
|
|
|
39
40
|
in vec3 a_position;
|
|
40
41
|
in vec2 a_xy;
|
|
41
42
|
in float a_index;
|
|
42
|
-
in
|
|
43
|
+
in uvec4 a_color;
|
|
43
44
|
|
|
44
45
|
${styleBlockManager.glslCode()}
|
|
45
46
|
|
|
@@ -52,7 +53,16 @@ ${relativeBBoxPositionRadian}
|
|
|
52
53
|
void main() {
|
|
53
54
|
float elevation = ${WORLD_RADIUS_3D};
|
|
54
55
|
float altitude = 0.0;
|
|
55
|
-
|
|
56
|
+
|
|
57
|
+
vec4 decodedColor = vec4(
|
|
58
|
+
float(a_color.r) / 255.0,
|
|
59
|
+
float(a_color.g) / 255.0,
|
|
60
|
+
float(a_color.b) / 255.0,
|
|
61
|
+
float(a_color.a) / 254.0
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
// a_color.a == 255u is reserved as "no per-vertex color" sentinel.
|
|
65
|
+
v_color = (a_color.a == 255u || dontUseColor == 1.0) ? defaultColor : decodedColor;
|
|
56
66
|
|
|
57
67
|
if (is3D == true) {
|
|
58
68
|
for (int i = 0; i < 6; i++) {
|
|
@@ -171,7 +181,10 @@ export class TextureDemTriangles {
|
|
|
171
181
|
normalized: false,
|
|
172
182
|
});
|
|
173
183
|
attributeLoader(this.gl, variativeColorBuffer, this.locations.attributes.a_color, 4, {
|
|
174
|
-
|
|
184
|
+
type: this.gl.UNSIGNED_BYTE,
|
|
185
|
+
integer: true,
|
|
186
|
+
integerUnsigned: true,
|
|
187
|
+
escapeValues: [0, 0, 0, 255]
|
|
175
188
|
});
|
|
176
189
|
this.gl.bindVertexArray(null);
|
|
177
190
|
return vao;
|