@openglobus/og 0.12.1 → 0.13.0

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.
Files changed (230) hide show
  1. package/README.md +0 -2
  2. package/dist/@openglobus/og.css +1 -0
  3. package/dist/@openglobus/og.esm.js +21 -0
  4. package/dist/@openglobus/og.esm.js.map +1 -0
  5. package/dist/@openglobus/og.umd.js +21 -0
  6. package/dist/@openglobus/og.umd.js.map +1 -0
  7. package/package.json +8 -8
  8. package/src/og/Extent.js +3 -3
  9. package/src/og/Globe.js +277 -275
  10. package/src/og/ImageCanvas.js +3 -3
  11. package/src/og/LonLat.js +9 -9
  12. package/src/og/QueueArray.js +2 -2
  13. package/src/og/Rectangle.js +5 -5
  14. package/src/og/bv/Box.js +1 -1
  15. package/src/og/bv/Sphere.js +2 -2
  16. package/src/og/camera/Camera.js +1 -1
  17. package/src/og/camera/PlanetCamera.js +649 -646
  18. package/src/og/control/LayerSwitcher.js +1 -1
  19. package/src/og/control/MouseNavigation.js +22 -13
  20. package/src/og/control/MouseWheelZoomControl.js +2 -2
  21. package/src/og/control/ScaleControl.js +1 -1
  22. package/src/og/control/TouchNavigation.js +319 -319
  23. package/src/og/control/ZoomControl.js +132 -132
  24. package/src/og/control/visibleExtent/Segment.js +12 -12
  25. package/src/og/ellipsoid/Ellipsoid.js +577 -567
  26. package/src/og/entity/BillboardHandler.js +878 -1051
  27. package/src/og/entity/Entity.js +1 -1
  28. package/src/og/entity/EntityCollection.js +847 -857
  29. package/src/og/entity/GeoObjectHandler.js +37 -18
  30. package/src/og/entity/LabelHandler.js +888 -1040
  31. package/src/og/entity/LabelWorker.js +0 -6
  32. package/src/og/entity/PointCloud.js +495 -495
  33. package/src/og/entity/Polyline.js +2218 -2222
  34. package/src/og/entity/RayHandler.js +1 -1
  35. package/src/og/layer/CanvasTiles.js +6 -3
  36. package/src/og/layer/GeoImage.js +1 -1
  37. package/src/og/layer/KML.js +24 -17
  38. package/src/og/layer/Layer.js +806 -751
  39. package/src/og/layer/Vector.js +997 -1010
  40. package/src/og/layer/XYZ.js +359 -357
  41. package/src/og/math/Line2.js +4 -4
  42. package/src/og/math/Quat.js +2 -2
  43. package/src/og/math/Ray.js +2 -2
  44. package/src/og/math/Vec2.js +524 -524
  45. package/src/og/math/Vec3.js +900 -900
  46. package/src/og/math/Vec4.js +261 -261
  47. package/src/og/math.js +397 -398
  48. package/src/og/quadTree/EntityCollectionNode.js +389 -387
  49. package/src/og/renderer/Renderer.js +14 -20
  50. package/src/og/renderer/RendererEvents.js +1034 -1045
  51. package/src/og/scene/Planet.js +26 -23
  52. package/src/og/scene/RenderNode.js +347 -354
  53. package/src/og/segment/Segment.js +3 -1
  54. package/src/og/segment/SegmentLonLat.js +1 -4
  55. package/src/og/shaders/billboard.js +220 -204
  56. package/src/og/shaders/drawnode.js +603 -603
  57. package/src/og/shaders/geoObject.js +15 -6
  58. package/src/og/shaders/label.js +596 -456
  59. package/src/og/shaders/polyline.js +365 -361
  60. package/src/og/terrain/MapboxTerrain.js +1 -1
  61. package/src/og/utils/FontAtlas.js +209 -200
  62. package/src/og/utils/GeoImageCreator.js +4 -5
  63. package/src/og/utils/TextureAtlas.js +4 -4
  64. package/src/og/utils/VectorTileCreator.js +414 -414
  65. package/src/og/utils/shared.js +1 -1
  66. package/src/og/webgl/Handler.js +28 -60
  67. package/src/og/webgl/Multisample.js +260 -260
  68. package/src/og/webgl/Program.js +411 -396
  69. package/types/Clock.d.ts +94 -0
  70. package/types/Deferred.d.ts +6 -0
  71. package/types/Events.d.ts +77 -0
  72. package/types/Extent.d.ts +166 -0
  73. package/types/Globe.d.ts +85 -0
  74. package/types/ImageCanvas.d.ts +123 -0
  75. package/types/Lock.d.ts +12 -0
  76. package/types/LonLat.d.ts +108 -0
  77. package/types/Popup.d.ts +42 -0
  78. package/types/QueueArray.d.ts +19 -0
  79. package/types/Rectangle.d.ts +80 -0
  80. package/types/Stack.d.ts +19 -0
  81. package/types/ajax.d.ts +24 -0
  82. package/types/arial.d.ts +48 -0
  83. package/types/astro/astro.d.ts +38 -0
  84. package/types/astro/earth.d.ts +7 -0
  85. package/types/astro/jd.d.ts +254 -0
  86. package/types/bv/Box.d.ts +30 -0
  87. package/types/bv/Sphere.d.ts +38 -0
  88. package/types/bv/index.d.ts +3 -0
  89. package/types/camera/Camera.d.ts +312 -0
  90. package/types/camera/Frustum.d.ts +133 -0
  91. package/types/camera/PlanetCamera.d.ts +219 -0
  92. package/types/camera/index.d.ts +3 -0
  93. package/types/cons.d.ts +40 -0
  94. package/types/control/CompassButton.d.ts +17 -0
  95. package/types/control/Control.d.ts +104 -0
  96. package/types/control/DebugInfo.d.ts +15 -0
  97. package/types/control/EarthCoordinates.d.ts +47 -0
  98. package/types/control/EarthNavigation.d.ts +43 -0
  99. package/types/control/GeoImageDragControl.d.ts +6 -0
  100. package/types/control/KeyboardNavigation.d.ts +21 -0
  101. package/types/control/LayerSwitcher.d.ts +21 -0
  102. package/types/control/Lighting.d.ts +16 -0
  103. package/types/control/MouseNavigation.d.ts +48 -0
  104. package/types/control/MouseWheelZoomControl.d.ts +45 -0
  105. package/types/control/ScaleControl.d.ts +22 -0
  106. package/types/control/ShowFps.d.ts +11 -0
  107. package/types/control/SimpleNavigation.d.ts +25 -0
  108. package/types/control/Sun.d.ts +50 -0
  109. package/types/control/ToggleWireframe.d.ts +12 -0
  110. package/types/control/TouchNavigation.d.ts +48 -0
  111. package/types/control/ZoomControl.d.ts +27 -0
  112. package/types/control/index.d.ts +18 -0
  113. package/types/ellipsoid/Ellipsoid.d.ts +153 -0
  114. package/types/ellipsoid/index.d.ts +3 -0
  115. package/types/ellipsoid/wgs84.d.ts +6 -0
  116. package/types/entity/BaseBillboard.d.ts +215 -0
  117. package/types/entity/Billboard.d.ts +94 -0
  118. package/types/entity/BillboardHandler.d.ts +75 -0
  119. package/types/entity/Entity.d.ts +348 -0
  120. package/types/entity/EntityCollection.d.ts +309 -0
  121. package/types/entity/GeoObject.d.ts +111 -0
  122. package/types/entity/GeoObjectHandler.d.ts +81 -0
  123. package/types/entity/Geometry.d.ts +74 -0
  124. package/types/entity/GeometryHandler.d.ts +76 -0
  125. package/types/entity/Label.d.ts +189 -0
  126. package/types/entity/LabelHandler.d.ts +29 -0
  127. package/types/entity/LabelWorker.d.ts +11 -0
  128. package/types/entity/PointCloud.d.ts +174 -0
  129. package/types/entity/PointCloudHandler.d.ts +38 -0
  130. package/types/entity/Polyline.d.ts +306 -0
  131. package/types/entity/PolylineHandler.d.ts +18 -0
  132. package/types/entity/Ray.d.ts +124 -0
  133. package/types/entity/RayHandler.d.ts +67 -0
  134. package/types/entity/ShapeHandler.d.ts +22 -0
  135. package/types/entity/Strip.d.ts +119 -0
  136. package/types/entity/StripHandler.d.ts +38 -0
  137. package/types/entity/index.d.ts +8 -0
  138. package/types/index.core.d.ts +65 -0
  139. package/types/index.d.ts +45 -0
  140. package/types/index.webgl.d.ts +7 -0
  141. package/types/input/KeyboardHandler.d.ts +10 -0
  142. package/types/input/MouseHandler.d.ts +5 -0
  143. package/types/input/TouchHandler.d.ts +5 -0
  144. package/types/input/input.d.ts +34 -0
  145. package/types/layer/BaseGeoImage.d.ts +94 -0
  146. package/types/layer/CanvasTiles.d.ts +67 -0
  147. package/types/layer/GeoImage.d.ts +52 -0
  148. package/types/layer/GeoTexture2d.d.ts +8 -0
  149. package/types/layer/GeoVideo.d.ts +55 -0
  150. package/types/layer/KML.d.ts +68 -0
  151. package/types/layer/Layer.d.ts +315 -0
  152. package/types/layer/Material.d.ts +45 -0
  153. package/types/layer/Vector.d.ts +201 -0
  154. package/types/layer/WMS.d.ts +61 -0
  155. package/types/layer/XYZ.d.ts +119 -0
  156. package/types/layer/index.d.ts +10 -0
  157. package/types/light/LightSource.d.ts +178 -0
  158. package/types/math/Line2.d.ts +11 -0
  159. package/types/math/Line3.d.ts +10 -0
  160. package/types/math/Mat3.d.ts +65 -0
  161. package/types/math/Mat4.d.ts +176 -0
  162. package/types/math/Plane.d.ts +18 -0
  163. package/types/math/Quat.d.ts +379 -0
  164. package/types/math/Ray.d.ts +82 -0
  165. package/types/math/Vec2.d.ts +309 -0
  166. package/types/math/Vec3.d.ts +467 -0
  167. package/types/math/Vec4.d.ts +162 -0
  168. package/types/math/coder.d.ts +43 -0
  169. package/types/math/index.d.ts +11 -0
  170. package/types/math.d.ts +261 -0
  171. package/types/mercator.d.ts +92 -0
  172. package/types/proj/EPSG3857.d.ts +6 -0
  173. package/types/proj/EPSG4326.d.ts +6 -0
  174. package/types/proj/Proj.d.ts +42 -0
  175. package/types/quadTree/EntityCollectionNode.d.ts +34 -0
  176. package/types/quadTree/Node.d.ts +60 -0
  177. package/types/quadTree/quadTree.d.ts +40 -0
  178. package/types/renderer/Renderer.d.ts +290 -0
  179. package/types/renderer/RendererEvents.d.ts +237 -0
  180. package/types/res/images.d.ts +3 -0
  181. package/types/scene/Axes.d.ts +11 -0
  182. package/types/scene/BaseNode.d.ts +60 -0
  183. package/types/scene/Planet.d.ts +576 -0
  184. package/types/scene/RenderNode.d.ts +142 -0
  185. package/types/scene/SkyBox.d.ts +10 -0
  186. package/types/scene/index.d.ts +4 -0
  187. package/types/segment/Segment.d.ts +275 -0
  188. package/types/segment/SegmentLonLat.d.ts +17 -0
  189. package/types/segment/Slice.d.ts +10 -0
  190. package/types/segment/segmentHelper.d.ts +13 -0
  191. package/types/shaders/billboard.d.ts +3 -0
  192. package/types/shaders/depth.d.ts +2 -0
  193. package/types/shaders/drawnode.d.ts +7 -0
  194. package/types/shaders/geoObject.d.ts +3 -0
  195. package/types/shaders/label.d.ts +4 -0
  196. package/types/shaders/pointCloud.d.ts +2 -0
  197. package/types/shaders/polyline.d.ts +3 -0
  198. package/types/shaders/ray.d.ts +2 -0
  199. package/types/shaders/screenFrame.d.ts +2 -0
  200. package/types/shaders/shape.d.ts +4 -0
  201. package/types/shaders/skybox.d.ts +2 -0
  202. package/types/shaders/toneMapping.d.ts +2 -0
  203. package/types/shapes/BaseShape.d.ts +250 -0
  204. package/types/shapes/Sphere.d.ts +41 -0
  205. package/types/terrain/BilTerrain.d.ts +7 -0
  206. package/types/terrain/EmptyTerrain.d.ts +73 -0
  207. package/types/terrain/Geoid.d.ts +26 -0
  208. package/types/terrain/GlobusTerrain.d.ts +116 -0
  209. package/types/terrain/MapboxTerrain.d.ts +7 -0
  210. package/types/terrain/index.d.ts +5 -0
  211. package/types/utils/FontAtlas.d.ts +16 -0
  212. package/types/utils/GeoImageCreator.d.ts +30 -0
  213. package/types/utils/ImagesCacheManager.d.ts +10 -0
  214. package/types/utils/Loader.d.ts +25 -0
  215. package/types/utils/NormalMapCreator.d.ts +39 -0
  216. package/types/utils/PlainSegmentWorker.d.ts +10 -0
  217. package/types/utils/TerrainWorker.d.ts +9 -0
  218. package/types/utils/TextureAtlas.d.ts +111 -0
  219. package/types/utils/VectorTileCreator.d.ts +16 -0
  220. package/types/utils/colorTable.d.ts +143 -0
  221. package/types/utils/earcut.d.ts +6 -0
  222. package/types/utils/shared.d.ts +231 -0
  223. package/types/webgl/Framebuffer.d.ts +135 -0
  224. package/types/webgl/Handler.d.ts +392 -0
  225. package/types/webgl/Multisample.d.ts +89 -0
  226. package/types/webgl/Program.d.ts +163 -0
  227. package/types/webgl/ProgramController.d.ts +89 -0
  228. package/types/webgl/callbacks.d.ts +1 -0
  229. package/types/webgl/index.d.ts +6 -0
  230. package/types/webgl/types.d.ts +2 -0
@@ -1,354 +1,347 @@
1
- "use strict";
2
-
3
- import { BaseNode } from "./BaseNode.js";
4
- import { Events } from "../Events.js";
5
-
6
- /**
7
- * Render node is a logical part of a render mechanism. Represents scene rendering.
8
- * Forexample one scene node for rendering the Earth, another one for rendering the Moon, another node for rendering stars etc.
9
- * Each render node has own model view space defined with matrices(scale, rotation, translation, transformation).
10
- * There are collections of ligh sources, entities and so on in the node.
11
- * Access to the node is renderer.renderNodes["Earth"]
12
- * @class
13
- * @extends {RenderNode}
14
- * @param {string} name - Node name.
15
- */
16
- class RenderNode extends BaseNode {
17
- constructor(name) {
18
- super(name);
19
-
20
- /**
21
- * Renderer that calls frame() callback.
22
- * @public
23
- * @type {Renderer}
24
- */
25
- this.renderer = null;
26
-
27
- this.drawMode = null;
28
-
29
- /** Show rendering.
30
- * @public
31
- */
32
- this.show = true;
33
-
34
- this._isActive = true;
35
-
36
- /**
37
- * Lighting calculations.
38
- * @public
39
- * @type {boolean}
40
- */
41
- this.lightEnabled = false;
42
-
43
- /**
44
- * Point light array.
45
- * @private
46
- * @type {Array.<LightSource>}
47
- */
48
- this._lights = [];
49
- this._lightsTransformedPositions = [];
50
- this._lightsParamsv = [];
51
- this._lightsParamsf = [];
52
- this._lightsNames = [];
53
-
54
- /**
55
- * Entity collection array.
56
- * @public
57
- * @type {Array.<EntityCollection>}
58
- */
59
- this.entityCollections = [];
60
-
61
- this._pickingId = -1;
62
-
63
- this.events = new Events(null, this);
64
- }
65
-
66
- /**
67
- * Adds node to the current hierarchy.
68
- * @public
69
- * @type {RenderNode}
70
- */
71
- addNode(node) {
72
- super.addNode(node);
73
- node.assign(this.renderer);
74
- }
75
-
76
- /**
77
- * Assign render node with renderer.
78
- * @public
79
- * @param {Renderer} renderer - Redner node's renderer.
80
- */
81
- assign(renderer) {
82
- this.renderer = renderer;
83
- this._pickingId = renderer.addPickingCallback(this, this._entityCollectionPickingCallback);
84
-
85
- for (var i = 0; i < this.entityCollections.length; i++) {
86
- this.entityCollections[i].bindRenderNode(this);
87
- }
88
-
89
- this.init && this.init();
90
- }
91
-
92
- onremove() {
93
- //virtual
94
- }
95
-
96
- remove() {
97
- var r = this.renderer,
98
- n = this.name;
99
-
100
- if (r) {
101
- if (r.renderNodes[n] && r.renderNodes[n].isEqual(this)) {
102
- r.renderNodes[n] = null;
103
- delete r.renderNodes[n];
104
- }
105
-
106
- for (var i = 0; i < r._renderNodesArr.length; i++) {
107
- if (r._renderNodesArr[i].isEqual(this)) {
108
- r._renderNodesArr.splice(i, 1);
109
- break;
110
- }
111
- }
112
- r.removePickingCallback(this._pickingId);
113
- this._pickingId = -1;
114
- this.onremove && this.onremove();
115
- }
116
- }
117
-
118
- /**
119
- * Adds entity collection.
120
- * @public
121
- * @param {EntityCollection} entityCollection - Entity collection.
122
- * @param {boolean} [isHidden] - If it's true that this collection has specific rendering.
123
- * @returns {RenderNode} -
124
- */
125
- addEntityCollection(entityCollection, isHidden) {
126
- entityCollection.addTo(this, isHidden);
127
- return this;
128
- }
129
-
130
- /**
131
- * Removes entity collection.
132
- * @public
133
- * @param {EntityCollection} entityCollection - Entity collection for remove.
134
- */
135
- removeEntityCollection(entityCollection) {
136
- entityCollection.remove();
137
- }
138
-
139
- /**
140
- * Adds point light source.
141
- * @public
142
- * @param {LightSource} light - Light source.
143
- * @returns {RenderNode}
144
- */
145
- addLight(light) {
146
- light.addTo(this);
147
- return this;
148
- }
149
-
150
- /**
151
- * Gets light object by its name.
152
- * @public
153
- * @param {string} name - Point light name.
154
- * @returns {LightSource}
155
- */
156
- getLightByName(name) {
157
- var li = this._lightsNames.indexOf(name);
158
- return this._lights[li];
159
- }
160
-
161
- /**
162
- * Removes light source.
163
- * @public
164
- * @param {LightSource} light - Light source object.
165
- */
166
- removeLight(light) {
167
- light.remove();
168
- }
169
-
170
- /**
171
- * Calls render frame node's callback. Used in renderer.
172
- * @public
173
- */
174
- drawNode(frustum, frustumIndex) {
175
- this._isActive && this._drawNodes(frustum, frustumIndex);
176
- }
177
-
178
- /**
179
- * Gets render node activity.
180
- * @public
181
- * @returns {Boolean} -
182
- */
183
- isActive() {
184
- return this._isActive;
185
- }
186
-
187
- /**
188
- * Rendering activation.
189
- * @public
190
- * @param {boolean} isActive - Activation flag.
191
- */
192
- setActive(isActive) {
193
- this._isActive = isActive;
194
-
195
- if (this.renderer) {
196
- if (this._isActive && this._pickingId === -1) {
197
- this._pickingId = this.renderer.addPickingCallback(
198
- this,
199
- this._entityCollectionPickingCallback
200
- );
201
- } else if (!this._isActive && this._pickingId !== -1) {
202
- this.renderer.removePickingCallback(this._pickingId);
203
- this._pickingId = -1;
204
- }
205
- }
206
-
207
- for (var i = 0; i < this.childNodes.length; i++) {
208
- this.childNodes[i].setActive(isActive);
209
- }
210
- }
211
-
212
- /**
213
- * Sets draw mode
214
- * @public
215
- * @param {Number} mode - Draw mode, such as gl.TRIANGLES, gl.TRIANGLE_STRIP, gl.LINES etc.
216
- */
217
- setDrawMode(mode) {
218
- this.drawMode = mode;
219
- for (var i = 0; i < this.childNodes.length; i++) {
220
- this.childNodes[i].setDrawMode(mode);
221
- }
222
- }
223
-
224
- /**
225
- * IMPORTANT: This function have to be called manualy in each render node frame callback, before drawing scene geometry.
226
- * @public
227
- */
228
- transformLights() {
229
- var r = this.renderer;
230
- for (var i = 0; i < this._lights.length; i++) {
231
- var ii = i * 4;
232
- var tp;
233
- if (this._lights[i].directional) {
234
- tp = r.activeCamera._normalMatrix.mulVec(this._lights[i]._position);
235
- this._lightsTransformedPositions[ii + 3] = 0;
236
- } else {
237
- tp = r.activeCamera._viewMatrix.mulVec3(this._lights[i]._position);
238
- this._lightsTransformedPositions[ii + 3] = 1;
239
- }
240
- this._lightsTransformedPositions[ii] = tp.x;
241
- this._lightsTransformedPositions[ii + 1] = tp.y;
242
- this._lightsTransformedPositions[ii + 2] = tp.z;
243
- }
244
- }
245
-
246
- updateBillboardsTexCoords() {
247
- for (var i = 0; i < this.entityCollections.length; i++) {
248
- this.entityCollections[i].billboardHandler.refreshTexCoordsArr();
249
- }
250
- }
251
-
252
- /**
253
- * @private
254
- */
255
- _drawNodes() {
256
- for (var i = 0; i < this.childNodes.length; i++) {
257
- if (this.childNodes[i]._isActive) {
258
- this.childNodes[i]._drawNodes();
259
- }
260
- }
261
-
262
- if (this.show) {
263
- if (this.frame) {
264
- //this.lightEnabled && this.transformLights();
265
- this.frame();
266
- }
267
- this.drawEntityCollections(this.entityCollections);
268
- }
269
- }
270
-
271
- drawEntityCollections(ec) {
272
- this.renderer.enqueueEntityCollectionsToDraw(ec);
273
- }
274
-
275
- /**
276
- * Draw entity collections picking frame.
277
- * @public
278
- * @param {Array<og.EntityCollection>} ec - Entity collection array.
279
- */
280
- drawPickingEntityCollections(ec) {
281
- if (ec.length) {
282
- var gl = this.renderer.handler.gl;
283
-
284
- gl.disable(gl.CULL_FACE);
285
-
286
- // Z-buffer offset
287
- gl.enable(gl.POLYGON_OFFSET_FILL);
288
- gl.polygonOffset(0.0, 0.0);
289
-
290
- // billoard pass
291
- var i = ec.length;
292
- while (i--) {
293
- ec[i]._fadingOpacity && ec[i].billboardHandler.drawPicking();
294
- }
295
-
296
- // geoObject pass
297
- i = ec.length;
298
- while (i--) {
299
- ec[i]._fadingOpacity && ec[i].geoObjectHandler.drawPicking();
300
- }
301
-
302
- // label pass
303
- i = ec.length;
304
- while (i--) {
305
- ec[i]._fadingOpacity && ec[i].labelHandler.drawPicking();
306
- }
307
-
308
- // ray pass
309
- i = ec.length;
310
- while (i--) {
311
- ec[i]._fadingOpacity && ec[i].rayHandler.drawPicking();
312
- }
313
-
314
- gl.polygonOffset(0.0, 0.0);
315
-
316
- gl.disable(gl.POLYGON_OFFSET_FILL);
317
- gl.enable(gl.CULL_FACE);
318
-
319
- // polylines pass
320
- i = ec.length;
321
- while (i--) {
322
- ec[i]._visibility && ec[i].polylineHandler.drawPicking();
323
- }
324
-
325
- //shapes pass
326
- i = ec.length;
327
- while (i--) {
328
- ec[i]._visibility && ec[i].shapeHandler.drawPicking();
329
- }
330
-
331
- //Strip pass
332
- i = ec.length;
333
- while (i--) {
334
- ec[i]._visibility && ec[i].stripHandler.drawPicking();
335
- }
336
-
337
- // //pointClouds pass
338
- // i = ec.length;
339
- // while (i--) {
340
- // ec[i]._visibility && ec[i].pointCloudHandler.drawPicking();
341
- // }
342
- }
343
- }
344
-
345
- /**
346
- * Picking entity frame callback
347
- * @private
348
- */
349
- _entityCollectionPickingCallback() {
350
- this.drawPickingEntityCollections(this.entityCollections);
351
- }
352
- }
353
-
354
- export { RenderNode };
1
+ "use strict";
2
+
3
+ import { BaseNode } from "./BaseNode.js";
4
+ import { Events } from "../Events.js";
5
+
6
+ /**
7
+ * Render node is a logical part of a render mechanism. Represents scene rendering.
8
+ * Forexample one scene node for rendering the Earth, another one for rendering the Moon, another node for rendering stars etc.
9
+ * Each render node has own model view space defined with matrices(scale, rotation, translation, transformation).
10
+ * There are collections of ligh sources, entities and so on in the node.
11
+ * Access to the node is renderer.renderNodes["Earth"]
12
+ * @class
13
+ * @extends {RenderNode}
14
+ * @param {string} name - Node name.
15
+ */
16
+ class RenderNode extends BaseNode {
17
+ constructor(name) {
18
+ super(name);
19
+
20
+ /**
21
+ * Renderer that calls frame() callback.
22
+ * @public
23
+ * @type {Renderer}
24
+ */
25
+ this.renderer = null;
26
+
27
+ this.drawMode = null;
28
+
29
+ /** Show rendering.
30
+ * @public
31
+ */
32
+ this.show = true;
33
+
34
+ this._isActive = true;
35
+
36
+ /**
37
+ * Lighting calculations.
38
+ * @public
39
+ * @type {boolean}
40
+ */
41
+ this.lightEnabled = false;
42
+
43
+ /**
44
+ * Point light array.
45
+ * @private
46
+ * @type {Array.<LightSource>}
47
+ */
48
+ this._lights = [];
49
+ this._lightsTransformedPositions = [];
50
+ this._lightsParamsv = [];
51
+ this._lightsParamsf = [];
52
+ this._lightsNames = [];
53
+
54
+ /**
55
+ * Entity collection array.
56
+ * @public
57
+ * @type {Array.<EntityCollection>}
58
+ */
59
+ this.entityCollections = [];
60
+
61
+ this._pickingId = -1;
62
+
63
+ this.events = new Events(null, this);
64
+ }
65
+
66
+ /**
67
+ * Adds node to the current hierarchy.
68
+ * @public
69
+ * @type {RenderNode}
70
+ */
71
+ addNode(node) {
72
+ super.addNode(node);
73
+ node.assign(this.renderer);
74
+ }
75
+
76
+ /**
77
+ * Assign render node with renderer.
78
+ * @public
79
+ * @param {Renderer} renderer - Redner node's renderer.
80
+ */
81
+ assign(renderer) {
82
+ this.renderer = renderer;
83
+ this._pickingId = renderer.addPickingCallback(this, this._entityCollectionPickingCallback);
84
+
85
+ for (var i = 0; i < this.entityCollections.length; i++) {
86
+ this.entityCollections[i].bindRenderNode(this);
87
+ }
88
+
89
+ this.init && this.init();
90
+ }
91
+
92
+ onremove() {
93
+ //virtual
94
+ }
95
+
96
+ remove() {
97
+ var r = this.renderer,
98
+ n = this.name;
99
+
100
+ if (r) {
101
+ if (r.renderNodes[n] && r.renderNodes[n].isEqual(this)) {
102
+ r.renderNodes[n] = null;
103
+ delete r.renderNodes[n];
104
+ }
105
+
106
+ for (var i = 0; i < r._renderNodesArr.length; i++) {
107
+ if (r._renderNodesArr[i].isEqual(this)) {
108
+ r._renderNodesArr.splice(i, 1);
109
+ break;
110
+ }
111
+ }
112
+ r.removePickingCallback(this._pickingId);
113
+ this._pickingId = -1;
114
+ this.onremove && this.onremove();
115
+ }
116
+ }
117
+
118
+ /**
119
+ * Adds entity collection.
120
+ * @public
121
+ * @param {EntityCollection} entityCollection - Entity collection.
122
+ * @param {boolean} [isHidden] - If it's true that this collection has specific rendering.
123
+ * @returns {RenderNode} -
124
+ */
125
+ addEntityCollection(entityCollection, isHidden) {
126
+ entityCollection.addTo(this, isHidden);
127
+ return this;
128
+ }
129
+
130
+ /**
131
+ * Removes entity collection.
132
+ * @public
133
+ * @param {EntityCollection} entityCollection - Entity collection for remove.
134
+ */
135
+ removeEntityCollection(entityCollection) {
136
+ entityCollection.remove();
137
+ }
138
+
139
+ /**
140
+ * Adds point light source.
141
+ * @public
142
+ * @param {LightSource} light - Light source.
143
+ * @returns {RenderNode}
144
+ */
145
+ addLight(light) {
146
+ light.addTo(this);
147
+ return this;
148
+ }
149
+
150
+ /**
151
+ * Gets light object by its name.
152
+ * @public
153
+ * @param {string} name - Point light name.
154
+ * @returns {LightSource}
155
+ */
156
+ getLightByName(name) {
157
+ var li = this._lightsNames.indexOf(name);
158
+ return this._lights[li];
159
+ }
160
+
161
+ /**
162
+ * Removes light source.
163
+ * @public
164
+ * @param {LightSource} light - Light source object.
165
+ */
166
+ removeLight(light) {
167
+ light.remove();
168
+ }
169
+
170
+ /**
171
+ * Calls render frame node's callback. Used in renderer.
172
+ * @public
173
+ */
174
+ drawNode(frustum, frustumIndex) {
175
+ this._isActive && this._drawNodes(frustum, frustumIndex);
176
+ }
177
+
178
+ /**
179
+ * Gets render node activity.
180
+ * @public
181
+ * @returns {Boolean} -
182
+ */
183
+ isActive() {
184
+ return this._isActive;
185
+ }
186
+
187
+ /**
188
+ * Rendering activation.
189
+ * @public
190
+ * @param {boolean} isActive - Activation flag.
191
+ */
192
+ setActive(isActive) {
193
+ this._isActive = isActive;
194
+
195
+ if (this.renderer) {
196
+ if (this._isActive && this._pickingId === -1) {
197
+ this._pickingId = this.renderer.addPickingCallback(
198
+ this,
199
+ this._entityCollectionPickingCallback
200
+ );
201
+ } else if (!this._isActive && this._pickingId !== -1) {
202
+ this.renderer.removePickingCallback(this._pickingId);
203
+ this._pickingId = -1;
204
+ }
205
+ }
206
+
207
+ for (var i = 0; i < this.childNodes.length; i++) {
208
+ this.childNodes[i].setActive(isActive);
209
+ }
210
+ }
211
+
212
+ /**
213
+ * Sets draw mode
214
+ * @public
215
+ * @param {Number} mode - Draw mode, such as gl.TRIANGLES, gl.TRIANGLE_STRIP, gl.LINES etc.
216
+ */
217
+ setDrawMode(mode) {
218
+ this.drawMode = mode;
219
+ for (var i = 0; i < this.childNodes.length; i++) {
220
+ this.childNodes[i].setDrawMode(mode);
221
+ }
222
+ }
223
+
224
+ /**
225
+ * IMPORTANT: This function have to be called manualy in each render node frame callback, before drawing scene geometry.
226
+ * @public
227
+ */
228
+ transformLights() {
229
+ var r = this.renderer;
230
+ for (var i = 0; i < this._lights.length; i++) {
231
+ var ii = i * 4;
232
+ var tp;
233
+ if (this._lights[i].directional) {
234
+ tp = r.activeCamera._normalMatrix.mulVec(this._lights[i]._position);
235
+ this._lightsTransformedPositions[ii + 3] = 0;
236
+ } else {
237
+ tp = r.activeCamera._viewMatrix.mulVec3(this._lights[i]._position);
238
+ this._lightsTransformedPositions[ii + 3] = 1;
239
+ }
240
+ this._lightsTransformedPositions[ii] = tp.x;
241
+ this._lightsTransformedPositions[ii + 1] = tp.y;
242
+ this._lightsTransformedPositions[ii + 2] = tp.z;
243
+ }
244
+ }
245
+
246
+ updateBillboardsTexCoords() {
247
+ for (var i = 0; i < this.entityCollections.length; i++) {
248
+ this.entityCollections[i].billboardHandler.refreshTexCoordsArr();
249
+ }
250
+ }
251
+
252
+ /**
253
+ * @private
254
+ */
255
+ _drawNodes() {
256
+ for (var i = 0; i < this.childNodes.length; i++) {
257
+ if (this.childNodes[i]._isActive) {
258
+ this.childNodes[i]._drawNodes();
259
+ }
260
+ }
261
+
262
+ if (this.show) {
263
+ if (this.frame) {
264
+ //this.lightEnabled && this.transformLights();
265
+ this.frame();
266
+ }
267
+ this.drawEntityCollections(this.entityCollections);
268
+ }
269
+ }
270
+
271
+ drawEntityCollections(ec) {
272
+ this.renderer.enqueueEntityCollectionsToDraw(ec);
273
+ }
274
+
275
+ /**
276
+ * Draw entity collections picking frame.
277
+ * @public
278
+ * @param {Array<og.EntityCollection>} ec - Entity collection array.
279
+ */
280
+ drawPickingEntityCollections(ec) {
281
+ if (ec.length) {
282
+ var gl = this.renderer.handler.gl;
283
+
284
+ gl.disable(gl.CULL_FACE);
285
+
286
+ // billoard pass
287
+ var i = ec.length;
288
+ while (i--) {
289
+ ec[i]._fadingOpacity && ec[i].billboardHandler.drawPicking();
290
+ }
291
+
292
+ // geoObject pass
293
+ i = ec.length;
294
+ while (i--) {
295
+ ec[i]._fadingOpacity && ec[i].geoObjectHandler.drawPicking();
296
+ }
297
+
298
+ // label pass
299
+ i = ec.length;
300
+ while (i--) {
301
+ ec[i]._fadingOpacity && ec[i].labelHandler.drawPicking();
302
+ }
303
+
304
+ // ray pass
305
+ i = ec.length;
306
+ while (i--) {
307
+ ec[i]._fadingOpacity && ec[i].rayHandler.drawPicking();
308
+ }
309
+
310
+ gl.enable(gl.CULL_FACE);
311
+
312
+ // polylines pass
313
+ i = ec.length;
314
+ while (i--) {
315
+ ec[i]._visibility && ec[i].polylineHandler.drawPicking();
316
+ }
317
+
318
+ //shapes pass
319
+ i = ec.length;
320
+ while (i--) {
321
+ ec[i]._visibility && ec[i].shapeHandler.drawPicking();
322
+ }
323
+
324
+ //Strip pass
325
+ i = ec.length;
326
+ while (i--) {
327
+ ec[i]._visibility && ec[i].stripHandler.drawPicking();
328
+ }
329
+
330
+ // //pointClouds pass
331
+ // i = ec.length;
332
+ // while (i--) {
333
+ // ec[i]._visibility && ec[i].pointCloudHandler.drawPicking();
334
+ // }
335
+ }
336
+ }
337
+
338
+ /**
339
+ * Picking entity frame callback
340
+ * @private
341
+ */
342
+ _entityCollectionPickingCallback() {
343
+ this.drawPickingEntityCollections(this.entityCollections);
344
+ }
345
+ }
346
+
347
+ export { RenderNode };