@openglobus/og 0.13.12 → 0.14.1
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/README.md +1 -4
- package/css/og.css +1 -1
- package/dist/@openglobus/og.css +1 -1
- package/dist/@openglobus/og.esm.js +2 -2
- package/dist/@openglobus/og.esm.js.map +1 -1
- package/dist/@openglobus/og.umd.js +2 -2
- package/dist/@openglobus/og.umd.js.map +1 -1
- package/package.json +2 -2
- package/src/og/Globe.js +14 -4
- package/src/og/camera/Camera.js +7 -7
- package/src/og/camera/PlanetCamera.js +1 -1
- package/src/og/control/LayerSwitcher.js +48 -31
- package/src/og/control/MouseNavigation.js +2 -2
- package/src/og/control/ScaleControl.js +30 -10
- package/src/og/control/SimpleSkyBackground.js +184 -0
- package/src/og/control/Sun.js +3 -2
- package/src/og/ellipsoid/Ellipsoid.js +119 -92
- package/src/og/ellipsoid/wgs84.js +13 -13
- package/src/og/entity/Entity.js +3 -3
- package/src/og/entity/GeometryHandler.js +1341 -1337
- package/src/og/entity/Polyline.js +0 -16
- package/src/og/entity/Ray.js +0 -10
- package/src/og/entity/RayHandler.js +3 -44
- package/src/og/entity/Strip.js +1 -6
- package/src/og/index.js +106 -95
- package/src/og/layer/GeoVideo.js +1 -0
- package/src/og/layer/Layer.js +62 -3
- package/src/og/layer/XYZ.js +4 -3
- package/src/og/math/Line3.js +140 -139
- package/src/og/math/Plane.js +118 -117
- package/src/og/math/Ray.js +242 -239
- package/src/og/math/Vec3.js +56 -37
- package/src/og/math/Vec4.js +3 -4
- package/src/og/math.js +21 -21
- package/src/og/quadTree/EarthQuadTreeStrategy.js +29 -0
- package/src/og/quadTree/MarsQuadTreeStrategy.js +27 -0
- package/src/og/quadTree/Node.js +55 -218
- package/src/og/quadTree/QuadTreeStrategy.js +93 -0
- package/src/og/quadTree/Wgs84QuadTreeStrategy.js +26 -0
- package/src/og/renderer/Renderer.js +13 -12
- package/src/og/renderer/RendererEvents.js +1065 -1065
- package/src/og/scene/Planet.js +84 -273
- package/src/og/segment/Segment.js +18 -25
- package/src/og/segment/SegmentLonLat.js +34 -31
- package/src/og/segment/SegmentLonLatWgs84.js +41 -0
- package/src/og/shaders/ray.js +13 -6
- package/src/og/shaders/toneMapping.js +5 -5
- package/src/og/terrain/GlobusTerrain.js +3 -2
- package/src/og/terrain/MapboxTerrain.js +231 -52
- package/src/og/utils/quadTreeType.js +11 -0
- package/src/og/utils/shared.js +942 -942
- package/src/og/webgl/Handler.js +22 -9
- package/types/Globe.d.ts +7 -0
- package/types/camera/Camera.d.ts +3 -3
- package/types/camera/PlanetCamera.d.ts +1 -1
- package/types/control/LayerSwitcher.d.ts +1 -1
- package/types/control/ScaleControl.d.ts +2 -1
- package/types/control/SimpleSkyBackground.d.ts +11 -0
- package/types/control/Sun.d.ts +2 -1
- package/types/ellipsoid/Ellipsoid.d.ts +3 -2
- package/types/entity/Ray.d.ts +0 -3
- package/types/entity/RayHandler.d.ts +0 -4
- package/types/index.d.ts +6 -1
- package/types/layer/Layer.d.ts +8 -0
- package/types/math/Vec3.d.ts +19 -16
- package/types/math/Vec4.d.ts +2 -3
- package/types/math.d.ts +20 -20
- package/types/quadTree/EarthQuadTreeStrategy.d.ts +3 -0
- package/types/quadTree/MarsQuadTreeStrategy.d.ts +3 -0
- package/types/quadTree/Node.d.ts +0 -1
- package/types/quadTree/QuadTreeStrategy.d.ts +21 -0
- package/types/quadTree/Wgs84QuadTreeStrategy.d.ts +3 -0
- package/types/renderer/Renderer.d.ts +1 -1
- package/types/scene/Planet.d.ts +6 -24
- package/types/segment/Segment.d.ts +4 -4
- package/types/segment/SegmentLonLat.d.ts +6 -2
- package/types/segment/SegmentLonLatWgs84.d.ts +4 -0
- package/types/terrain/MapboxTerrain.d.ts +2 -1
- package/types/utils/quadTreeType.d.ts +8 -0
- package/types/webgl/Handler.d.ts +4 -1
package/src/og/math/Ray.js
CHANGED
|
@@ -1,239 +1,242 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module og/math/Ray
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
"use strict";
|
|
6
|
-
|
|
7
|
-
import * as math from "../math.js";
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
*
|
|
13
|
-
* @
|
|
14
|
-
* @param {Vec3}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
*
|
|
21
|
-
* @
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
*
|
|
28
|
-
* @
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
*
|
|
56
|
-
* @
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
*
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
*
|
|
79
|
-
* @
|
|
80
|
-
* @param {Vec3}
|
|
81
|
-
* @
|
|
82
|
-
*
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
var
|
|
90
|
-
var
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
// ray
|
|
101
|
-
return Ray.
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
//
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
var
|
|
120
|
-
var
|
|
121
|
-
var
|
|
122
|
-
var
|
|
123
|
-
|
|
124
|
-
var
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
*
|
|
142
|
-
* @
|
|
143
|
-
* @param {Vec3}
|
|
144
|
-
* @
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
var
|
|
152
|
-
var
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
*
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
let
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
let
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
*
|
|
235
|
-
* @
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @module og/math/Ray
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
import * as math from "../math.js";
|
|
8
|
+
import { EPS10 } from "../math.js";
|
|
9
|
+
import { Vec3 } from "./Vec3.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Represents a ray that extends infinitely from the provided origin in the provided direction.
|
|
13
|
+
* @class
|
|
14
|
+
* @param {Vec3} origin - The origin of the ray.
|
|
15
|
+
* @param {Vec3} direction - The direction of the ray.
|
|
16
|
+
*/
|
|
17
|
+
export class Ray {
|
|
18
|
+
constructor(origin = Vec3.ZERO, direction = Vec3.ZERO) {
|
|
19
|
+
/**
|
|
20
|
+
* The origin of the ray.
|
|
21
|
+
* @public
|
|
22
|
+
* @type {Vec3}
|
|
23
|
+
*/
|
|
24
|
+
this.origin = origin || new Vec3();
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The direction of the ray.
|
|
28
|
+
* @public
|
|
29
|
+
* @type {Vec3}
|
|
30
|
+
*/
|
|
31
|
+
this.direction = direction || new Vec3();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** @const */
|
|
35
|
+
static get OUTSIDE() {
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** @const */
|
|
40
|
+
static get INSIDE() {
|
|
41
|
+
return 1;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** @const */
|
|
45
|
+
static get INPLANE() {
|
|
46
|
+
return 2;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** @const */
|
|
50
|
+
static get AWAY() {
|
|
51
|
+
return 3;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Sets a ray parameters.
|
|
56
|
+
* @public
|
|
57
|
+
* @param {Vec3} origin - The origin of the ray.
|
|
58
|
+
* @param {Vec3} direction - The direction of the ray.
|
|
59
|
+
* @returns {Ray}
|
|
60
|
+
*/
|
|
61
|
+
set(origin, direction) {
|
|
62
|
+
this.origin = origin;
|
|
63
|
+
this.direction = direction;
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Computes the point along the ray on the distance.
|
|
69
|
+
* @public
|
|
70
|
+
* @param {number} distance - Point distance.
|
|
71
|
+
* @returns {Vec3}
|
|
72
|
+
*/
|
|
73
|
+
getPoint(distance) {
|
|
74
|
+
return Vec3.add(this.origin, this.direction.scaleTo(distance));
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Returns ray hit a triange result.
|
|
79
|
+
* @public
|
|
80
|
+
* @param {Vec3} v0 - First triangle corner coordinate.
|
|
81
|
+
* @param {Vec3} v1 - Second triangle corner coordinate.
|
|
82
|
+
* @param {Vec3} v2 - Third triangle corner coordinate.
|
|
83
|
+
* @param {Vec3} res - Hit point object pointer that stores hit result.
|
|
84
|
+
* @returns {number} - Hit code, could 0 - og.Ray.OUTSIDE, 1 - og.Ray.INSIDE,
|
|
85
|
+
* 2 - og.Ray.INPLANE and 3 - og.Ray.AWAY(ray goes away from triangle).
|
|
86
|
+
*/
|
|
87
|
+
hitTriangle(v0, v1, v2, res) {
|
|
88
|
+
var u = v1.sub(v0);
|
|
89
|
+
var v = v2.sub(v0);
|
|
90
|
+
var n = u.cross(v);
|
|
91
|
+
|
|
92
|
+
var w0 = this.origin.sub(v0);
|
|
93
|
+
var a = -n.dot(w0);
|
|
94
|
+
var b = n.dot(this.direction);
|
|
95
|
+
|
|
96
|
+
// ray is parallel to triangle plane
|
|
97
|
+
if (Math.abs(b) < EPS10) {
|
|
98
|
+
if (a === 0) {
|
|
99
|
+
res.copy(this.origin);
|
|
100
|
+
// ray lies in triangle plane
|
|
101
|
+
return Ray.INPLANE;
|
|
102
|
+
} else {
|
|
103
|
+
// ray disjoint from plane
|
|
104
|
+
return Ray.OUTSIDE;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
var r = a / b;
|
|
109
|
+
|
|
110
|
+
// intersect point of ray and plane
|
|
111
|
+
res.copy(this.origin.add(this.direction.scaleTo(r)));
|
|
112
|
+
|
|
113
|
+
// ray goes away from triangle
|
|
114
|
+
if (r < 0.0) {
|
|
115
|
+
return Ray.AWAY;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// is res point inside the triangle?
|
|
119
|
+
var uu = u.dot(u);
|
|
120
|
+
var uv = u.dot(v);
|
|
121
|
+
var vv = v.dot(v);
|
|
122
|
+
var w = res.sub(v0);
|
|
123
|
+
var wu = w.dot(u);
|
|
124
|
+
var wv = w.dot(v);
|
|
125
|
+
var D = uv * uv - uu * vv;
|
|
126
|
+
|
|
127
|
+
var s = (uv * wv - vv * wu) / D;
|
|
128
|
+
if (s < 0.0 || s > 1.0) {
|
|
129
|
+
return Ray.OUTSIDE;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
var t = (uv * wu - uu * wv) / D;
|
|
133
|
+
if (t < 0.0 || s + t > 1.0) {
|
|
134
|
+
return Ray.OUTSIDE;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return Ray.INSIDE;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Gets a ray hit a plane result. If the ray cross the plane returns 1 - og.Ray.INSIDE otherwise returns 0 - og.Ray.OUTSIDE.
|
|
142
|
+
* @public
|
|
143
|
+
* @param {Vec3} v0 - First plane point.
|
|
144
|
+
* @param {Vec3} v1 - Second plane point.
|
|
145
|
+
* @param {Vec3} v2 - Third plane point.
|
|
146
|
+
* @param {Vec3} res - Hit point object pointer that stores hit result.
|
|
147
|
+
* @returns {number}
|
|
148
|
+
*/
|
|
149
|
+
hitPlane(v0, v1, v2, res) {
|
|
150
|
+
var u = Vec3.sub(v1, v0);
|
|
151
|
+
var v = Vec3.sub(v2, v0);
|
|
152
|
+
var n = u.cross(v);
|
|
153
|
+
|
|
154
|
+
var w0 = Vec3.sub(this.origin, v0);
|
|
155
|
+
var a = -n.dot(w0);
|
|
156
|
+
var b = n.dot(this.direction);
|
|
157
|
+
|
|
158
|
+
// ray is parallel to the plane
|
|
159
|
+
if (Math.abs(b) < EPS10) {
|
|
160
|
+
if (a === 0) {
|
|
161
|
+
return Ray.OUTSIDE;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
var r = a / b;
|
|
166
|
+
|
|
167
|
+
if (r < 0) {
|
|
168
|
+
return Ray.OUTSIDE;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
var d = this.direction.scaleTo(r);
|
|
172
|
+
|
|
173
|
+
// intersect point of ray and plane
|
|
174
|
+
res.x = this.origin.x + d.x;
|
|
175
|
+
res.y = this.origin.y + d.y;
|
|
176
|
+
res.z = this.origin.z + d.z;
|
|
177
|
+
|
|
178
|
+
return Ray.INSIDE;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Returns a ray hit sphere coordiante. If there isn't hit returns null.
|
|
183
|
+
* @public
|
|
184
|
+
* @param {Sphere} sphere - Sphere object.
|
|
185
|
+
* @returns {Vec3}
|
|
186
|
+
*/
|
|
187
|
+
hitSphere(sphere) {
|
|
188
|
+
var r = sphere.radius,
|
|
189
|
+
c = sphere.center,
|
|
190
|
+
o = this.origin,
|
|
191
|
+
d = this.direction;
|
|
192
|
+
var vpc = Vec3.sub(c, o);
|
|
193
|
+
if (vpc.dot(d) < 0) {
|
|
194
|
+
var l = vpc.length();
|
|
195
|
+
if (l > r) {
|
|
196
|
+
return null;
|
|
197
|
+
} else if (l === r) {
|
|
198
|
+
return o.clone();
|
|
199
|
+
}
|
|
200
|
+
let pc = c.projToRay(o, vpc);
|
|
201
|
+
var lc = Vec3.sub(pc, c).length();
|
|
202
|
+
let dist = Math.sqrt(r * r - lc * lc);
|
|
203
|
+
let di1 = dist - Vec3.sub(pc, o).length();
|
|
204
|
+
let intersection = Vec3.add(o, d.scaleTo(di1));
|
|
205
|
+
return intersection;
|
|
206
|
+
} else {
|
|
207
|
+
let pc = c.projToRay(o, d);
|
|
208
|
+
var cpcl = Vec3.sub(c, pc).length();
|
|
209
|
+
if (cpcl > sphere.radius) {
|
|
210
|
+
return null;
|
|
211
|
+
} else {
|
|
212
|
+
let dist = Math.sqrt(r * r - cpcl * cpcl);
|
|
213
|
+
let di1;
|
|
214
|
+
pc.subA(o);
|
|
215
|
+
if (vpc.length() > r) {
|
|
216
|
+
di1 = pc.length() - dist;
|
|
217
|
+
} else {
|
|
218
|
+
di1 = pc.length() + dist;
|
|
219
|
+
}
|
|
220
|
+
let intersection = Vec3.add(o, d.scaleTo(di1));
|
|
221
|
+
return intersection;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
hitBox(box) {
|
|
227
|
+
//
|
|
228
|
+
// TODO
|
|
229
|
+
//
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Ray object creator.
|
|
235
|
+
* @function
|
|
236
|
+
* @param {Vec3} origin - The origin of the ray.
|
|
237
|
+
* @param {Vec3} direction - The direction of the ray.
|
|
238
|
+
* @returns {Ray}
|
|
239
|
+
*/
|
|
240
|
+
export function ray(origin, direction) {
|
|
241
|
+
return new Ray(origin, direction);
|
|
242
|
+
}
|