@openglobus/og 0.14.10 → 0.15.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/css/og.css +378 -275
- 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 +18 -17
- package/src/og/Clock.js +218 -194
- package/src/og/Globe.js +5 -5
- package/src/og/Object3d.js +104 -145
- package/src/og/camera/Camera.js +31 -27
- package/src/og/camera/PlanetCamera.js +22 -14
- package/src/og/cons.js +107 -107
- package/src/og/control/Atmosphere.js +396 -0
- package/src/og/control/CompassButton.js +11 -18
- package/src/og/control/Control.js +197 -188
- package/src/og/control/GeoImageDragControl.js +84 -66
- package/src/og/control/LayerSwitcher.js +56 -138
- package/src/og/control/Lighting.js +314 -186
- package/src/og/control/MouseNavigation.js +2 -2
- package/src/og/control/RulerSwitcher.js +24 -19
- package/src/og/control/ScaleControl.js +30 -10
- package/src/og/control/SimpleSkyBackground.js +210 -0
- package/src/og/control/Sun.js +3 -1
- package/src/og/control/ZoomControl.js +30 -42
- package/src/og/control/index.js +6 -0
- package/src/og/control/ruler/RulerScene.js +5 -23
- package/src/og/control/selection/Selection.js +99 -0
- package/src/og/control/selection/SelectionScene.js +350 -0
- package/src/og/control/timeline/TimelineControl.js +99 -0
- package/src/og/control/timeline/TimelineModel.js +133 -0
- package/src/og/control/timeline/TimelineView.js +449 -0
- package/src/og/control/timeline/timelineUtils.js +132 -0
- package/src/og/ellipsoid/Ellipsoid.js +120 -93
- package/src/og/ellipsoid/wgs84.js +13 -13
- package/src/og/entity/Entity.js +36 -9
- package/src/og/entity/EntityCollection.js +0 -2
- package/src/og/entity/GeoObject.js +72 -56
- package/src/og/entity/GeoObjectHandler.js +487 -656
- 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 +13 -7
- package/src/og/input/input.js +3 -1
- package/src/og/layer/CanvasTiles.js +39 -34
- package/src/og/layer/Layer.js +69 -9
- package/src/og/layer/Material.js +1 -8
- package/src/og/layer/WMS.js +16 -5
- package/src/og/light/LightSource.js +2 -0
- 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/Node.js +5 -4
- package/src/og/quadTree/index.js +12 -0
- package/src/og/renderer/Renderer.js +64 -37
- package/src/og/renderer/RendererEvents.js +1071 -1065
- package/src/og/scene/Planet.js +354 -174
- package/src/og/scene/RenderNode.js +27 -12
- package/src/og/segment/Segment.js +0 -5
- package/src/og/shaders/atmos.js +332 -0
- package/src/og/shaders/drawnode.js +475 -109
- package/src/og/shaders/geoObject.js +96 -51
- package/src/og/shaders/polyline.js +212 -17
- package/src/og/shaders/ray.js +13 -6
- package/src/og/shaders/toneMapping.js +5 -5
- package/src/og/shaders/utils.js +88 -0
- package/src/og/terrain/GlobusTerrain.js +5 -4
- package/src/og/terrain/MapboxTerrain.js +231 -52
- package/src/og/ui/Button.js +106 -0
- package/src/og/ui/ButtonGroup.js +57 -0
- package/src/og/ui/Dialog.js +242 -0
- package/src/og/ui/Slider.js +144 -0
- package/src/og/ui/ToggleButton.js +51 -0
- package/src/og/{control → ui}/UIhelpers.js +11 -2
- package/src/og/ui/View.js +190 -0
- package/src/og/utils/shared.js +960 -942
- package/src/og/webgl/Framebuffer.js +308 -387
- package/src/og/webgl/Handler.js +90 -30
- package/src/og/webgl/Multisample.js +8 -0
- package/types/Clock.d.ts +7 -2
- package/types/Object3d.d.ts +14 -3
- package/types/camera/Camera.d.ts +18 -17
- package/types/camera/PlanetCamera.d.ts +3 -1
- package/types/control/Atmosphere.d.ts +15 -0
- package/types/control/CompassButton.d.ts +1 -2
- package/types/control/GeoImageDragControl.d.ts +7 -1
- package/types/control/LayerSwitcher.d.ts +5 -6
- package/types/control/Lighting.d.ts +32 -7
- package/types/control/ScaleControl.d.ts +2 -1
- package/types/control/SimpleSkyBackground.d.ts +15 -0
- package/types/control/ZoomControl.d.ts +0 -1
- package/types/control/index.d.ts +4 -1
- package/types/control/ruler/RulerScene.d.ts +0 -1
- package/types/control/selection/Selection.d.ts +49 -0
- package/types/control/selection/SelectionScene.d.ts +34 -0
- package/types/ellipsoid/Ellipsoid.d.ts +3 -2
- package/types/entity/Entity.d.ts +8 -0
- package/types/entity/GeoObject.d.ts +28 -22
- package/types/entity/GeoObjectHandler.d.ts +16 -56
- package/types/entity/Ray.d.ts +0 -3
- package/types/entity/RayHandler.d.ts +0 -4
- package/types/index.d.ts +9 -6
- package/types/input/input.d.ts +2 -0
- package/types/layer/CanvasTiles.d.ts +1 -0
- package/types/layer/Layer.d.ts +9 -0
- package/types/layer/WMS.d.ts +7 -3
- package/types/math/Plane.d.ts +1 -1
- 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/index.d.ts +10 -0
- package/types/renderer/Renderer.d.ts +11 -37
- package/types/scene/Planet.d.ts +27 -1
- package/types/scene/RenderNode.d.ts +2 -1
- package/types/segment/Segment.d.ts +1 -1
- package/types/shaders/atmos.d.ts +4 -0
- package/types/shaders/drawnode.d.ts +3 -2
- package/types/shaders/utils.d.ts +1 -0
- package/types/terrain/GlobusTerrain.d.ts +1 -1
- package/types/terrain/MapboxTerrain.d.ts +2 -1
- package/types/ui/Button.d.ts +21 -0
- package/types/ui/Dialog.d.ts +41 -0
- package/types/ui/Slider.d.ts +30 -0
- package/types/ui/ToggleButton.d.ts +10 -0
- package/types/{control → ui}/UIhelpers.d.ts +1 -1
- package/types/ui/View.d.ts +32 -0
- package/types/utils/shared.d.ts +16 -14
- package/types/webgl/Framebuffer.d.ts +2 -5
- package/types/webgl/Handler.d.ts +15 -10
- package/types/webgl/Multisample.d.ts +2 -0
- package/src/og/ajax.js +0 -204
- package/src/og/entity/Object3d.js +0 -504
- package/src/og/utils/quadTreeType.js +0 -11
- package/types/ajax.d.ts +0 -24
- package/types/utils/quadTreeType.d.ts +0 -8
|
@@ -11,20 +11,24 @@ export const geo_object = () =>
|
|
|
11
11
|
uniforms: {
|
|
12
12
|
viewMatrix: "mat4",
|
|
13
13
|
projectionMatrix: "mat4",
|
|
14
|
-
normalMatrix: "mat3",
|
|
15
14
|
|
|
16
15
|
uScaleByDistance: "vec3",
|
|
17
16
|
|
|
18
17
|
eyePositionHigh: "vec3",
|
|
19
18
|
eyePositionLow: "vec3",
|
|
20
19
|
|
|
21
|
-
lightsPositions: "
|
|
20
|
+
lightsPositions: "vec3",
|
|
22
21
|
lightsParamsv: "vec3",
|
|
23
|
-
lightsParamsf: "float"
|
|
22
|
+
lightsParamsf: "float",
|
|
23
|
+
|
|
24
|
+
uTexture: "sampler2d",
|
|
25
|
+
uUseTexture: "float"
|
|
24
26
|
},
|
|
25
27
|
attributes: {
|
|
26
28
|
aVertexPosition: "vec3",
|
|
27
29
|
aVertexNormal: "vec3",
|
|
30
|
+
aTexCoord: "vec2",
|
|
31
|
+
|
|
28
32
|
aPositionHigh: { type: "vec3", divisor: 1 },
|
|
29
33
|
aPositionLow: { type: "vec3", divisor: 1 },
|
|
30
34
|
aDirection: { type: "vec3", divisor: 1 },
|
|
@@ -33,8 +37,9 @@ export const geo_object = () =>
|
|
|
33
37
|
aScale: { type: "float", divisor: 1 },
|
|
34
38
|
aDispose: { type: "float", divisor: 1 }
|
|
35
39
|
},
|
|
36
|
-
vertexShader:
|
|
37
|
-
|
|
40
|
+
vertexShader:
|
|
41
|
+
`precision highp float;
|
|
42
|
+
|
|
38
43
|
attribute vec3 aVertexPosition;
|
|
39
44
|
attribute vec3 aVertexNormal;
|
|
40
45
|
attribute vec3 aPositionHigh;
|
|
@@ -44,34 +49,47 @@ export const geo_object = () =>
|
|
|
44
49
|
attribute vec4 aColor;
|
|
45
50
|
attribute float aScale;
|
|
46
51
|
attribute float aDispose;
|
|
52
|
+
attribute float aUseTexture;
|
|
53
|
+
attribute vec2 aTexCoord;
|
|
47
54
|
|
|
55
|
+
uniform float uUseTexture;
|
|
48
56
|
uniform vec3 uScaleByDistance;
|
|
49
57
|
uniform mat4 projectionMatrix;
|
|
50
58
|
uniform mat4 viewMatrix;
|
|
51
|
-
uniform mat3 normalMatrix;
|
|
52
59
|
|
|
53
60
|
uniform vec3 eyePositionHigh;
|
|
54
61
|
uniform vec3 eyePositionLow;
|
|
55
62
|
|
|
63
|
+
varying vec3 cameraPosition;
|
|
56
64
|
varying vec3 vNormal;
|
|
57
|
-
varying
|
|
65
|
+
varying vec3 v_vertex;
|
|
58
66
|
varying vec4 vColor;
|
|
59
67
|
varying float vDispose;
|
|
68
|
+
varying float vUseTexture;
|
|
69
|
+
varying vec2 vTexCoords;
|
|
60
70
|
|
|
61
|
-
const float
|
|
62
|
-
|
|
71
|
+
const float PI = 3.141592653589793;
|
|
72
|
+
|
|
73
|
+
const float RADIANS = PI / 180.0;
|
|
74
|
+
|
|
63
75
|
void main(void) {
|
|
64
76
|
|
|
65
|
-
|
|
77
|
+
if (aDispose == 0.0) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
vUseTexture = uUseTexture;
|
|
66
82
|
vColor = aColor;
|
|
67
|
-
|
|
83
|
+
vTexCoords = aTexCoord;
|
|
84
|
+
|
|
85
|
+
float roll = aPitchRoll.y;
|
|
68
86
|
mat3 rotZ = mat3(
|
|
69
87
|
vec3(cos(roll), sin(roll), 0.0),
|
|
70
88
|
vec3(-sin(roll), cos(roll), 0.0),
|
|
71
89
|
vec3(0.0, 0.0, 1.0)
|
|
72
90
|
);
|
|
73
91
|
|
|
74
|
-
float pitch = aPitchRoll.x
|
|
92
|
+
float pitch = aPitchRoll.x;
|
|
75
93
|
mat3 rotX = mat3(
|
|
76
94
|
vec3(1.0, 0.0, 0.0),
|
|
77
95
|
vec3(0.0, cos(pitch), sin(pitch)),
|
|
@@ -79,53 +97,71 @@ export const geo_object = () =>
|
|
|
79
97
|
);
|
|
80
98
|
|
|
81
99
|
vec3 position = aPositionHigh + aPositionLow;
|
|
100
|
+
cameraPosition = eyePositionHigh + eyePositionLow;
|
|
82
101
|
vec3 r = cross(normalize(-position), aDirection);
|
|
83
|
-
mat3 modelMatrix = mat3(r, normalize(position), -aDirection) * rotX * rotZ;
|
|
102
|
+
mat3 modelMatrix = mat3(r, normalize(position), -aDirection) * rotX * rotZ;
|
|
84
103
|
|
|
85
|
-
|
|
86
|
-
float lookLength = length(look);
|
|
87
|
-
float scd = aScale * (1.0 - smoothstep(uScaleByDistance[0], uScaleByDistance[1], lookLength)) * (1.0 - step(uScaleByDistance[2], lookLength));
|
|
88
|
-
vNormal = normalMatrix * modelMatrix * aVertexNormal;
|
|
89
|
-
|
|
90
|
-
vec3 highDiff = aPositionHigh - eyePositionHigh;
|
|
91
|
-
vec3 lowDiff = aPositionLow + modelMatrix * (aVertexPosition * scd) - eyePositionLow;
|
|
104
|
+
float dist = length(cameraPosition);
|
|
92
105
|
|
|
93
106
|
mat4 viewMatrixRTE = viewMatrix;
|
|
94
107
|
viewMatrixRTE[3] = vec4(0.0, 0.0, 0.0, 1.0);
|
|
95
108
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
109
|
+
vec3 highDiff = aPositionHigh - eyePositionHigh;
|
|
110
|
+
vec3 lowDiff = aPositionLow - eyePositionLow;
|
|
111
|
+
|
|
112
|
+
vec3 look = cameraPosition - position;
|
|
113
|
+
float lookLength = length(look);
|
|
114
|
+
vNormal = modelMatrix * aVertexNormal;
|
|
115
|
+
|
|
116
|
+
// if(lookLength > uScaleByDistance[1])
|
|
117
|
+
// {
|
|
118
|
+
// scd = uScaleByDistance[1] / uScaleByDistance[0];
|
|
119
|
+
// }
|
|
120
|
+
// else if(lookLength > uScaleByDistance[0])
|
|
121
|
+
// {
|
|
122
|
+
// scd = lookLength / uScaleByDistance[0];
|
|
123
|
+
// }
|
|
124
|
+
// ... is the same math
|
|
125
|
+
float scd = uScaleByDistance[2] * clamp(lookLength, uScaleByDistance[0], uScaleByDistance[1]) / uScaleByDistance[0];
|
|
126
|
+
|
|
127
|
+
vec3 vert = modelMatrix * aVertexPosition * aScale * scd;
|
|
128
|
+
v_vertex = position + vert;
|
|
129
|
+
|
|
130
|
+
gl_Position = projectionMatrix * viewMatrixRTE * vec4(highDiff + lowDiff + vert, 1.0);
|
|
99
131
|
}`,
|
|
132
|
+
|
|
100
133
|
fragmentShader: `precision highp float;
|
|
101
134
|
|
|
102
|
-
varying vec4 vColor;
|
|
103
135
|
#define MAX_POINT_LIGHTS 1
|
|
104
136
|
|
|
105
|
-
uniform
|
|
137
|
+
uniform vec3 lightsPositions[MAX_POINT_LIGHTS];
|
|
106
138
|
uniform vec3 lightsParamsv[MAX_POINT_LIGHTS * 3];
|
|
107
|
-
uniform float lightsParamsf[MAX_POINT_LIGHTS];
|
|
139
|
+
uniform float lightsParamsf[MAX_POINT_LIGHTS];
|
|
140
|
+
uniform sampler2D uTexture;
|
|
108
141
|
|
|
142
|
+
varying vec3 cameraPosition;
|
|
143
|
+
varying vec3 v_vertex;
|
|
144
|
+
varying vec4 vColor;
|
|
109
145
|
varying vec3 vNormal;
|
|
110
|
-
varying
|
|
146
|
+
varying vec2 vTexCoords;
|
|
147
|
+
varying float vUseTexture;
|
|
111
148
|
|
|
112
|
-
void main(void) {
|
|
113
|
-
vec3
|
|
114
|
-
vec3 lightDirection;
|
|
115
|
-
vec3 normal;
|
|
116
|
-
vec3 eyeDirection;
|
|
117
|
-
vec3 reflectionDirection;
|
|
118
|
-
float specularLightWeighting;
|
|
119
|
-
float diffuseLightWeighting;
|
|
149
|
+
void main(void) {
|
|
150
|
+
vec3 normal = normalize(vNormal);
|
|
120
151
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
specularLightWeighting = pow(
|
|
126
|
-
diffuseLightWeighting = max(dot(normal,
|
|
127
|
-
lightWeighting = lightsParamsv[0] + lightsParamsv[1] * diffuseLightWeighting + lightsParamsv[2] * specularLightWeighting;
|
|
128
|
-
|
|
152
|
+
vec3 lightDir = normalize(lightsPositions[0]);
|
|
153
|
+
vec3 viewDir = normalize(cameraPosition - v_vertex);
|
|
154
|
+
vec3 reflectionDirection = reflect(-lightDir, normal);
|
|
155
|
+
float reflection = max( dot(reflectionDirection, viewDir), 0.0);
|
|
156
|
+
float specularLightWeighting = pow( reflection, lightsParamsf[0]);
|
|
157
|
+
float diffuseLightWeighting = max(dot(normal, lightDir), 0.0);
|
|
158
|
+
vec3 lightWeighting = lightsParamsv[0] + lightsParamsv[1] * diffuseLightWeighting + lightsParamsv[2] * specularLightWeighting;
|
|
159
|
+
vec4 tColor = texture2D(uTexture, vTexCoords);
|
|
160
|
+
if(vUseTexture > 0.0){
|
|
161
|
+
gl_FragColor = vec4(tColor.rgb * lightWeighting, tColor.a);
|
|
162
|
+
} else {
|
|
163
|
+
gl_FragColor = vec4(vColor.rgb * lightWeighting, vColor.a);
|
|
164
|
+
}
|
|
129
165
|
}`
|
|
130
166
|
});
|
|
131
167
|
|
|
@@ -178,7 +214,11 @@ export const geo_object_picking = () =>
|
|
|
178
214
|
|
|
179
215
|
void main(void) {
|
|
180
216
|
|
|
181
|
-
|
|
217
|
+
|
|
218
|
+
if (aDispose == 0.0) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
|
|
182
222
|
vColor = aPickingColor;
|
|
183
223
|
float roll = aPitchRoll.y * RADIANS;
|
|
184
224
|
mat3 rotZ = mat3(
|
|
@@ -198,17 +238,22 @@ export const geo_object_picking = () =>
|
|
|
198
238
|
vec3 r = cross(normalize(-position), aDirection);
|
|
199
239
|
mat3 modelMatrix = mat3(r, normalize(position), -aDirection) * rotX * rotZ; /*up=-cross(aDirection, r)*/
|
|
200
240
|
|
|
201
|
-
|
|
202
|
-
float lookLength = length(look);
|
|
203
|
-
float scd = aScale * pickingScale * (1.0 - smoothstep(uScaleByDistance[0], uScaleByDistance[1], lookLength)) * (1.0 - step(uScaleByDistance[2], lookLength));
|
|
204
|
-
|
|
205
|
-
vec3 highDiff = aPositionHigh - eyePositionHigh;
|
|
206
|
-
vec3 lowDiff = aPositionLow + modelMatrix * (aVertexPosition * scd) - eyePositionLow;
|
|
241
|
+
float dist = length(eyePositionHigh + eyePositionLow);
|
|
207
242
|
|
|
208
243
|
mat4 viewMatrixRTE = viewMatrix;
|
|
209
244
|
viewMatrixRTE[3] = vec4(0.0, 0.0, 0.0, 1.0);
|
|
210
245
|
|
|
211
|
-
|
|
246
|
+
vec3 highDiff = aPositionHigh - eyePositionHigh;
|
|
247
|
+
vec3 lowDiff = aPositionLow - eyePositionLow;
|
|
248
|
+
|
|
249
|
+
vec3 look = position - (eyePositionHigh + eyePositionLow);
|
|
250
|
+
float lookLength = length(look);
|
|
251
|
+
|
|
252
|
+
float scd = uScaleByDistance[2] * clamp(lookLength, uScaleByDistance[0], uScaleByDistance[1]) / uScaleByDistance[0];
|
|
253
|
+
|
|
254
|
+
vec4 pos = vec4((highDiff + lowDiff) + modelMatrix * aVertexPosition * aScale * pickingScale * scd, 1.0);
|
|
255
|
+
|
|
256
|
+
gl_Position = projectionMatrix * viewMatrixRTE * pos;
|
|
212
257
|
}`,
|
|
213
258
|
fragmentShader:
|
|
214
259
|
`precision highp float;
|
|
@@ -6,6 +6,188 @@
|
|
|
6
6
|
|
|
7
7
|
import { Program } from '../webgl/Program.js';
|
|
8
8
|
|
|
9
|
+
// export function polyline_screen() {
|
|
10
|
+
// return new Program("polyline_screen", {
|
|
11
|
+
// uniforms: {
|
|
12
|
+
// viewport: "vec2",
|
|
13
|
+
// proj: "mat4",
|
|
14
|
+
// view: "mat4",
|
|
15
|
+
// eyePositionHigh: "vec3",
|
|
16
|
+
// eyePositionLow: "vec3",
|
|
17
|
+
// uFloatParams: "vec2",
|
|
18
|
+
// thickness: "float",
|
|
19
|
+
// opacity: "float",
|
|
20
|
+
// depthOffset: "float"
|
|
21
|
+
// },
|
|
22
|
+
// attributes: {
|
|
23
|
+
// prevHigh: "vec3",
|
|
24
|
+
// currentHigh: "vec3",
|
|
25
|
+
// nextHigh: "vec3",
|
|
26
|
+
//
|
|
27
|
+
// prevLow: "vec3",
|
|
28
|
+
// currentLow: "vec3",
|
|
29
|
+
// nextLow: "vec3",
|
|
30
|
+
//
|
|
31
|
+
// order: "float",
|
|
32
|
+
//
|
|
33
|
+
// color: "vec4"
|
|
34
|
+
// },
|
|
35
|
+
//
|
|
36
|
+
// vertexShader:
|
|
37
|
+
// `precision highp float;
|
|
38
|
+
//
|
|
39
|
+
// attribute vec3 prevHigh;
|
|
40
|
+
// attribute vec3 currentHigh;
|
|
41
|
+
// attribute vec3 nextHigh;
|
|
42
|
+
//
|
|
43
|
+
// attribute vec3 prevLow;
|
|
44
|
+
// attribute vec3 currentLow;
|
|
45
|
+
// attribute vec3 nextLow;
|
|
46
|
+
//
|
|
47
|
+
// attribute float order;
|
|
48
|
+
//
|
|
49
|
+
// attribute vec4 color;
|
|
50
|
+
//
|
|
51
|
+
// uniform float thickness;
|
|
52
|
+
// uniform mat4 proj;
|
|
53
|
+
// uniform mat4 view;
|
|
54
|
+
// uniform vec2 viewport;
|
|
55
|
+
// uniform vec3 eyePositionHigh;
|
|
56
|
+
// uniform vec3 eyePositionLow;
|
|
57
|
+
// uniform float opacity;
|
|
58
|
+
// uniform float depthOffset;
|
|
59
|
+
//
|
|
60
|
+
// varying vec4 vColor;
|
|
61
|
+
// varying vec3 vPos;
|
|
62
|
+
// varying vec3 uCamPos;
|
|
63
|
+
//
|
|
64
|
+
// const float NEAR = -1.0;
|
|
65
|
+
//
|
|
66
|
+
// vec2 getIntersection(vec2 start1, vec2 end1, vec2 start2, vec2 end2){
|
|
67
|
+
// vec2 dir = end2 - start2;
|
|
68
|
+
// vec2 perp = vec2(-dir.y, dir.x);
|
|
69
|
+
// float d2 = dot(perp, start2);
|
|
70
|
+
// float seg = dot(perp, start1) - d2;
|
|
71
|
+
// float prl = seg - dot(perp, end1) + d2;
|
|
72
|
+
// if(prl > -1.0 && prl < 1.0){
|
|
73
|
+
// return start1;
|
|
74
|
+
// }
|
|
75
|
+
// float u = seg / prl;
|
|
76
|
+
// return start1 + u * (end1 - start1);
|
|
77
|
+
// }
|
|
78
|
+
//
|
|
79
|
+
// vec2 project(vec4 p){
|
|
80
|
+
// return (0.5 * p.xyz / p.w + 0.5).xy * viewport;
|
|
81
|
+
// }
|
|
82
|
+
//
|
|
83
|
+
// void main(){
|
|
84
|
+
//
|
|
85
|
+
// uCamPos = eyePositionHigh + eyePositionLow;
|
|
86
|
+
//
|
|
87
|
+
// vColor = vec4(color.rgb, color.a * opacity);
|
|
88
|
+
//
|
|
89
|
+
// vec3 current = currentHigh + currentLow;
|
|
90
|
+
//
|
|
91
|
+
// vPos = current;
|
|
92
|
+
//
|
|
93
|
+
// mat4 viewMatrixRTE = view;
|
|
94
|
+
// viewMatrixRTE[3] = vec4(0.0, 0.0, 0.0, 1.0);
|
|
95
|
+
//
|
|
96
|
+
// vec3 highDiff, lowDiff;
|
|
97
|
+
//
|
|
98
|
+
// highDiff = currentHigh - eyePositionHigh;
|
|
99
|
+
// lowDiff = currentLow - eyePositionLow;
|
|
100
|
+
// vec4 vCurrent = viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
|
|
101
|
+
//
|
|
102
|
+
// highDiff = prevHigh - eyePositionHigh;
|
|
103
|
+
// lowDiff = prevLow - eyePositionLow;
|
|
104
|
+
// vec4 vPrev = viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
|
|
105
|
+
//
|
|
106
|
+
// highDiff = nextHigh - eyePositionHigh;
|
|
107
|
+
// lowDiff = nextLow - eyePositionLow;
|
|
108
|
+
// vec4 vNext = viewMatrixRTE * vec4(highDiff + lowDiff, 1.0);
|
|
109
|
+
//
|
|
110
|
+
// /*Clip near plane, the point behind view plane*/
|
|
111
|
+
// if(vCurrent.z > NEAR) {
|
|
112
|
+
// if(vPrev.z < NEAR && abs(order) == 1.0){
|
|
113
|
+
// vCurrent = vPrev + (vCurrent - vPrev) * (NEAR - vPrev.z) / (vCurrent.z - vPrev.z);
|
|
114
|
+
// } else if(vNext.z < NEAR && abs(order) == 2.0){
|
|
115
|
+
// vCurrent = vNext + (vCurrent - vNext) * (NEAR - vNext.z) / (vCurrent.z - vNext.z);
|
|
116
|
+
// }
|
|
117
|
+
// }
|
|
118
|
+
//
|
|
119
|
+
// vec4 dCurrent = proj * vCurrent;
|
|
120
|
+
// vec2 _next = project(proj * vNext);
|
|
121
|
+
// vec2 _prev = project(proj * vPrev);
|
|
122
|
+
// vec2 _current = project(dCurrent);
|
|
123
|
+
//
|
|
124
|
+
// if(_prev == _current){
|
|
125
|
+
// if(_next == _current){
|
|
126
|
+
// _next = _current + vec2(1.0, 0.0);
|
|
127
|
+
// _prev = _current - _next;
|
|
128
|
+
// }else{
|
|
129
|
+
// _prev = _current + normalize(_current - _next);
|
|
130
|
+
// }
|
|
131
|
+
// }
|
|
132
|
+
//
|
|
133
|
+
// if(_next == _current){
|
|
134
|
+
// _next = _current + normalize(_current - _prev);
|
|
135
|
+
// }
|
|
136
|
+
//
|
|
137
|
+
// vec2 sNext = _next,
|
|
138
|
+
// sCurrent = _current,
|
|
139
|
+
// sPrev = _prev;
|
|
140
|
+
//
|
|
141
|
+
// vec2 dirNext = normalize(sNext - sCurrent);
|
|
142
|
+
// vec2 dirPrev = normalize(sPrev - sCurrent);
|
|
143
|
+
// float dotNP = dot(dirNext, dirPrev);
|
|
144
|
+
//
|
|
145
|
+
// vec2 normalNext = normalize(vec2(-dirNext.y, dirNext.x));
|
|
146
|
+
// vec2 normalPrev = normalize(vec2(dirPrev.y, -dirPrev.x));
|
|
147
|
+
//
|
|
148
|
+
// float d = thickness * sign(order);
|
|
149
|
+
//
|
|
150
|
+
// vec2 m;
|
|
151
|
+
// if(dotNP >= 0.99991){
|
|
152
|
+
// m = sCurrent - normalPrev * d;
|
|
153
|
+
// }else{
|
|
154
|
+
// m = getIntersection( sCurrent + normalPrev * d, sPrev + normalPrev * d,
|
|
155
|
+
// sCurrent + normalNext * d, sNext + normalNext * d );
|
|
156
|
+
//
|
|
157
|
+
// if( dotNP > 0.5 && dot(dirNext + dirPrev, m - sCurrent) < 0.0 ){
|
|
158
|
+
// float occw = order * sign(dirNext.x * dirPrev.y - dirNext.y * dirPrev.x);
|
|
159
|
+
// if(occw == -1.0){
|
|
160
|
+
// m = sCurrent + normalPrev * d;
|
|
161
|
+
// }else if(occw == 1.0){
|
|
162
|
+
// m = sCurrent + normalNext * d;
|
|
163
|
+
// }else if(occw == -2.0){
|
|
164
|
+
// m = sCurrent + normalNext * d;
|
|
165
|
+
// }else if(occw == 2.0){
|
|
166
|
+
// m = sCurrent + normalPrev * d;
|
|
167
|
+
// }
|
|
168
|
+
// }else if(distance(sCurrent, m) > min(distance(sCurrent, sNext), distance(sCurrent, sPrev))){
|
|
169
|
+
// m = sCurrent + normalNext * d;
|
|
170
|
+
// }
|
|
171
|
+
// }
|
|
172
|
+
//
|
|
173
|
+
// gl_Position = vec4((2.0 * m / viewport - 1.0) * dCurrent.w, dCurrent.z + depthOffset, dCurrent.w);
|
|
174
|
+
// }`,
|
|
175
|
+
//
|
|
176
|
+
// fragmentShader:
|
|
177
|
+
// `precision highp float;
|
|
178
|
+
// uniform vec2 uFloatParams;
|
|
179
|
+
// varying vec3 uCamPos;
|
|
180
|
+
// varying vec4 vColor;
|
|
181
|
+
// varying vec3 vPos;
|
|
182
|
+
// void main() {
|
|
183
|
+
// vec3 look = vPos - uCamPos;
|
|
184
|
+
// float lookLength = length(look);
|
|
185
|
+
// float a = vColor.a * step(lookLength, sqrt(dot(uCamPos,uCamPos) - uFloatParams[0]) + sqrt(dot(vPos,vPos) - uFloatParams[0]));
|
|
186
|
+
// gl_FragColor = vec4(vColor.rgb, a);
|
|
187
|
+
// }`
|
|
188
|
+
// });
|
|
189
|
+
// }
|
|
190
|
+
|
|
9
191
|
export function polyline_screen() {
|
|
10
192
|
return new Program("polyline_screen", {
|
|
11
193
|
uniforms: {
|
|
@@ -34,19 +216,21 @@ export function polyline_screen() {
|
|
|
34
216
|
},
|
|
35
217
|
|
|
36
218
|
vertexShader:
|
|
37
|
-
|
|
219
|
+
`#version 300 es
|
|
38
220
|
|
|
39
|
-
|
|
40
|
-
attribute vec3 currentHigh;
|
|
41
|
-
attribute vec3 nextHigh;
|
|
221
|
+
precision highp float;
|
|
42
222
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
223
|
+
in vec3 prevHigh;
|
|
224
|
+
in vec3 currentHigh;
|
|
225
|
+
in vec3 nextHigh;
|
|
226
|
+
|
|
227
|
+
in vec3 prevLow;
|
|
228
|
+
in vec3 currentLow;
|
|
229
|
+
in vec3 nextLow;
|
|
46
230
|
|
|
47
|
-
|
|
231
|
+
in float order;
|
|
48
232
|
|
|
49
|
-
|
|
233
|
+
in vec4 color;
|
|
50
234
|
|
|
51
235
|
uniform float thickness;
|
|
52
236
|
uniform mat4 proj;
|
|
@@ -57,9 +241,9 @@ export function polyline_screen() {
|
|
|
57
241
|
uniform float opacity;
|
|
58
242
|
uniform float depthOffset;
|
|
59
243
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
244
|
+
out vec4 vColor;
|
|
245
|
+
out vec3 vPos;
|
|
246
|
+
out vec3 uCamPos;
|
|
63
247
|
|
|
64
248
|
const float NEAR = -1.0;
|
|
65
249
|
|
|
@@ -174,16 +358,27 @@ export function polyline_screen() {
|
|
|
174
358
|
}`,
|
|
175
359
|
|
|
176
360
|
fragmentShader:
|
|
177
|
-
|
|
361
|
+
`#version 300 es
|
|
362
|
+
|
|
363
|
+
precision highp float;
|
|
364
|
+
|
|
178
365
|
uniform vec2 uFloatParams;
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
366
|
+
|
|
367
|
+
layout(location = 0) out vec4 diffuseColor;
|
|
368
|
+
layout(location = 1) out vec4 normalColor;
|
|
369
|
+
layout(location = 2) out vec4 distanceColor;
|
|
370
|
+
|
|
371
|
+
in vec3 uCamPos;
|
|
372
|
+
in vec4 vColor;
|
|
373
|
+
in vec3 vPos;
|
|
374
|
+
|
|
182
375
|
void main() {
|
|
183
376
|
vec3 look = vPos - uCamPos;
|
|
184
377
|
float lookLength = length(look);
|
|
185
378
|
float a = vColor.a * step(lookLength, sqrt(dot(uCamPos,uCamPos) - uFloatParams[0]) + sqrt(dot(vPos,vPos) - uFloatParams[0]));
|
|
186
|
-
|
|
379
|
+
diffuseColor = vec4(vColor.rgb, a);
|
|
380
|
+
normalColor = vec4(1.0);
|
|
381
|
+
distanceColor = vec4(1.0);
|
|
187
382
|
}`
|
|
188
383
|
});
|
|
189
384
|
}
|
package/src/og/shaders/ray.js
CHANGED
|
@@ -22,7 +22,6 @@ export function rayScreen() {
|
|
|
22
22
|
a_startPosLow: "vec3",
|
|
23
23
|
a_endPosHigh: "vec3",
|
|
24
24
|
a_endPosLow: "vec3",
|
|
25
|
-
a_length: "float",
|
|
26
25
|
a_thickness: "float",
|
|
27
26
|
a_rgba: "vec4"
|
|
28
27
|
},
|
|
@@ -34,7 +33,6 @@ export function rayScreen() {
|
|
|
34
33
|
attribute vec3 a_endPosHigh;
|
|
35
34
|
attribute vec3 a_endPosLow;
|
|
36
35
|
attribute float a_thickness;
|
|
37
|
-
attribute float a_length;
|
|
38
36
|
attribute vec4 a_rgba;
|
|
39
37
|
|
|
40
38
|
varying vec4 v_rgba;
|
|
@@ -53,8 +51,9 @@ export function rayScreen() {
|
|
|
53
51
|
vec3 camPos = eyePositionHigh + eyePositionLow;
|
|
54
52
|
|
|
55
53
|
vec3 startPos = a_startPosHigh + a_startPosLow;
|
|
54
|
+
float length = length((a_endPosHigh + a_endPosLow) - startPos);
|
|
56
55
|
vec3 direction = normalize((a_endPosHigh + a_endPosLow) - startPos);
|
|
57
|
-
vec3 vertPos = startPos + a_vertices.y * direction *
|
|
56
|
+
vec3 vertPos = startPos + a_vertices.y * direction * length;
|
|
58
57
|
|
|
59
58
|
vec3 look = vertPos - camPos;
|
|
60
59
|
vec3 up = normalize(direction);
|
|
@@ -62,10 +61,18 @@ export function rayScreen() {
|
|
|
62
61
|
|
|
63
62
|
float dist = dot(camPos - vertPos, vec3(viewMatrix[0][2], viewMatrix[1][2], viewMatrix[2][2]));
|
|
64
63
|
float focalSize = 2.0 * dist * resolution;
|
|
65
|
-
vec3 rr = right * a_thickness * focalSize * a_vertices.x
|
|
64
|
+
vec3 rr = right * a_thickness * focalSize * a_vertices.x;
|
|
66
65
|
|
|
67
|
-
vec3 highDiff =
|
|
68
|
-
vec3 lowDiff =
|
|
66
|
+
vec3 highDiff = -eyePositionHigh;
|
|
67
|
+
vec3 lowDiff = rr - eyePositionLow;
|
|
68
|
+
|
|
69
|
+
if(a_vertices.y == 0.0){
|
|
70
|
+
highDiff += a_startPosHigh;
|
|
71
|
+
lowDiff += a_startPosLow;
|
|
72
|
+
}else{
|
|
73
|
+
highDiff += a_endPosHigh;
|
|
74
|
+
lowDiff += a_endPosLow;
|
|
75
|
+
}
|
|
69
76
|
|
|
70
77
|
mat4 viewMatrixRTE = viewMatrix;
|
|
71
78
|
viewMatrixRTE[3] = vec4(0.0, 0.0, 0.0, 1.0);
|
|
@@ -75,16 +75,16 @@ export function toneMapping() {
|
|
|
75
75
|
layout(location = 0) out vec4 fragColor;
|
|
76
76
|
|
|
77
77
|
void main(void) {
|
|
78
|
-
|
|
78
|
+
vec4 hdrColor = texture(hdrBuffer, tc).rgba;
|
|
79
79
|
|
|
80
80
|
float oneByGamma = gamma / gamma;
|
|
81
81
|
float oneByWhitePoint = whitepoint / whitepoint;
|
|
82
|
-
vec3 mapped = ReinhardToneMapping2(hdrColor) * oneByGamma * oneByWhitePoint;
|
|
83
|
-
//vec3 mapped = ACESFilmicToneMapping(hdrColor) * oneByGamma * oneByWhitePoint;
|
|
82
|
+
vec3 mapped = ReinhardToneMapping2(hdrColor.rgb) * oneByGamma * oneByWhitePoint;
|
|
83
|
+
//vec3 mapped = ACESFilmicToneMapping(hdrColor.rgb) * oneByGamma * oneByWhitePoint;
|
|
84
84
|
|
|
85
85
|
mapped = pow(mapped, vec3(1.0 / gamma));
|
|
86
|
-
|
|
87
|
-
fragColor = vec4(mapped,
|
|
86
|
+
|
|
87
|
+
fragColor = vec4(mapped, hdrColor.a);
|
|
88
88
|
}`
|
|
89
89
|
});
|
|
90
90
|
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
export const UTILS = `
|
|
4
|
+
float getLerpValue(in float min, in float max, in float between)
|
|
5
|
+
{
|
|
6
|
+
return (clamp(between, min, max) - min) / (max - min);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
vec3 aces(vec3 color)
|
|
10
|
+
{
|
|
11
|
+
float a = 2.51;
|
|
12
|
+
float b = 0.03;
|
|
13
|
+
float c = 2.43;
|
|
14
|
+
float d = 0.59;
|
|
15
|
+
float e = 0.14;
|
|
16
|
+
return clamp((color * (a * color + b)) / (color * (c * color + d ) + e), 0.0, 1.0);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
bool intersectSphere(vec3 rayOrigin, vec3 rayDirection, float radius, inout float t1, inout float t2)
|
|
20
|
+
{
|
|
21
|
+
float b = dot(rayDirection, rayOrigin);
|
|
22
|
+
float c = dot(rayOrigin, rayOrigin) - radius * radius;
|
|
23
|
+
float d = b * b - c;
|
|
24
|
+
if (d < 0.0) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
t1 = -b - sqrt(d);
|
|
28
|
+
t2 = -b + sqrt(d);
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
bool intersectSphere(vec3 rayOrigin, vec3 rayDirection, float radius, inout float t)
|
|
33
|
+
{
|
|
34
|
+
float b = dot(rayDirection, rayOrigin);
|
|
35
|
+
float c = dot(rayOrigin, rayOrigin) - radius * radius;
|
|
36
|
+
float d = b * b - c;
|
|
37
|
+
if (d < 0.0) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
t = -b - sqrt(d);
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
bool intersectEllipsoid( in vec3 ro, in vec3 rd, in vec3 ra, inout float t )
|
|
45
|
+
{
|
|
46
|
+
vec3 ocn = ro/ra;
|
|
47
|
+
vec3 rdn = rd/ra;
|
|
48
|
+
float a = dot( rdn, rdn );
|
|
49
|
+
float b = dot( ocn, rdn );
|
|
50
|
+
float c = dot( ocn, ocn );
|
|
51
|
+
float h = b*b - a*(c-1.0);
|
|
52
|
+
|
|
53
|
+
if (h < 0.0)
|
|
54
|
+
{
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
t = (-b-sqrt(h))/a;
|
|
59
|
+
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
bool intersectEllipsoid( in vec3 ro, in vec3 rd, in vec3 ra, inout float t1, inout float t2)
|
|
64
|
+
{
|
|
65
|
+
vec3 ocn = ro/ra;
|
|
66
|
+
vec3 rdn = rd/ra;
|
|
67
|
+
float a = dot( rdn, rdn );
|
|
68
|
+
float b = dot( ocn, rdn );
|
|
69
|
+
float c = dot( ocn, ocn );
|
|
70
|
+
float h = b*b - a*(c-1.0);
|
|
71
|
+
|
|
72
|
+
if (h < 0.0)
|
|
73
|
+
{
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
h = sqrt(h);
|
|
78
|
+
t1 = (-b-h)/a;
|
|
79
|
+
t2 = (-b+h)/a;
|
|
80
|
+
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
vec3 normalEllipsoid( in vec3 pos, in vec3 ra )
|
|
85
|
+
{
|
|
86
|
+
return normalize( pos/(ra*ra) );
|
|
87
|
+
}
|
|
88
|
+
`;
|