@openglobus/og 0.22.1 → 0.23.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 (168) hide show
  1. package/css/og.css +137 -1
  2. package/lib/@openglobus/js/Object3d.d.ts +20 -10
  3. package/lib/@openglobus/js/camera/Camera.d.ts +9 -0
  4. package/lib/@openglobus/js/camera/Frustum.d.ts +3 -0
  5. package/lib/@openglobus/js/control/CameraLock.d.ts +38 -0
  6. package/lib/@openglobus/js/control/SimpleNavigation.d.ts +27 -10
  7. package/lib/@openglobus/js/control/geoObjectEditor/ArrowEntity.d.ts +15 -0
  8. package/lib/@openglobus/js/control/geoObjectEditor/AxisTrackEntity.d.ts +9 -0
  9. package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditor.d.ts +13 -0
  10. package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditorDialog.d.ts +69 -0
  11. package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditorScene.d.ts +78 -9
  12. package/lib/@openglobus/js/control/geoObjectEditor/MoveAxisEntity.d.ts +17 -0
  13. package/lib/@openglobus/js/control/geoObjectEditor/MovePlaneEntity.d.ts +7 -0
  14. package/lib/@openglobus/js/control/geoObjectEditor/RotateEntity.d.ts +9 -0
  15. package/lib/@openglobus/js/control/geoObjectEditor/colors.d.ts +8 -0
  16. package/lib/@openglobus/js/control/index.d.ts +2 -0
  17. package/lib/@openglobus/js/entity/Entity.d.ts +278 -19
  18. package/lib/@openglobus/js/entity/EntityCollection.d.ts +8 -9
  19. package/lib/@openglobus/js/entity/GeoObject.d.ts +141 -36
  20. package/lib/@openglobus/js/entity/GeoObjectHandler.d.ts +39 -63
  21. package/lib/@openglobus/js/entity/InstanceData.d.ts +76 -0
  22. package/lib/@openglobus/js/entity/Polyline.d.ts +19 -6
  23. package/lib/@openglobus/js/entity/PolylineHandler.d.ts +7 -0
  24. package/lib/@openglobus/js/index.d.ts +2 -1
  25. package/lib/@openglobus/js/layer/Vector.d.ts +4 -0
  26. package/lib/@openglobus/js/light/LightSource.d.ts +1 -139
  27. package/lib/@openglobus/js/math/Quat.d.ts +46 -33
  28. package/lib/@openglobus/js/math/Ray.d.ts +10 -4
  29. package/lib/@openglobus/js/math/Vec3.d.ts +15 -0
  30. package/lib/@openglobus/js/math.d.ts +2 -2
  31. package/lib/@openglobus/js/quadTree/EntityCollectionNode.d.ts +2 -2
  32. package/lib/@openglobus/js/quadTree/Node.d.ts +1 -1
  33. package/lib/@openglobus/js/quadTree/earth/EarthEntityCollectionNodeLonLat.d.ts +1 -1
  34. package/lib/@openglobus/js/quadTree/equi/EquiEntityCollectionNodeLonLat.d.ts +1 -1
  35. package/lib/@openglobus/js/renderer/Renderer.d.ts +64 -44
  36. package/lib/@openglobus/js/renderer/RendererEvents.d.ts +1 -0
  37. package/lib/@openglobus/js/scene/Planet.d.ts +11 -7
  38. package/lib/@openglobus/js/scene/RenderNode.d.ts +10 -25
  39. package/lib/@openglobus/js/shaders/drawnode.d.ts +1 -0
  40. package/lib/@openglobus/js/shaders/geoObject.d.ts +1 -0
  41. package/lib/@openglobus/js/shaders/utils.d.ts +1 -1
  42. package/lib/@openglobus/js/ui/Checkbox.d.ts +31 -0
  43. package/lib/@openglobus/js/ui/Dialog.d.ts +3 -0
  44. package/lib/@openglobus/js/ui/Input.d.ts +32 -0
  45. package/lib/@openglobus/js/ui/View.d.ts +3 -1
  46. package/lib/@openglobus/js/utils/objParser.d.ts +44 -12
  47. package/lib/@openglobus/js/utils/shared.d.ts +22 -0
  48. package/lib/@openglobus/js/webgl/BaseFramebuffer.d.ts +0 -1
  49. package/lib/@openglobus/js/webgl/Framebuffer.d.ts +35 -8
  50. package/lib/@openglobus/js/webgl/Handler.d.ts +3 -0
  51. package/lib/@openglobus/og.css +1 -1
  52. package/lib/@openglobus/og.esm.js +1 -1
  53. package/lib/@openglobus/og.esm.js.map +1 -1
  54. package/lib/@openglobus/og.umd.js +1 -1
  55. package/lib/@openglobus/og.umd.js.map +1 -1
  56. package/lib/js/Globe.js +2 -1
  57. package/lib/js/Object3d.d.ts +20 -10
  58. package/lib/js/Object3d.js +124 -48
  59. package/lib/js/camera/Camera.d.ts +9 -0
  60. package/lib/js/camera/Camera.js +27 -1
  61. package/lib/js/camera/Frustum.d.ts +3 -0
  62. package/lib/js/camera/Frustum.js +7 -0
  63. package/lib/js/control/Atmosphere.js +10 -6
  64. package/lib/js/control/CameraLock.d.ts +38 -0
  65. package/lib/js/control/CameraLock.js +216 -0
  66. package/lib/js/control/Control.js +1 -1
  67. package/lib/js/control/DebugInfo.js +13 -3
  68. package/lib/js/control/KeyboardNavigation.js +1 -1
  69. package/lib/js/control/ScaleControl.js +9 -3
  70. package/lib/js/control/SimpleNavigation.d.ts +27 -10
  71. package/lib/js/control/SimpleNavigation.js +148 -49
  72. package/lib/js/control/Sun.js +1 -1
  73. package/lib/js/control/elevationProfile/ElevationProfileScene.js +4 -4
  74. package/lib/js/control/geoObjectEditor/ArrowEntity.d.ts +15 -0
  75. package/lib/js/control/geoObjectEditor/ArrowEntity.js +59 -0
  76. package/lib/js/control/geoObjectEditor/AxisTrackEntity.d.ts +9 -0
  77. package/lib/js/control/geoObjectEditor/AxisTrackEntity.js +93 -0
  78. package/lib/js/control/geoObjectEditor/GeoObjectEditor.d.ts +13 -0
  79. package/lib/js/control/geoObjectEditor/GeoObjectEditor.js +30 -0
  80. package/lib/js/control/geoObjectEditor/GeoObjectEditorDialog.d.ts +69 -0
  81. package/lib/js/control/geoObjectEditor/GeoObjectEditorDialog.js +502 -0
  82. package/lib/js/control/geoObjectEditor/GeoObjectEditorScene.d.ts +78 -9
  83. package/lib/js/control/geoObjectEditor/GeoObjectEditorScene.js +487 -43
  84. package/lib/js/control/geoObjectEditor/MoveAxisEntity.d.ts +17 -0
  85. package/lib/js/control/geoObjectEditor/MoveAxisEntity.js +106 -0
  86. package/lib/js/control/geoObjectEditor/MovePlaneEntity.d.ts +7 -0
  87. package/lib/js/control/geoObjectEditor/MovePlaneEntity.js +34 -0
  88. package/lib/js/control/geoObjectEditor/RotateEntity.d.ts +9 -0
  89. package/lib/js/control/geoObjectEditor/RotateEntity.js +105 -0
  90. package/lib/js/control/geoObjectEditor/colors.d.ts +8 -0
  91. package/lib/js/control/geoObjectEditor/colors.js +8 -0
  92. package/lib/js/control/index.d.ts +2 -0
  93. package/lib/js/control/index.js +2 -0
  94. package/lib/js/control/timeline/TimelineControl.js +2 -0
  95. package/lib/js/entity/Entity.d.ts +278 -19
  96. package/lib/js/entity/Entity.js +483 -63
  97. package/lib/js/entity/EntityCollection.d.ts +8 -9
  98. package/lib/js/entity/EntityCollection.js +48 -45
  99. package/lib/js/entity/GeoObject.d.ts +141 -36
  100. package/lib/js/entity/GeoObject.js +153 -90
  101. package/lib/js/entity/GeoObjectHandler.d.ts +39 -63
  102. package/lib/js/entity/GeoObjectHandler.js +198 -295
  103. package/lib/js/entity/InstanceData.d.ts +76 -0
  104. package/lib/js/entity/InstanceData.js +344 -0
  105. package/lib/js/entity/Polyline.d.ts +19 -6
  106. package/lib/js/entity/Polyline.js +76 -36
  107. package/lib/js/entity/PolylineHandler.d.ts +7 -0
  108. package/lib/js/entity/PolylineHandler.js +26 -1
  109. package/lib/js/index.d.ts +2 -1
  110. package/lib/js/index.js +2 -1
  111. package/lib/js/layer/Bing.js +2 -2
  112. package/lib/js/layer/Vector.d.ts +4 -0
  113. package/lib/js/layer/Vector.js +16 -0
  114. package/lib/js/light/LightSource.d.ts +1 -139
  115. package/lib/js/light/LightSource.js +21 -227
  116. package/lib/js/math/Quat.d.ts +46 -33
  117. package/lib/js/math/Quat.js +91 -90
  118. package/lib/js/math/Ray.d.ts +10 -4
  119. package/lib/js/math/Ray.js +20 -4
  120. package/lib/js/math/Vec3.d.ts +15 -0
  121. package/lib/js/math/Vec3.js +30 -1
  122. package/lib/js/math.d.ts +2 -2
  123. package/lib/js/math.js +3 -3
  124. package/lib/js/quadTree/EntityCollectionNode.d.ts +2 -2
  125. package/lib/js/quadTree/EntityCollectionNode.js +8 -8
  126. package/lib/js/quadTree/Node.d.ts +1 -1
  127. package/lib/js/quadTree/Node.js +2 -2
  128. package/lib/js/quadTree/QuadTreeStrategy.js +1 -1
  129. package/lib/js/quadTree/earth/EarthEntityCollectionNodeLonLat.d.ts +1 -1
  130. package/lib/js/quadTree/earth/EarthEntityCollectionNodeLonLat.js +2 -2
  131. package/lib/js/quadTree/equi/EquiEntityCollectionNodeLonLat.d.ts +1 -1
  132. package/lib/js/quadTree/equi/EquiEntityCollectionNodeLonLat.js +2 -2
  133. package/lib/js/renderer/Renderer.d.ts +64 -44
  134. package/lib/js/renderer/Renderer.js +264 -263
  135. package/lib/js/renderer/RendererEvents.d.ts +1 -0
  136. package/lib/js/renderer/RendererEvents.js +2 -1
  137. package/lib/js/scene/Planet.d.ts +11 -7
  138. package/lib/js/scene/Planet.js +109 -87
  139. package/lib/js/scene/RenderNode.d.ts +10 -25
  140. package/lib/js/scene/RenderNode.js +70 -58
  141. package/lib/js/shaders/depth.js +2 -5
  142. package/lib/js/shaders/drawnode.d.ts +1 -0
  143. package/lib/js/shaders/drawnode.js +51 -52
  144. package/lib/js/shaders/geoObject.d.ts +1 -0
  145. package/lib/js/shaders/geoObject.js +154 -91
  146. package/lib/js/shaders/polyline.js +68 -51
  147. package/lib/js/shaders/utils.d.ts +1 -1
  148. package/lib/js/shaders/utils.js +11 -0
  149. package/lib/js/ui/Checkbox.d.ts +31 -0
  150. package/lib/js/ui/Checkbox.js +110 -0
  151. package/lib/js/ui/Color.js +2 -1
  152. package/lib/js/ui/Dialog.d.ts +3 -0
  153. package/lib/js/ui/Dialog.js +20 -0
  154. package/lib/js/ui/Input.d.ts +32 -0
  155. package/lib/js/ui/Input.js +107 -0
  156. package/lib/js/ui/View.d.ts +3 -1
  157. package/lib/js/ui/View.js +6 -0
  158. package/lib/js/utils/objParser.d.ts +44 -12
  159. package/lib/js/utils/objParser.js +241 -149
  160. package/lib/js/utils/shared.d.ts +22 -0
  161. package/lib/js/utils/shared.js +34 -0
  162. package/lib/js/webgl/BaseFramebuffer.d.ts +0 -1
  163. package/lib/js/webgl/Framebuffer.d.ts +35 -8
  164. package/lib/js/webgl/Framebuffer.js +136 -29
  165. package/lib/js/webgl/Handler.d.ts +3 -0
  166. package/lib/js/webgl/Handler.js +11 -1
  167. package/lib/js/webgl/Program.js +0 -8
  168. package/package.json +4 -2
@@ -1,17 +1,21 @@
1
1
  import * as shaders from "../shaders/geoObject";
2
- import { concatArrays, loadImage, makeArrayTyped, spliceArray } from "../utils/shared";
2
+ import { concatArrays, loadImage, spliceArray } from "../utils/shared";
3
+ import { Vec3 } from "../math/Vec3";
3
4
  import { Object3d } from "../Object3d";
4
- const VERTEX_BUFFER = 0;
5
- const POSITION_BUFFER = 1;
6
- const RGBA_BUFFER = 2;
7
- const NORMALS_BUFFER = 3;
8
- const INDEX_BUFFER = 4;
9
- const QROT_BUFFER = 5;
10
- const SIZE_BUFFER = 6;
11
- const PICKINGCOLOR_BUFFER = 7;
12
- const VISIBLE_BUFFER = 8;
13
- const TEXCOORD_BUFFER = 9;
14
- const TRANSLATE_BUFFER = 10;
5
+ import { InstanceData } from "./InstanceData";
6
+ //@todo: enums, i know...nah...
7
+ export const VERTEX_BUFFER = 0;
8
+ export const RTC_POSITION_BUFFER = 1;
9
+ export const RGBA_BUFFER = 2;
10
+ export const NORMALS_BUFFER = 3;
11
+ export const INDEX_BUFFER = 4;
12
+ export const QROT_BUFFER = 5;
13
+ export const SIZE_BUFFER = 6;
14
+ export const PICKINGCOLOR_BUFFER = 7;
15
+ export const VISIBLE_BUFFER = 8;
16
+ export const TEXCOORD_BUFFER = 9;
17
+ export const TRANSLATE_BUFFER = 10;
18
+ export const LOCALPOSITION_BUFFER = 11;
15
19
  function setParametersToArray(arr, index = 0, length = 0, itemSize = 1, ...params) {
16
20
  const currIndex = index * length;
17
21
  for (let i = currIndex, len = currIndex + length; i < len; i++) {
@@ -19,261 +23,72 @@ function setParametersToArray(arr, index = 0, length = 0, itemSize = 1, ...param
19
23
  }
20
24
  return arr;
21
25
  }
22
- // function setParametersToArrayArr(arr: number[] | TypedArray, index: number = 0, length: number = 0, itemSize: number = 1, paramsArr: number[]): number[] | TypedArray {
23
- // const currIndex = index * length;
24
- // for (let i = currIndex, len = currIndex + length; i < len; i++) {
25
- // arr[i] = paramsArr[i % itemSize];
26
- // }
27
- // return arr;
28
- // }
29
- class InstanceData {
30
- constructor(geoObjectHandler) {
31
- this.isFree = true;
32
- this._geoObjectHandler = geoObjectHandler;
33
- this.geoObjects = [];
34
- this.numInstances = 0;
35
- this._texture = null;
36
- this._textureSrc = null;
37
- this._sizeArr = [];
38
- this._translateArr = [];
39
- this._vertexArr = [];
40
- this._positionHighArr = [];
41
- this._positionLowArr = [];
42
- this._qRotArr = [];
43
- this._rgbaArr = [];
44
- this._normalsArr = [];
45
- this._indicesArr = [];
46
- this._pickingColorArr = [];
47
- this._visibleArr = [];
48
- this._texCoordArr = [];
49
- this._sizeBuffer = null;
50
- this._translateBuffer = null;
51
- this._vertexBuffer = null;
52
- this._positionHighBuffer = null;
53
- this._positionLowBuffer = null;
54
- this._qRotBuffer = null;
55
- this._rgbaBuffer = null;
56
- this._normalsBuffer = null;
57
- this._indicesBuffer = null;
58
- this._pickingColorBuffer = null;
59
- this._visibleBuffer = null;
60
- this._texCoordBuffer = null;
61
- this._buffersUpdateCallbacks = [];
62
- this._buffersUpdateCallbacks[PICKINGCOLOR_BUFFER] = this.createPickingColorBuffer;
63
- this._buffersUpdateCallbacks[POSITION_BUFFER] = this.createPositionBuffer;
64
- this._buffersUpdateCallbacks[NORMALS_BUFFER] = this.createNormalsBuffer;
65
- this._buffersUpdateCallbacks[RGBA_BUFFER] = this.createRgbaBuffer;
66
- this._buffersUpdateCallbacks[INDEX_BUFFER] = this.createIndicesBuffer;
67
- this._buffersUpdateCallbacks[VERTEX_BUFFER] = this.createVertexBuffer;
68
- this._buffersUpdateCallbacks[SIZE_BUFFER] = this.createSizeBuffer;
69
- this._buffersUpdateCallbacks[VISIBLE_BUFFER] = this.createVisibleBuffer;
70
- this._buffersUpdateCallbacks[TEXCOORD_BUFFER] = this.createTexCoordBuffer;
71
- this._buffersUpdateCallbacks[QROT_BUFFER] = this.createQRotBuffer;
72
- this._buffersUpdateCallbacks[TRANSLATE_BUFFER] = this.createTranslateBuffer;
73
- this._changedBuffers = new Array(this._buffersUpdateCallbacks.length);
74
- }
75
- createTexture(image) {
76
- if (this._geoObjectHandler && this._geoObjectHandler._planet) {
77
- this._texture = this._geoObjectHandler._planet.renderer.handler.createTextureDefault(image);
78
- }
79
- }
80
- clear() {
81
- this.numInstances = 0;
82
- this.geoObjects = [];
83
- this._sizeArr = [];
84
- this._translateArr = [];
85
- this._vertexArr = [];
86
- this._positionHighArr = [];
87
- this._positionLowArr = [];
88
- this._qRotArr = [];
89
- this._rgbaArr = [];
90
- this._normalsArr = [];
91
- this._indicesArr = [];
92
- this._pickingColorArr = [];
93
- this._visibleArr = [];
94
- this._texCoordArr = [];
95
- this._deleteBuffers();
96
- this.isFree = false;
97
- //this._geoObjectHandler = null;
98
- }
99
- _deleteBuffers() {
100
- if (this._geoObjectHandler && this._geoObjectHandler._planet && this._geoObjectHandler._planet.renderer) {
101
- let h = this._geoObjectHandler._planet.renderer.handler, gl = h.gl;
102
- h.deleteTexture(this._texture);
103
- this._texture = null;
104
- gl.deleteBuffer(this._sizeBuffer);
105
- gl.deleteBuffer(this._translateBuffer);
106
- gl.deleteBuffer(this._vertexBuffer);
107
- gl.deleteBuffer(this._positionHighBuffer);
108
- gl.deleteBuffer(this._positionLowBuffer);
109
- gl.deleteBuffer(this._qRotBuffer);
110
- gl.deleteBuffer(this._rgbaBuffer);
111
- gl.deleteBuffer(this._normalsBuffer);
112
- gl.deleteBuffer(this._indicesBuffer);
113
- gl.deleteBuffer(this._pickingColorBuffer);
114
- gl.deleteBuffer(this._visibleBuffer);
115
- gl.deleteBuffer(this._texCoordBuffer);
116
- }
117
- this._sizeBuffer = null;
118
- this._translateBuffer = null;
119
- this._vertexBuffer = null;
120
- this._positionHighBuffer = null;
121
- this._positionLowBuffer = null;
122
- this._qRotBuffer = null;
123
- this._rgbaBuffer = null;
124
- this._normalsBuffer = null;
125
- this._indicesBuffer = null;
126
- this._pickingColorBuffer = null;
127
- this._visibleBuffer = null;
128
- this._texCoordBuffer = null;
129
- }
130
- createVertexBuffer() {
131
- const h = this._geoObjectHandler._planet.renderer.handler;
132
- h.gl.deleteBuffer(this._vertexBuffer);
133
- this._vertexArr = makeArrayTyped(this._vertexArr);
134
- this._vertexBuffer = h.createArrayBuffer(this._vertexArr, 3, this._vertexArr.length / 3);
135
- }
136
- createVisibleBuffer() {
137
- const h = this._geoObjectHandler._planet.renderer.handler, numItems = this._visibleArr.length;
138
- if (!this._visibleBuffer || this._visibleBuffer.numItems !== numItems) {
139
- h.gl.deleteBuffer(this._visibleBuffer);
140
- this._visibleBuffer = h.createStreamArrayBuffer(1, numItems);
141
- }
142
- this._visibleArr = makeArrayTyped(this._visibleArr);
143
- h.setStreamArrayBuffer(this._visibleBuffer, this._visibleArr);
144
- }
145
- createSizeBuffer() {
146
- let h = this._geoObjectHandler._planet.renderer.handler, numItems = this._sizeArr.length / 3;
147
- if (!this._sizeBuffer || this._sizeBuffer.numItems !== numItems) {
148
- h.gl.deleteBuffer(this._sizeBuffer);
149
- this._sizeBuffer = h.createStreamArrayBuffer(3, numItems);
150
- }
151
- this._sizeArr = makeArrayTyped(this._sizeArr);
152
- h.setStreamArrayBuffer(this._sizeBuffer, this._sizeArr);
153
- }
154
- createTranslateBuffer() {
155
- let h = this._geoObjectHandler._planet.renderer.handler, numItems = this._translateArr.length / 3;
156
- if (!this._translateBuffer || this._translateBuffer.numItems !== numItems) {
157
- h.gl.deleteBuffer(this._translateBuffer);
158
- this._translateBuffer = h.createStreamArrayBuffer(3, numItems);
159
- }
160
- this._translateArr = makeArrayTyped(this._translateArr);
161
- h.setStreamArrayBuffer(this._translateBuffer, this._translateArr);
162
- }
163
- createTexCoordBuffer() {
164
- const h = this._geoObjectHandler._planet.renderer.handler;
165
- h.gl.deleteBuffer(this._texCoordBuffer);
166
- this._texCoordArr = makeArrayTyped(this._texCoordArr);
167
- this._texCoordBuffer = h.createArrayBuffer(this._texCoordArr, 2, this._texCoordArr.length / 2);
168
- }
169
- createPositionBuffer() {
170
- let h = this._geoObjectHandler._planet.renderer.handler, numItems = this._positionHighArr.length / 3;
171
- if (!this._positionHighBuffer || this._positionHighBuffer.numItems !== numItems) {
172
- h.gl.deleteBuffer(this._positionHighBuffer);
173
- h.gl.deleteBuffer(this._positionLowBuffer);
174
- this._positionHighBuffer = h.createStreamArrayBuffer(3, numItems);
175
- this._positionLowBuffer = h.createStreamArrayBuffer(3, numItems);
176
- }
177
- this._positionHighArr = makeArrayTyped(this._positionHighArr);
178
- this._positionLowArr = makeArrayTyped(this._positionLowArr);
179
- h.setStreamArrayBuffer(this._positionHighBuffer, this._positionHighArr);
180
- h.setStreamArrayBuffer(this._positionLowBuffer, this._positionLowArr);
181
- }
182
- createRgbaBuffer() {
183
- let h = this._geoObjectHandler._planet.renderer.handler, numItems = this._rgbaArr.length / 4;
184
- if (!this._rgbaBuffer || this._rgbaBuffer.numItems !== numItems) {
185
- h.gl.deleteBuffer(this._rgbaBuffer);
186
- this._rgbaBuffer = h.createStreamArrayBuffer(4, numItems);
187
- }
188
- this._rgbaArr = makeArrayTyped(this._rgbaArr);
189
- h.setStreamArrayBuffer(this._rgbaBuffer, this._rgbaArr);
190
- }
191
- createQRotBuffer() {
192
- let h = this._geoObjectHandler._planet.renderer.handler, numItems = this._qRotArr.length / 4;
193
- if (!this._qRotBuffer || this._qRotBuffer.numItems !== numItems) {
194
- h.gl.deleteBuffer(this._qRotBuffer);
195
- this._qRotBuffer = h.createStreamArrayBuffer(4, numItems);
196
- }
197
- this._qRotArr = makeArrayTyped(this._qRotArr);
198
- h.setStreamArrayBuffer(this._qRotBuffer, this._qRotArr);
199
- }
200
- createNormalsBuffer() {
201
- const h = this._geoObjectHandler._planet.renderer.handler;
202
- h.gl.deleteBuffer(this._normalsBuffer);
203
- this._normalsArr = makeArrayTyped(this._normalsArr);
204
- this._normalsBuffer = h.createArrayBuffer(this._normalsArr, 3, this._normalsArr.length / 3);
205
- }
206
- createIndicesBuffer() {
207
- const h = this._geoObjectHandler._planet.renderer.handler;
208
- h.gl.deleteBuffer(this._indicesBuffer);
209
- this._indicesArr = makeArrayTyped(this._indicesArr, Uint32Array);
210
- this._indicesBuffer = h.createElementArrayBuffer(this._indicesArr, 1, this._indicesArr.length);
211
- }
212
- createPickingColorBuffer() {
213
- const h = this._geoObjectHandler._planet.renderer.handler;
214
- h.gl.deleteBuffer(this._pickingColorBuffer);
215
- this._pickingColorArr = makeArrayTyped(this._pickingColorArr);
216
- this._pickingColorBuffer = h.createArrayBuffer(this._pickingColorArr, 3, this._pickingColorArr.length / 3);
217
- }
218
- refresh() {
219
- let i = this._changedBuffers.length;
220
- while (i--) {
221
- this._changedBuffers[i] = true;
222
- }
223
- }
224
- update() {
225
- if (this._geoObjectHandler._planet) {
226
- let i = this._changedBuffers.length;
227
- while (i--) {
228
- if (this._changedBuffers[i]) {
229
- this._buffersUpdateCallbacks[i].call(this);
230
- this._changedBuffers[i] = false;
231
- }
232
- }
233
- this.isFree = true;
234
- }
235
- }
236
- }
237
- class GeoObjectHandler {
26
+ export class GeoObjectHandler {
238
27
  constructor(entityCollection) {
239
28
  this.__id = GeoObjectHandler.__counter__++;
240
29
  this.pickingEnabled = true;
241
30
  this._entityCollection = entityCollection;
242
- this._planet = null;
31
+ this._renderNode = null;
32
+ this._renderer = null;
243
33
  this._geoObjects = [];
244
34
  this._instanceDataMap = new Map();
245
35
  this._instanceDataMapValues = [];
246
36
  this._dataTagUpdateQueue = [];
37
+ this._relativeCenter = new Vec3();
38
+ this._rtcEyePositionHigh = new Float32Array([0, 0, 0]);
39
+ this._rtcEyePositionLow = new Float32Array([0, 0, 0]);
247
40
  }
248
41
  initProgram() {
249
- if (this._planet && this._planet.renderer) {
250
- if (!this._planet.renderer.handler.programs.geo_object) {
251
- this._planet.renderer.handler.addProgram(shaders.geo_object());
42
+ if (this._renderer) {
43
+ if (!this._renderer.handler.programs.geo_object) {
44
+ this._renderer.handler.addProgram(shaders.geo_object());
252
45
  }
253
- if (!this._planet.renderer.handler.programs.geo_object_picking) {
254
- this._planet.renderer.handler.addProgram(shaders.geo_object_picking());
46
+ if (!this._renderer.handler.programs.geo_object_picking) {
47
+ this._renderer.handler.addProgram(shaders.geo_object_picking());
48
+ }
49
+ if (!this._renderer.handler.programs.geo_object_depth) {
50
+ this._renderer.handler.addProgram(shaders.geo_object_depth());
255
51
  }
256
52
  }
257
53
  }
258
54
  setRenderNode(renderNode) {
259
- this._planet = renderNode;
55
+ this._renderNode = renderNode;
56
+ this._renderer = renderNode.renderer;
260
57
  this.initProgram();
261
58
  //
262
59
  // in case of lazy initialization loading data here
263
60
  for (let i = 0; i < this._instanceDataMapValues.length; i++) {
264
- this._loadDataTagTexture(this._instanceDataMapValues[i]);
61
+ this._loadColorTexture(this._instanceDataMapValues[i]);
62
+ this._loadNormalTexture(this._instanceDataMapValues[i]);
63
+ this._loadMetallicRoughnessTexture(this._instanceDataMapValues[i]);
265
64
  }
266
65
  for (let i = 0; i < this._geoObjects.length; i++) {
267
66
  this._geoObjects[i].updateRotation();
268
67
  }
269
68
  this.update();
270
69
  }
271
- setTextureTag(src, tag) {
70
+ setColorTextureTag(src, tag) {
71
+ const tagData = this._instanceDataMap.get(tag);
72
+ if (tagData) {
73
+ tagData._colorTextureSrc = src;
74
+ this._instanceDataMap.set(tag, tagData);
75
+ this._loadColorTexture(tagData);
76
+ }
77
+ }
78
+ setNormalTextureTag(src, tag) {
272
79
  const tagData = this._instanceDataMap.get(tag);
273
80
  if (tagData) {
274
- tagData._textureSrc = src;
81
+ tagData._normalTextureSrc = src;
275
82
  this._instanceDataMap.set(tag, tagData);
276
- this._loadDataTagTexture(tagData);
83
+ this._loadNormalTexture(tagData);
84
+ }
85
+ }
86
+ setMetallicRoughnessTextureTag(src, tag) {
87
+ const tagData = this._instanceDataMap.get(tag);
88
+ if (tagData) {
89
+ tagData._metallicRoughnessTextureSrc = src;
90
+ this._instanceDataMap.set(tag, tagData);
91
+ this._loadMetallicRoughnessTexture(tagData);
277
92
  }
278
93
  }
279
94
  setObjectSrc(src, tag) {
@@ -306,8 +121,12 @@ class GeoObjectHandler {
306
121
  tagData._texCoordArr = object.texCoords;
307
122
  tagData._changedBuffers[TEXCOORD_BUFFER] = true;
308
123
  }
309
- tagData._textureSrc = object.src;
310
- this._loadDataTagTexture(tagData);
124
+ tagData._colorTextureSrc = object.colorTexture;
125
+ tagData._normalTextureSrc = object.normalTexture;
126
+ tagData._metallicRoughnessTexture = object.metallicRoughnessTexture;
127
+ this._loadColorTexture(tagData);
128
+ this._loadNormalTexture(tagData);
129
+ this._loadMetallicRoughnessTexture(tagData);
311
130
  this._updateTag(tagData);
312
131
  this._instanceDataMapValues = Array.from(this._instanceDataMap.values());
313
132
  }
@@ -325,20 +144,28 @@ class GeoObjectHandler {
325
144
  tagData._normalsArr = geoObject.normals;
326
145
  tagData._indicesArr = geoObject.indices;
327
146
  tagData._texCoordArr = geoObject.texCoords;
328
- tagData._textureSrc = geoObject.object3d.src;
329
- this._loadDataTagTexture(tagData);
147
+ tagData._colorTextureSrc = geoObject.object3d.colorTexture;
148
+ tagData._normalTextureSrc = geoObject.object3d.normalTexture;
149
+ tagData._metallicRoughnessTextureSrc = geoObject.object3d.metallicRoughnessTexture;
150
+ tagData.setMaterialParams(geoObject.object3d.ambient, geoObject.object3d.diffuse, geoObject.object3d.specular, geoObject.object3d.shininess);
151
+ this._loadColorTexture(tagData);
152
+ this._loadNormalTexture(tagData);
153
+ this._loadMetallicRoughnessTexture(tagData);
330
154
  }
331
155
  geoObject._tagDataIndex = tagData.numInstances++;
332
156
  geoObject._tagData = tagData;
333
157
  tagData.geoObjects.push(geoObject);
334
158
  let itemSize = 3;
335
159
  tagData._visibleArr = concatArrays(tagData._visibleArr, setParametersToArray([], 0, 1, 1, geoObject.getVisibility() ? 1 : 0));
336
- let x = geoObject._positionHigh.x, y = geoObject._positionHigh.y, z = geoObject._positionHigh.z, w;
337
- tagData._positionHighArr = concatArrays(tagData._positionHighArr, setParametersToArray([], 0, itemSize, itemSize, x, y, z));
338
- x = geoObject._positionLow.x;
339
- y = geoObject._positionLow.y;
340
- z = geoObject._positionLow.z;
341
- tagData._positionLowArr = concatArrays(tagData._positionLowArr, setParametersToArray([], 0, itemSize, itemSize, x, y, z));
160
+ //
161
+ // Global coordinates
162
+ this.getRTCPosition(geoObject.getPosition(), geoObject._rtcPositionHigh, geoObject._rtcPositionLow);
163
+ let x = geoObject._rtcPositionHigh.x, y = geoObject._rtcPositionHigh.y, z = geoObject._rtcPositionHigh.z, w;
164
+ tagData._rtcPositionHighArr = concatArrays(tagData._rtcPositionHighArr, setParametersToArray([], 0, itemSize, itemSize, x, y, z));
165
+ x = geoObject._rtcPositionLow.x;
166
+ y = geoObject._rtcPositionLow.y;
167
+ z = geoObject._rtcPositionLow.z;
168
+ tagData._rtcPositionLowArr = concatArrays(tagData._rtcPositionLowArr, setParametersToArray([], 0, itemSize, itemSize, x, y, z));
342
169
  x = geoObject._entity._pickingColor.x / 255;
343
170
  y = geoObject._entity._pickingColor.y / 255;
344
171
  z = geoObject._entity._pickingColor.z / 255;
@@ -365,27 +192,61 @@ class GeoObjectHandler {
365
192
  y = translate.y;
366
193
  z = translate.z;
367
194
  tagData._translateArr = concatArrays(tagData._translateArr, setParametersToArray([], 0, itemSize, itemSize, x, y, z));
368
- }
369
- _displayPASS() {
370
- let r = this._planet.renderer, sh = r.handler.programs.geo_object, p = sh._program, u = p.uniforms, a = p.attributes, gl = r.handler.gl, ec = this._entityCollection;
371
- sh.activate();
372
- //gl.disable(gl.CULL_FACE);
373
- //
374
- // Could be in VAO
375
- //
195
+ let localPosition = geoObject.getLocalPosition();
196
+ x = localPosition.x;
197
+ y = localPosition.y;
198
+ z = localPosition.z;
199
+ tagData._localPositionArr = concatArrays(tagData._localPositionArr, setParametersToArray([], 0, itemSize, itemSize, x, y, z));
200
+ }
201
+ //
202
+ // Could be in VAO
203
+ //
204
+ _bindCommon() {
205
+ let r = this._renderer, sh = r.handler.programs.geo_object, p = sh._program, u = p.uniforms, gl = r.handler.gl, ec = this._entityCollection;
376
206
  gl.uniform3fv(u.uScaleByDistance, ec.scaleByDistance);
377
207
  gl.uniform1f(u.useLighting, ec._useLighting);
378
208
  gl.uniform3fv(u.eyePositionHigh, r.activeCamera.eyeHigh);
379
209
  gl.uniform3fv(u.eyePositionLow, r.activeCamera.eyeLow);
210
+ gl.uniform3fv(u.rtcEyePositionHigh, this._rtcEyePositionHigh);
211
+ gl.uniform3fv(u.rtcEyePositionLow, this._rtcEyePositionLow);
212
+ gl.uniformMatrix4fv(u.projectionMatrix, false, r.activeCamera.getProjectionMatrix());
213
+ gl.uniformMatrix4fv(u.viewMatrix, false, r.activeCamera.getViewMatrix());
214
+ //
215
+ // Global sun position
216
+ gl.uniform3fv(u.sunPosition, this._renderNode._lightPosition);
217
+ }
218
+ _displayOpaquePASS() {
219
+ let r = this._renderer, sh = r.handler.programs.geo_object, p = sh._program;
220
+ sh.activate();
221
+ this._bindCommon();
222
+ for (let i = 0; i < this._instanceDataMapValues.length; i++) {
223
+ let instanceData = this._instanceDataMapValues[i];
224
+ instanceData.drawOpaque(p);
225
+ }
226
+ }
227
+ _displayTransparentPASS() {
228
+ let r = this._renderer, sh = r.handler.programs.geo_object, p = sh._program;
229
+ sh.activate();
230
+ //gl.disable(gl.CULL_FACE);
231
+ this._bindCommon();
232
+ for (let i = 0; i < this._instanceDataMapValues.length; i++) {
233
+ this._instanceDataMapValues[i].drawTransparent(p);
234
+ }
235
+ }
236
+ _depthPASS() {
237
+ let r = this._renderer, sh = r.handler.programs.geo_object_depth, p = sh._program, u = p.uniforms, a = p.attributes, gl = r.handler.gl, ec = this._entityCollection;
238
+ let cam = r.activeCamera;
239
+ sh.activate();
240
+ gl.uniform3fv(u.uScaleByDistance, ec.scaleByDistance);
241
+ gl.uniform3fv(u.rtcEyePositionHigh, this._rtcEyePositionHigh);
242
+ gl.uniform3fv(u.rtcEyePositionLow, this._rtcEyePositionLow);
380
243
  gl.uniformMatrix4fv(u.projectionMatrix, false, r.activeCamera.getProjectionMatrix());
381
244
  gl.uniformMatrix4fv(u.viewMatrix, false, r.activeCamera.getViewMatrix());
382
- gl.uniform3fv(u.lightsPositions, this._planet._lightsPositions);
383
- gl.uniform3fv(u.lightsParamsv, this._planet._lightsParamsv);
384
- gl.uniform1fv(u.lightsParamsf, this._planet._lightsParamsf);
245
+ gl.uniform1f(u.frustumPickingColor, cam.frustumColorIndex);
385
246
  for (let i = 0; i < this._instanceDataMapValues.length; i++) {
386
247
  let tagData = this._instanceDataMapValues[i];
387
248
  //
388
- // Instance individual data
249
+ // Instance individual data
389
250
  //
390
251
  gl.bindBuffer(gl.ARRAY_BUFFER, tagData._qRotBuffer);
391
252
  gl.vertexAttribPointer(a.qRot, tagData._qRotBuffer.itemSize, gl.FLOAT, false, 0, 0);
@@ -393,44 +254,40 @@ class GeoObjectHandler {
393
254
  gl.vertexAttribPointer(a.aScale, tagData._sizeBuffer.itemSize, gl.FLOAT, false, 0, 0);
394
255
  gl.bindBuffer(gl.ARRAY_BUFFER, tagData._translateBuffer);
395
256
  gl.vertexAttribPointer(a.aTranslate, tagData._translateBuffer.itemSize, gl.FLOAT, false, 0, 0);
396
- gl.bindBuffer(gl.ARRAY_BUFFER, tagData._rgbaBuffer);
397
- gl.vertexAttribPointer(a.aColor, tagData._rgbaBuffer.itemSize, gl.FLOAT, false, 0, 0);
257
+ gl.bindBuffer(gl.ARRAY_BUFFER, tagData._localPositionBuffer);
258
+ gl.vertexAttribPointer(a.aLocalPosition, tagData._localPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);
259
+ gl.bindBuffer(gl.ARRAY_BUFFER, tagData._rtcPositionHighBuffer);
260
+ gl.vertexAttribPointer(a.aRTCPositionHigh, tagData._rtcPositionHighBuffer.itemSize, gl.FLOAT, false, 0, 0);
261
+ gl.bindBuffer(gl.ARRAY_BUFFER, tagData._rtcPositionLowBuffer);
262
+ gl.vertexAttribPointer(a.aRTCPositionLow, tagData._rtcPositionLowBuffer.itemSize, gl.FLOAT, false, 0, 0);
398
263
  gl.bindBuffer(gl.ARRAY_BUFFER, tagData._visibleBuffer);
399
264
  gl.vertexAttribPointer(a.aDispose, tagData._visibleBuffer.itemSize, gl.FLOAT, false, 0, 0);
400
- gl.uniform1f(u.uUseTexture, tagData._texture ? 1 : 0);
401
265
  //
402
266
  // Instance common data(could be in VAO)
403
267
  //
404
- gl.bindBuffer(gl.ARRAY_BUFFER, tagData._positionHighBuffer);
405
- gl.vertexAttribPointer(a.aPositionHigh, tagData._positionHighBuffer.itemSize, gl.FLOAT, false, 0, 0);
406
- gl.bindBuffer(gl.ARRAY_BUFFER, tagData._positionLowBuffer);
407
- gl.vertexAttribPointer(a.aPositionLow, tagData._positionLowBuffer.itemSize, gl.FLOAT, false, 0, 0);
408
- gl.bindBuffer(gl.ARRAY_BUFFER, tagData._normalsBuffer);
409
- gl.vertexAttribPointer(a.aVertexNormal, tagData._normalsBuffer.itemSize, gl.FLOAT, false, 0, 0);
410
268
  gl.bindBuffer(gl.ARRAY_BUFFER, tagData._vertexBuffer);
411
269
  gl.vertexAttribPointer(a.aVertexPosition, tagData._vertexBuffer.itemSize, gl.FLOAT, false, 0, 0);
412
- gl.activeTexture(gl.TEXTURE0);
413
- gl.bindTexture(gl.TEXTURE_2D, (tagData._texture || r.handler.defaultTexture));
414
- gl.uniform1i(u.uTexture, 0);
415
- gl.bindBuffer(gl.ARRAY_BUFFER, tagData._texCoordBuffer);
416
- gl.vertexAttribPointer(a.aTexCoord, tagData._texCoordBuffer.itemSize, gl.FLOAT, false, 0, 0);
417
270
  gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, tagData._indicesBuffer);
418
271
  p.drawElementsInstanced(gl.TRIANGLES, tagData._indicesBuffer.numItems, gl.UNSIGNED_INT, 0, tagData.numInstances);
419
272
  }
420
273
  }
274
+ drawDepth() {
275
+ if (this._geoObjects.length) {
276
+ this._depthPASS();
277
+ }
278
+ }
421
279
  drawPicking() {
422
280
  if (this._geoObjects.length && this.pickingEnabled) {
423
- this.update();
424
281
  this._pickingPASS();
425
282
  }
426
283
  }
427
284
  _pickingPASS() {
428
- let r = this._planet.renderer, sh = r.handler.programs.geo_object_picking, p = sh._program, u = p.uniforms, a = p.attributes, gl = r.handler.gl, ec = this._entityCollection;
285
+ let r = this._renderer, sh = r.handler.programs.geo_object_picking, p = sh._program, u = p.uniforms, a = p.attributes, gl = r.handler.gl, ec = this._entityCollection;
429
286
  sh.activate();
430
287
  gl.uniform3fv(u.uScaleByDistance, ec.scaleByDistance);
431
288
  gl.uniform3fv(u.pickingScale, ec.pickingScale);
432
- gl.uniform3fv(u.eyePositionHigh, r.activeCamera.eyeHigh);
433
- gl.uniform3fv(u.eyePositionLow, r.activeCamera.eyeLow);
289
+ gl.uniform3fv(u.rtcEyePositionHigh, this._rtcEyePositionHigh);
290
+ gl.uniform3fv(u.rtcEyePositionLow, this._rtcEyePositionLow);
434
291
  gl.uniformMatrix4fv(u.projectionMatrix, false, r.activeCamera.getProjectionMatrix());
435
292
  gl.uniformMatrix4fv(u.viewMatrix, false, r.activeCamera.getViewMatrix());
436
293
  for (let i = 0; i < this._instanceDataMapValues.length; i++) {
@@ -444,12 +301,14 @@ class GeoObjectHandler {
444
301
  gl.vertexAttribPointer(a.aScale, tagData._sizeBuffer.itemSize, gl.FLOAT, false, 0, 0);
445
302
  gl.bindBuffer(gl.ARRAY_BUFFER, tagData._translateBuffer);
446
303
  gl.vertexAttribPointer(a.aTranslate, tagData._translateBuffer.itemSize, gl.FLOAT, false, 0, 0);
304
+ gl.bindBuffer(gl.ARRAY_BUFFER, tagData._localPositionBuffer);
305
+ gl.vertexAttribPointer(a.aLocalPosition, tagData._localPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);
447
306
  gl.bindBuffer(gl.ARRAY_BUFFER, tagData._pickingColorBuffer);
448
307
  gl.vertexAttribPointer(a.aPickingColor, tagData._pickingColorBuffer.itemSize, gl.FLOAT, false, 0, 0);
449
- gl.bindBuffer(gl.ARRAY_BUFFER, tagData._positionHighBuffer);
450
- gl.vertexAttribPointer(a.aPositionHigh, tagData._positionHighBuffer.itemSize, gl.FLOAT, false, 0, 0);
451
- gl.bindBuffer(gl.ARRAY_BUFFER, tagData._positionLowBuffer);
452
- gl.vertexAttribPointer(a.aPositionLow, tagData._positionLowBuffer.itemSize, gl.FLOAT, false, 0, 0);
308
+ gl.bindBuffer(gl.ARRAY_BUFFER, tagData._rtcPositionHighBuffer);
309
+ gl.vertexAttribPointer(a.aRTCPositionHigh, tagData._rtcPositionHighBuffer.itemSize, gl.FLOAT, false, 0, 0);
310
+ gl.bindBuffer(gl.ARRAY_BUFFER, tagData._rtcPositionLowBuffer);
311
+ gl.vertexAttribPointer(a.aRTCPositionLow, tagData._rtcPositionLowBuffer.itemSize, gl.FLOAT, false, 0, 0);
453
312
  gl.bindBuffer(gl.ARRAY_BUFFER, tagData._visibleBuffer);
454
313
  gl.vertexAttribPointer(a.aDispose, tagData._visibleBuffer.itemSize, gl.FLOAT, false, 0, 0);
455
314
  //
@@ -461,10 +320,22 @@ class GeoObjectHandler {
461
320
  p.drawElementsInstanced(gl.TRIANGLES, tagData._indicesBuffer.numItems, gl.UNSIGNED_INT, 0, tagData.numInstances);
462
321
  }
463
322
  }
464
- async _loadDataTagTexture(tagData) {
465
- if (this._planet && tagData._textureSrc) {
466
- const image = await loadImage(tagData._textureSrc);
467
- tagData.createTexture(image);
323
+ async _loadColorTexture(tagData) {
324
+ if (this._renderer && tagData._colorTextureSrc) {
325
+ const image = await loadImage(tagData._colorTextureSrc);
326
+ tagData.createColorTexture(image);
327
+ }
328
+ }
329
+ async _loadNormalTexture(tagData) {
330
+ if (this._renderer && tagData._normalTextureSrc) {
331
+ const image = await loadImage(tagData._normalTextureSrc);
332
+ tagData.createNormalTexture(image);
333
+ }
334
+ }
335
+ async _loadMetallicRoughnessTexture(tagData) {
336
+ if (this._renderer && tagData._metallicRoughnessTextureSrc) {
337
+ const image = await loadImage(tagData._metallicRoughnessTextureSrc);
338
+ tagData.createMetallicRoughnessTexture(image);
468
339
  }
469
340
  }
470
341
  setQRotArr(tagData, tagDataIndex, qRot) {
@@ -477,10 +348,10 @@ class GeoObjectHandler {
477
348
  tagData._changedBuffers[VISIBLE_BUFFER] = true;
478
349
  this._updateTag(tagData);
479
350
  }
480
- setPositionArr(tagData, tagDataIndex, positionHigh, positionLow) {
481
- setParametersToArray(tagData._positionHighArr, tagDataIndex, 3, 3, positionHigh.x, positionHigh.y, positionHigh.z);
482
- setParametersToArray(tagData._positionLowArr, tagDataIndex, 3, 3, positionLow.x, positionLow.y, positionLow.z);
483
- tagData._changedBuffers[POSITION_BUFFER] = true;
351
+ setRTCPositionArr(tagData, tagDataIndex, rtcPositionHigh, rtcPositionLow) {
352
+ setParametersToArray(tagData._rtcPositionHighArr, tagDataIndex, 3, 3, rtcPositionHigh.x, rtcPositionHigh.y, rtcPositionHigh.z);
353
+ setParametersToArray(tagData._rtcPositionLowArr, tagDataIndex, 3, 3, rtcPositionLow.x, rtcPositionLow.y, rtcPositionLow.z);
354
+ tagData._changedBuffers[RTC_POSITION_BUFFER] = true;
484
355
  this._updateTag(tagData);
485
356
  }
486
357
  setRgbaArr(tagData, tagDataIndex, rgba) {
@@ -508,6 +379,11 @@ class GeoObjectHandler {
508
379
  tagData._changedBuffers[TRANSLATE_BUFFER] = true;
509
380
  this._updateTag(tagData);
510
381
  }
382
+ setLocalPositionArr(tagData, tagDataIndex, localPosition) {
383
+ setParametersToArray(tagData._localPositionArr, tagDataIndex, 3, 3, localPosition.x, localPosition.y, localPosition.z);
384
+ tagData._changedBuffers[LOCALPOSITION_BUFFER] = true;
385
+ this._updateTag(tagData);
386
+ }
511
387
  _updateTag(dataTag) {
512
388
  if (dataTag.isFree) {
513
389
  dataTag.isFree = false;
@@ -540,10 +416,37 @@ class GeoObjectHandler {
540
416
  clear() {
541
417
  this._removeAll();
542
418
  }
419
+ getRTCPosition(pos, rtcPositionHigh, rtcPositionLow) {
420
+ let rtcPosition = pos.sub(this._relativeCenter);
421
+ Vec3.doubleToTwoFloats(rtcPosition, rtcPositionHigh, rtcPositionLow);
422
+ }
423
+ setRelativeCenter(c) {
424
+ this._relativeCenter.copy(c);
425
+ for (let i = 0; i < this._instanceDataMapValues.length; i++) {
426
+ let instanceData = this._instanceDataMapValues[i];
427
+ let geoObjects = instanceData.geoObjects;
428
+ for (let j = 0; j < geoObjects.length; j++) {
429
+ geoObjects[j].updateRTCPosition();
430
+ }
431
+ }
432
+ }
433
+ _updateRTCEyePosition() {
434
+ let r = this._renderer;
435
+ if (r.activeCamera.isFirstPass) {
436
+ let rtcEyePosition = r.activeCamera.eye.sub(this._relativeCenter);
437
+ Vec3.doubleToTwoFloat32Array(rtcEyePosition, this._rtcEyePositionHigh, this._rtcEyePositionLow);
438
+ }
439
+ }
543
440
  draw() {
544
441
  if (this._geoObjects.length) {
442
+ this._updateRTCEyePosition();
545
443
  this.update();
546
- this._displayPASS();
444
+ this._displayOpaquePASS();
445
+ }
446
+ }
447
+ drawTransparent() {
448
+ if (this._geoObjects.length) {
449
+ this._displayTransparentPASS();
547
450
  }
548
451
  }
549
452
  add(geoObject) {
@@ -591,12 +494,13 @@ class GeoObjectHandler {
591
494
  gi._tagDataIndex = gi._tagDataIndex - 1;
592
495
  }
593
496
  tagData._rgbaArr = spliceArray(tagData._rgbaArr, tdi * 4, 4);
594
- tagData._positionHighArr = spliceArray(tagData._positionHighArr, tdi * 3, 3);
595
- tagData._positionLowArr = spliceArray(tagData._positionLowArr, tdi * 3, 3);
497
+ tagData._rtcPositionHighArr = spliceArray(tagData._rtcPositionHighArr, tdi * 3, 3);
498
+ tagData._rtcPositionLowArr = spliceArray(tagData._rtcPositionLowArr, tdi * 3, 3);
596
499
  tagData._qRotArr = spliceArray(tagData._qRotArr, tdi * 4, 4);
597
500
  tagData._pickingColorArr = spliceArray(tagData._pickingColorArr, tdi * 3, 3);
598
501
  tagData._sizeArr = spliceArray(tagData._sizeArr, tdi * 3, 3);
599
502
  tagData._translateArr = spliceArray(tagData._translateArr, tdi * 3, 3);
503
+ tagData._localPositionArr = spliceArray(tagData._localPositionArr, tdi * 3, 3);
600
504
  tagData._visibleArr = spliceArray(tagData._visibleArr, tdi, 1);
601
505
  geoObject._handlerIndex = -1;
602
506
  geoObject._handler = null;
@@ -609,4 +513,3 @@ class GeoObjectHandler {
609
513
  }
610
514
  }
611
515
  GeoObjectHandler.__counter__ = 0;
612
- export { GeoObjectHandler, InstanceData };