cesium 0.21 → 0.21.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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/Assets/Textures/moonSmall.jpg +0 -0
- data/app/assets/javascripts/Cesium.js +10 -1
- data/app/assets/javascripts/Core/Cartesian2.js +28 -0
- data/app/assets/javascripts/Core/Cartesian3.js +28 -0
- data/app/assets/javascripts/Core/Cartesian4.js +28 -0
- data/app/assets/javascripts/Core/CatmullRomSpline.js +3 -3
- data/app/assets/javascripts/Core/Clock.js +7 -7
- data/app/assets/javascripts/Core/Color.js +1 -1
- data/app/assets/javascripts/Core/ComponentDatatype.js +11 -7
- data/app/assets/javascripts/Core/CorridorGeometryLibrary.js +23 -29
- data/app/assets/javascripts/Core/Ellipsoid.js +6 -0
- data/app/assets/javascripts/Core/EllipsoidTangentPlane.js +5 -4
- data/app/assets/javascripts/Core/Event.js +2 -1
- data/app/assets/javascripts/Core/ExtentGeometry.js +1 -1
- data/app/assets/javascripts/Core/ExtentOutlineGeometry.js +1 -1
- data/app/assets/javascripts/Core/GeometryAttributes.js +1 -1
- data/app/assets/javascripts/Core/GeometryInstance.js +2 -2
- data/app/assets/javascripts/Core/GeometryPipeline.js +10 -7
- data/app/assets/javascripts/Core/HermiteSpline.js +1 -1
- data/app/assets/javascripts/Core/Iau2000Orientation.js +132 -0
- data/app/assets/javascripts/Core/IauOrientationAxes.js +98 -0
- data/app/assets/javascripts/Core/IauOrientationParameters.js +48 -0
- data/app/assets/javascripts/Core/IntersectionTests.js +5 -5
- data/app/assets/javascripts/Core/JulianDate.js +27 -5
- data/app/assets/javascripts/Core/Math.js +9 -0
- data/app/assets/javascripts/Core/Matrix2.js +1 -142
- data/app/assets/javascripts/Core/Matrix3.js +168 -153
- data/app/assets/javascripts/Core/Matrix4.js +0 -249
- data/app/assets/javascripts/Core/NearFarScalar.js +13 -0
- data/app/assets/javascripts/Core/PolygonGeometry.js +1 -1
- data/app/assets/javascripts/Core/PolygonOutlineGeometry.js +2 -2
- data/app/assets/javascripts/Core/PolygonPipeline.js +2 -2
- data/app/assets/javascripts/Core/PolylinePipeline.js +7 -3
- data/app/assets/javascripts/Core/PolylineVolumeGeometry.js +239 -0
- data/app/assets/javascripts/Core/PolylineVolumeGeometryLibrary.js +404 -0
- data/app/assets/javascripts/Core/PolylineVolumeOutlineGeometry.js +154 -0
- data/app/assets/javascripts/Core/Quaternion.js +37 -10
- data/app/assets/javascripts/Core/Shapes.js +26 -2
- data/app/assets/javascripts/Core/Simon1994PlanetaryPositions.js +3 -3
- data/app/assets/javascripts/Core/TimeInterval.js +28 -17
- data/app/assets/javascripts/Core/TimeIntervalCollection.js +30 -0
- data/app/assets/javascripts/Core/Transforms.js +5 -5
- data/app/assets/javascripts/Core/WallGeometryLibrary.js +2 -2
- data/app/assets/javascripts/Core/getFilenameFromUri.js +37 -0
- data/app/assets/javascripts/DynamicScene/ColorMaterialProperty.js +2 -2
- data/app/assets/javascripts/DynamicScene/CzmlDataSource.js +96 -18
- data/app/assets/javascripts/DynamicScene/DataSource.js +8 -0
- data/app/assets/javascripts/DynamicScene/DynamicBillboard.js +15 -3
- data/app/assets/javascripts/DynamicScene/DynamicBillboardVisualizer.js +6 -1
- data/app/assets/javascripts/DynamicScene/DynamicConeVisualizerUsingCustomSensor.js +1 -1
- data/app/assets/javascripts/DynamicScene/DynamicLabel.js +12 -1
- data/app/assets/javascripts/DynamicScene/DynamicLabelVisualizer.js +5 -0
- data/app/assets/javascripts/DynamicScene/DynamicObject.js +44 -17
- data/app/assets/javascripts/DynamicScene/DynamicObjectView.js +3 -3
- data/app/assets/javascripts/DynamicScene/DynamicPoint.js +12 -1
- data/app/assets/javascripts/DynamicScene/DynamicPointVisualizer.js +11 -2
- data/app/assets/javascripts/DynamicScene/DynamicPolyline.js +10 -30
- data/app/assets/javascripts/DynamicScene/DynamicPolylineVisualizer.js +5 -20
- data/app/assets/javascripts/DynamicScene/GeoJsonDataSource.js +26 -8
- data/app/assets/javascripts/DynamicScene/GridMaterialProperty.js +2 -2
- data/app/assets/javascripts/DynamicScene/ImageMaterialProperty.js +2 -2
- data/app/assets/javascripts/DynamicScene/PolylineOutlineMaterialProperty.js +66 -0
- data/app/assets/javascripts/DynamicScene/PositionProperty.js +3 -3
- data/app/assets/javascripts/DynamicScene/ReferenceProperty.js +1 -1
- data/app/assets/javascripts/DynamicScene/SampledProperty.js +14 -8
- data/app/assets/javascripts/Renderer/AutomaticUniforms.js +4 -3
- data/app/assets/javascripts/Renderer/Context.js +16 -2
- data/app/assets/javascripts/Renderer/UniformState.js +14 -14
- data/app/assets/javascripts/Scene/Billboard.js +102 -26
- data/app/assets/javascripts/Scene/BillboardCollection.js +69 -16
- data/app/assets/javascripts/Scene/Camera.js +7 -7
- data/app/assets/javascripts/Scene/CameraController.js +23 -12
- data/app/assets/javascripts/Scene/CameraFlightPath.js +11 -11
- data/app/assets/javascripts/Scene/CentralBodySurface.js +1 -1
- data/app/assets/javascripts/Scene/CustomSensorVolume.js +17 -2
- data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +79 -24
- data/app/assets/javascripts/Scene/ExtentPrimitive.js +17 -1
- data/app/assets/javascripts/Scene/Label.js +94 -18
- data/app/assets/javascripts/Scene/LabelCollection.js +6 -2
- data/app/assets/javascripts/Scene/Moon.js +150 -0
- data/app/assets/javascripts/Scene/Polygon.js +18 -1
- data/app/assets/javascripts/Scene/Polyline.js +32 -13
- data/app/assets/javascripts/Scene/PolylineCollection.js +7 -6
- data/app/assets/javascripts/Scene/Primitive.js +2 -2
- data/app/assets/javascripts/Scene/RectangularPyramidSensorVolume.js +12 -0
- data/app/assets/javascripts/Scene/Scene.js +122 -14
- data/app/assets/javascripts/Scene/SceneTransforms.js +2 -2
- data/app/assets/javascripts/Scene/SceneTransitioner.js +4 -4
- data/app/assets/javascripts/Scene/ScreenSpaceCameraController.js +1 -1
- data/app/assets/javascripts/Scene/SkyBox.js +53 -48
- data/app/assets/javascripts/Scene/TileMapServiceImageryProvider.js +2 -2
- data/app/assets/javascripts/Shaders/BillboardCollectionVS.glsl +36 -14
- data/app/assets/javascripts/Shaders/BillboardCollectionVS.js +27 -9
- data/app/assets/javascripts/Shaders/Builtin/Functions/phong.glsl +13 -0
- data/app/assets/javascripts/Shaders/Builtin/Functions/phong.js +10 -0
- data/app/assets/javascripts/Shaders/EllipsoidFS.glsl +24 -0
- data/app/assets/javascripts/Shaders/EllipsoidFS.js +21 -1
- data/app/assets/javascripts/Widgets/CesiumWidget/CesiumWidget.js +30 -9
- data/app/assets/javascripts/Widgets/HomeButton/HomeButtonViewModel.js +6 -5
- data/app/assets/javascripts/Widgets/Viewer/Viewer.js +13 -0
- data/app/assets/javascripts/Widgets/Viewer/viewerDynamicObjectMixin.js +46 -4
- data/app/assets/javascripts/Workers/cesiumWorkerBootstrapper.js +16 -8
- data/app/assets/javascripts/Workers/createPolylineVolumeGeometry.js +23 -0
- data/app/assets/javascripts/Workers/createPolylineVolumeOutlineGeometry.js +23 -0
- data/lib/cesium/version.rb +1 -1
- metadata +15 -5
- data/test/dummy/tmp/pids/server.pid +0 -1
|
@@ -704,7 +704,7 @@ define(['Core/defined', 'Core/destroyObject', 'Core/Cartesian2', 'Core/Cartesian
|
|
|
704
704
|
|
|
705
705
|
if (defined(restrictedAngle)) {
|
|
706
706
|
var direction = Cartesian3.clone(cameraController._camera.directionWC, rotate3DRestrictedDirection);
|
|
707
|
-
var invTransform =
|
|
707
|
+
var invTransform = Matrix4.inverseTransformation(transform);
|
|
708
708
|
Matrix4.multiplyByVector(invTransform, direction, direction);
|
|
709
709
|
|
|
710
710
|
var dot = -Cartesian3.dot(direction, constrainedAxis);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/*global define*/
|
|
2
|
-
define(['Core/BoxGeometry', 'Core/Cartesian3', 'Core/defined', 'Core/destroyObject', 'Core/DeveloperError', 'Core/Matrix4', 'Core/GeometryPipeline', 'Core/VertexFormat', 'Core/PrimitiveType', 'Renderer/loadCubeMap', 'Renderer/BufferUsage', 'Renderer/DrawCommand', 'Renderer/BlendingState', 'Scene/SceneMode', 'Shaders/SkyBoxVS', 'Shaders/SkyBoxFS'], function(
|
|
2
|
+
define(['Core/defaultValue', 'Core/BoxGeometry', 'Core/Cartesian3', 'Core/defined', 'Core/destroyObject', 'Core/DeveloperError', 'Core/Matrix4', 'Core/GeometryPipeline', 'Core/VertexFormat', 'Core/PrimitiveType', 'Renderer/loadCubeMap', 'Renderer/BufferUsage', 'Renderer/DrawCommand', 'Renderer/BlendingState', 'Scene/SceneMode', 'Shaders/SkyBoxVS', 'Shaders/SkyBoxFS'], function(
|
|
3
|
+
defaultValue,
|
|
3
4
|
BoxGeometry,
|
|
4
5
|
Cartesian3,
|
|
5
6
|
defined,
|
|
@@ -27,47 +28,36 @@ define(['Core/BoxGeometry', 'Core/Cartesian3', 'Core/defined', 'Core/destroyObje
|
|
|
27
28
|
* @alias SkyBox
|
|
28
29
|
* @constructor
|
|
29
30
|
*
|
|
30
|
-
* @param {Object} sources The source URL or <code>Image</code> object for each of the six cube map faces. See the example below.
|
|
31
|
-
*
|
|
32
|
-
* @exception {DeveloperError} sources is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.
|
|
33
|
-
* @exception {DeveloperError} sources properties must all be the same type.
|
|
31
|
+
* @param {Object} [options.sources] The source URL or <code>Image</code> object for each of the six cube map faces. See the example below.
|
|
32
|
+
* @param {Boolean} [options.show=true] Determines if this primitive will be shown.
|
|
34
33
|
*
|
|
35
34
|
* @example
|
|
36
35
|
* scene.skyBox = new SkyBox({
|
|
36
|
+
* sources : {
|
|
37
37
|
* positiveX : 'skybox_px.png',
|
|
38
38
|
* negativeX : 'skybox_nx.png',
|
|
39
39
|
* positiveY : 'skybox_py.png',
|
|
40
40
|
* negativeY : 'skybox_ny.png',
|
|
41
41
|
* positiveZ : 'skybox_pz.png',
|
|
42
42
|
* negativeZ : 'skybox_nz.png'
|
|
43
|
+
* }
|
|
43
44
|
* });
|
|
44
45
|
*
|
|
45
46
|
* @see Scene#skyBox
|
|
46
47
|
* @see Transforms.computeTemeToPseudoFixedMatrix
|
|
47
48
|
*/
|
|
48
|
-
var SkyBox = function(
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
(typeof sources.positiveX !== typeof sources.positiveY) ||
|
|
61
|
-
(typeof sources.positiveX !== typeof sources.negativeY) ||
|
|
62
|
-
(typeof sources.positiveX !== typeof sources.positiveZ) ||
|
|
63
|
-
(typeof sources.positiveX !== typeof sources.negativeZ)) {
|
|
64
|
-
throw new DeveloperError('sources properties must all be the same type.');
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
this._command = new DrawCommand();
|
|
68
|
-
this._command.owner = this;
|
|
69
|
-
this._cubeMap = undefined;
|
|
70
|
-
this._sources = sources;
|
|
49
|
+
var SkyBox = function(options) {
|
|
50
|
+
/**
|
|
51
|
+
* The sources used to create the cube map faces: an object
|
|
52
|
+
* with <code>positiveX</code>, <code>negativeX</code>, <code>positiveY</code>,
|
|
53
|
+
* <code>negativeY</code>, <code>positiveZ</code>, and <code>negativeZ</code> properties.
|
|
54
|
+
* These can be either URLs or <code>Image</code> objects.
|
|
55
|
+
*
|
|
56
|
+
* @type Object
|
|
57
|
+
* @default undefined
|
|
58
|
+
*/
|
|
59
|
+
this.sources = options.sources;
|
|
60
|
+
this._sources = undefined;
|
|
71
61
|
|
|
72
62
|
/**
|
|
73
63
|
* Determines if the sky box will be shown.
|
|
@@ -75,25 +65,17 @@ define(['Core/BoxGeometry', 'Core/Cartesian3', 'Core/defined', 'Core/destroyObje
|
|
|
75
65
|
* @type {Boolean}
|
|
76
66
|
* @default true
|
|
77
67
|
*/
|
|
78
|
-
this.show = true;
|
|
79
|
-
};
|
|
68
|
+
this.show = defaultValue(options.show, true);
|
|
80
69
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
* <code>negativeY</code>, <code>positiveZ</code>, and <code>negativeZ</code> properties.
|
|
85
|
-
* These are either URLs or <code>Image</code> objects, depending on how the sky box
|
|
86
|
-
* was constructed.
|
|
87
|
-
*
|
|
88
|
-
* @memberof SkyBox
|
|
89
|
-
*
|
|
90
|
-
* @returns {Object} The sources used to create the cube map faces.
|
|
91
|
-
*/
|
|
92
|
-
SkyBox.prototype.getSources = function() {
|
|
93
|
-
return this._sources;
|
|
70
|
+
this._command = new DrawCommand();
|
|
71
|
+
this._command.owner = this;
|
|
72
|
+
this._cubeMap = undefined;
|
|
94
73
|
};
|
|
95
74
|
|
|
96
75
|
/**
|
|
76
|
+
* @exception {DeveloperError} sources is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.
|
|
77
|
+
* @exception {DeveloperError} sources properties must all be the same type.
|
|
78
|
+
*
|
|
97
79
|
* @private
|
|
98
80
|
*/
|
|
99
81
|
SkyBox.prototype.update = function(context, frameState) {
|
|
@@ -111,22 +93,45 @@ define(['Core/BoxGeometry', 'Core/Cartesian3', 'Core/defined', 'Core/destroyObje
|
|
|
111
93
|
return undefined;
|
|
112
94
|
}
|
|
113
95
|
|
|
114
|
-
|
|
96
|
+
if (this._sources !== this.sources) {
|
|
97
|
+
this._sources = this.sources;
|
|
98
|
+
var sources = this.sources;
|
|
99
|
+
|
|
100
|
+
if ((!defined(sources.positiveX)) ||
|
|
101
|
+
(!defined(sources.negativeX)) ||
|
|
102
|
+
(!defined(sources.positiveY)) ||
|
|
103
|
+
(!defined(sources.negativeY)) ||
|
|
104
|
+
(!defined(sources.positiveZ)) ||
|
|
105
|
+
(!defined(sources.negativeZ))) {
|
|
106
|
+
throw new DeveloperError('sources is required and must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.');
|
|
107
|
+
}
|
|
115
108
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
109
|
+
if ((typeof sources.positiveX !== typeof sources.negativeX) ||
|
|
110
|
+
(typeof sources.positiveX !== typeof sources.positiveY) ||
|
|
111
|
+
(typeof sources.positiveX !== typeof sources.negativeY) ||
|
|
112
|
+
(typeof sources.positiveX !== typeof sources.positiveZ) ||
|
|
113
|
+
(typeof sources.positiveX !== typeof sources.negativeZ)) {
|
|
114
|
+
throw new DeveloperError('sources properties must all be the same type.');
|
|
115
|
+
}
|
|
119
116
|
|
|
120
117
|
if (typeof sources.positiveX === 'string') {
|
|
121
118
|
// Given urls for cube-map images. Load them.
|
|
122
119
|
loadCubeMap(context, this._sources).then(function(cubeMap) {
|
|
120
|
+
that._cubeMap = that._cubeMap && that._cubeMap.destroy();
|
|
123
121
|
that._cubeMap = cubeMap;
|
|
124
122
|
});
|
|
125
123
|
} else {
|
|
124
|
+
this._cubeMap = this._cubeMap && this._cubeMap.destroy();
|
|
126
125
|
this._cubeMap = context.createCubeMap({
|
|
127
126
|
source : sources
|
|
128
127
|
});
|
|
129
128
|
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
var command = this._command;
|
|
132
|
+
|
|
133
|
+
if (!defined(command.vertexArray)) {
|
|
134
|
+
var that = this;
|
|
130
135
|
|
|
131
136
|
command.uniformMap = {
|
|
132
137
|
u_cubeMap: function() {
|
|
@@ -141,7 +146,7 @@ define(['Core/BoxGeometry', 'Core/Cartesian3', 'Core/defined', 'Core/destroyObje
|
|
|
141
146
|
var attributeIndices = GeometryPipeline.createAttributeIndices(geometry);
|
|
142
147
|
|
|
143
148
|
command.primitiveType = PrimitiveType.TRIANGLES;
|
|
144
|
-
command.modelMatrix = Matrix4.
|
|
149
|
+
command.modelMatrix = Matrix4.clone(Matrix4.IDENTITY);
|
|
145
150
|
command.vertexArray = context.createVertexArrayFromGeometry({
|
|
146
151
|
geometry: geometry,
|
|
147
152
|
attributeIndices: attributeIndices,
|
|
@@ -108,7 +108,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/Cartographic', 'Core/Develope
|
|
|
108
108
|
var ne = Cartographic.fromDegrees(parseFloat(bbox.getAttribute('maxy')), parseFloat(bbox.getAttribute('maxx')));
|
|
109
109
|
that._extent = new Extent(sw.longitude, sw.latitude, ne.longitude, ne.latitude);
|
|
110
110
|
} else {
|
|
111
|
-
that._extent = that._extent
|
|
111
|
+
that._extent = Extent.clone(that._extent);
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
// tiling scheme handling
|
|
@@ -366,4 +366,4 @@ define(['Core/defaultValue', 'Core/defined', 'Core/Cartographic', 'Core/Develope
|
|
|
366
366
|
};
|
|
367
367
|
|
|
368
368
|
return TileMapServiceImageryProvider;
|
|
369
|
-
});
|
|
369
|
+
});
|
|
@@ -7,6 +7,7 @@ attribute vec2 pixelOffset;
|
|
|
7
7
|
attribute vec4 eyeOffsetAndScale; // eye offset in meters
|
|
8
8
|
attribute vec4 rotationAndAlignedAxis;
|
|
9
9
|
attribute vec4 scaleByDistance; // near, nearScale, far, farScale
|
|
10
|
+
attribute vec4 translucencyByDistance; // near, nearTrans, far, farTrans
|
|
10
11
|
|
|
11
12
|
#ifdef RENDER_FOR_PICK
|
|
12
13
|
attribute vec4 pickColor;
|
|
@@ -24,6 +25,23 @@ varying vec4 v_pickColor;
|
|
|
24
25
|
varying vec4 v_color;
|
|
25
26
|
#endif
|
|
26
27
|
|
|
28
|
+
float getNearFarScalar(vec4 nearFarScalar, float cameraDistSq)
|
|
29
|
+
{
|
|
30
|
+
float valueAtMin = nearFarScalar.y;
|
|
31
|
+
float valueAtMax = nearFarScalar.w;
|
|
32
|
+
float nearDistanceSq = nearFarScalar.x * nearFarScalar.x;
|
|
33
|
+
float farDistanceSq = nearFarScalar.z * nearFarScalar.z;
|
|
34
|
+
|
|
35
|
+
// ensure that t will fall within the range of [0.0, 1.0]
|
|
36
|
+
cameraDistSq = clamp(cameraDistSq, nearDistanceSq, farDistanceSq);
|
|
37
|
+
|
|
38
|
+
float t = (cameraDistSq - nearDistanceSq) / (farDistanceSq - nearDistanceSq);
|
|
39
|
+
|
|
40
|
+
t = pow(t, 0.15);
|
|
41
|
+
|
|
42
|
+
return mix(valueAtMin, valueAtMax, t);
|
|
43
|
+
}
|
|
44
|
+
|
|
27
45
|
void main()
|
|
28
46
|
{
|
|
29
47
|
// Modifying this shader may also require modifications to Billboard.computeScreenSpacePosition
|
|
@@ -44,8 +62,7 @@ void main()
|
|
|
44
62
|
positionEC.xyz *= show;
|
|
45
63
|
|
|
46
64
|
///////////////////////////////////////////////////////////////////////////
|
|
47
|
-
|
|
48
|
-
#ifdef EYE_DISTANCE_SCALING // scale based on eye distance
|
|
65
|
+
|
|
49
66
|
float lengthSq;
|
|
50
67
|
if (czm_sceneMode == czm_sceneMode2D)
|
|
51
68
|
{
|
|
@@ -58,19 +75,23 @@ void main()
|
|
|
58
75
|
lengthSq = dot(positionEC.xyz, positionEC.xyz);
|
|
59
76
|
}
|
|
60
77
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
float t = (lengthSq - nearDistanceSq) / (farDistanceSq - nearDistanceSq);
|
|
70
|
-
|
|
71
|
-
t = pow(t, 0.15);
|
|
78
|
+
#ifdef EYE_DISTANCE_SCALING
|
|
79
|
+
scale *= getNearFarScalar(scaleByDistance, lengthSq);
|
|
80
|
+
// push vertex behind near plane for clipping
|
|
81
|
+
if (scale == 0.0)
|
|
82
|
+
{
|
|
83
|
+
positionEC.xyz = vec3(0.0);
|
|
84
|
+
}
|
|
85
|
+
#endif
|
|
72
86
|
|
|
73
|
-
|
|
87
|
+
float translucency = 1.0;
|
|
88
|
+
#ifdef EYE_DISTANCE_TRANSLUCENCY
|
|
89
|
+
translucency = getNearFarScalar(translucencyByDistance, lengthSq);
|
|
90
|
+
// push vertex behind near plane for clipping
|
|
91
|
+
if (translucency == 0.0)
|
|
92
|
+
{
|
|
93
|
+
positionEC.xyz = vec3(0.0);
|
|
94
|
+
}
|
|
74
95
|
#endif
|
|
75
96
|
|
|
76
97
|
vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);
|
|
@@ -113,5 +134,6 @@ void main()
|
|
|
113
134
|
v_pickColor = pickColor;
|
|
114
135
|
#else
|
|
115
136
|
v_color = color;
|
|
137
|
+
v_color.a *= translucency;
|
|
116
138
|
#endif
|
|
117
139
|
}
|
|
@@ -11,6 +11,7 @@ attribute vec2 pixelOffset;\n\
|
|
|
11
11
|
attribute vec4 eyeOffsetAndScale;\n\
|
|
12
12
|
attribute vec4 rotationAndAlignedAxis;\n\
|
|
13
13
|
attribute vec4 scaleByDistance;\n\
|
|
14
|
+
attribute vec4 translucencyByDistance;\n\
|
|
14
15
|
#ifdef RENDER_FOR_PICK\n\
|
|
15
16
|
attribute vec4 pickColor;\n\
|
|
16
17
|
#else\n\
|
|
@@ -23,6 +24,17 @@ varying vec4 v_pickColor;\n\
|
|
|
23
24
|
#else\n\
|
|
24
25
|
varying vec4 v_color;\n\
|
|
25
26
|
#endif\n\
|
|
27
|
+
float getNearFarScalar(vec4 nearFarScalar, float cameraDistSq)\n\
|
|
28
|
+
{\n\
|
|
29
|
+
float valueAtMin = nearFarScalar.y;\n\
|
|
30
|
+
float valueAtMax = nearFarScalar.w;\n\
|
|
31
|
+
float nearDistanceSq = nearFarScalar.x * nearFarScalar.x;\n\
|
|
32
|
+
float farDistanceSq = nearFarScalar.z * nearFarScalar.z;\n\
|
|
33
|
+
cameraDistSq = clamp(cameraDistSq, nearDistanceSq, farDistanceSq);\n\
|
|
34
|
+
float t = (cameraDistSq - nearDistanceSq) / (farDistanceSq - nearDistanceSq);\n\
|
|
35
|
+
t = pow(t, 0.15);\n\
|
|
36
|
+
return mix(valueAtMin, valueAtMax, t);\n\
|
|
37
|
+
}\n\
|
|
26
38
|
void main()\n\
|
|
27
39
|
{\n\
|
|
28
40
|
vec3 eyeOffset = eyeOffsetAndScale.xyz;\n\
|
|
@@ -35,7 +47,6 @@ vec4 p = czm_translateRelativeToEye(positionHigh, positionLow);\n\
|
|
|
35
47
|
vec4 positionEC = czm_modelViewRelativeToEye * p;\n\
|
|
36
48
|
positionEC = czm_eyeOffset(positionEC, eyeOffset);\n\
|
|
37
49
|
positionEC.xyz *= show;\n\
|
|
38
|
-
#ifdef EYE_DISTANCE_SCALING\n\
|
|
39
50
|
float lengthSq;\n\
|
|
40
51
|
if (czm_sceneMode == czm_sceneMode2D)\n\
|
|
41
52
|
{\n\
|
|
@@ -45,14 +56,20 @@ else\n\
|
|
|
45
56
|
{\n\
|
|
46
57
|
lengthSq = dot(positionEC.xyz, positionEC.xyz);\n\
|
|
47
58
|
}\n\
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
59
|
+
#ifdef EYE_DISTANCE_SCALING\n\
|
|
60
|
+
scale *= getNearFarScalar(scaleByDistance, lengthSq);\n\
|
|
61
|
+
if (scale == 0.0)\n\
|
|
62
|
+
{\n\
|
|
63
|
+
positionEC.xyz = vec3(0.0);\n\
|
|
64
|
+
}\n\
|
|
65
|
+
#endif\n\
|
|
66
|
+
float translucency = 1.0;\n\
|
|
67
|
+
#ifdef EYE_DISTANCE_TRANSLUCENCY\n\
|
|
68
|
+
translucency = getNearFarScalar(translucencyByDistance, lengthSq);\n\
|
|
69
|
+
if (translucency == 0.0)\n\
|
|
70
|
+
{\n\
|
|
71
|
+
positionEC.xyz = vec3(0.0);\n\
|
|
72
|
+
}\n\
|
|
56
73
|
#endif\n\
|
|
57
74
|
vec4 positionWC = czm_eyeToWindowCoordinates(positionEC);\n\
|
|
58
75
|
vec2 halfSize = imageSize * scale * czm_highResolutionSnapScale;\n\
|
|
@@ -86,6 +103,7 @@ v_textureCoordinates = textureCoordinates;\n\
|
|
|
86
103
|
v_pickColor = pickColor;\n\
|
|
87
104
|
#else\n\
|
|
88
105
|
v_color = color;\n\
|
|
106
|
+
v_color.a *= translucency;\n\
|
|
89
107
|
#endif\n\
|
|
90
108
|
}\n\
|
|
91
109
|
";
|
|
@@ -41,3 +41,16 @@ vec4 czm_phong(vec3 toEye, czm_material material)
|
|
|
41
41
|
|
|
42
42
|
return vec4(color, material.alpha);
|
|
43
43
|
}
|
|
44
|
+
|
|
45
|
+
vec4 czm_private_phong(vec3 toEye, czm_material material)
|
|
46
|
+
{
|
|
47
|
+
float diffuse = czm_private_getLambertDiffuseOfMaterial(czm_sunDirectionEC, material);
|
|
48
|
+
float specular = czm_private_getSpecularOfMaterial(czm_sunDirectionEC, toEye, material);
|
|
49
|
+
|
|
50
|
+
vec3 ambient = vec3(0.0);
|
|
51
|
+
vec3 color = ambient + material.emission;
|
|
52
|
+
color += material.diffuse * diffuse;
|
|
53
|
+
color += material.specular * specular;
|
|
54
|
+
|
|
55
|
+
return vec4(color, material.alpha);
|
|
56
|
+
}
|
|
@@ -20,5 +20,15 @@ color += material.diffuse * diffuse;\n\
|
|
|
20
20
|
color += material.specular * specular;\n\
|
|
21
21
|
return vec4(color, material.alpha);\n\
|
|
22
22
|
}\n\
|
|
23
|
+
vec4 czm_private_phong(vec3 toEye, czm_material material)\n\
|
|
24
|
+
{\n\
|
|
25
|
+
float diffuse = czm_private_getLambertDiffuseOfMaterial(czm_sunDirectionEC, material);\n\
|
|
26
|
+
float specular = czm_private_getSpecularOfMaterial(czm_sunDirectionEC, toEye, material);\n\
|
|
27
|
+
vec3 ambient = vec3(0.0);\n\
|
|
28
|
+
vec3 color = ambient + material.emission;\n\
|
|
29
|
+
color += material.diffuse * diffuse;\n\
|
|
30
|
+
color += material.specular * specular;\n\
|
|
31
|
+
return vec4(color, material.alpha);\n\
|
|
32
|
+
}\n\
|
|
23
33
|
";
|
|
24
34
|
});
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
#ifdef WRITE_DEPTH
|
|
2
|
+
#ifdef GL_EXT_frag_depth
|
|
3
|
+
#extension GL_EXT_frag_depth : enable
|
|
4
|
+
#endif
|
|
5
|
+
#endif
|
|
6
|
+
|
|
1
7
|
uniform vec3 u_radii;
|
|
2
8
|
uniform vec3 u_oneOverEllipsoidRadiiSquared;
|
|
3
9
|
|
|
@@ -24,7 +30,11 @@ vec4 computeEllipsoidColor(czm_ray ray, float intersection, float side)
|
|
|
24
30
|
materialInput.positionToEyeEC = positionToEyeEC;
|
|
25
31
|
czm_material material = czm_getMaterial(materialInput);
|
|
26
32
|
|
|
33
|
+
#ifdef ONLY_SUN_LIGHTING
|
|
34
|
+
return czm_private_phong(normalize(positionToEyeEC), material);
|
|
35
|
+
#else
|
|
27
36
|
return czm_phong(normalize(positionToEyeEC), material);
|
|
37
|
+
#endif
|
|
28
38
|
}
|
|
29
39
|
|
|
30
40
|
void main()
|
|
@@ -80,4 +90,18 @@ void main()
|
|
|
80
90
|
|
|
81
91
|
gl_FragColor = mix(insideFaceColor, outsideFaceColor, outsideFaceColor.a);
|
|
82
92
|
gl_FragColor.a = 1.0 - (1.0 - insideFaceColor.a) * (1.0 - outsideFaceColor.a);
|
|
93
|
+
|
|
94
|
+
#ifdef WRITE_DEPTH
|
|
95
|
+
#ifdef GL_EXT_frag_depth
|
|
96
|
+
t = (intersection.start != 0.0) ? intersection.start : intersection.stop;
|
|
97
|
+
vec3 positionEC = czm_pointAlongRay(ray, t);
|
|
98
|
+
vec4 positionCC = czm_projection * vec4(positionEC, 1.0);
|
|
99
|
+
float z = positionCC.z / positionCC.w;
|
|
100
|
+
|
|
101
|
+
float n = gl_DepthRange.near;
|
|
102
|
+
float f = gl_DepthRange.far;
|
|
103
|
+
|
|
104
|
+
gl_FragDepthEXT = (z * (f - n) + f + n) * 0.5;
|
|
105
|
+
#endif
|
|
106
|
+
#endif
|
|
83
107
|
}
|
|
@@ -2,7 +2,12 @@
|
|
|
2
2
|
/*global define*/
|
|
3
3
|
define(function() {
|
|
4
4
|
"use strict";
|
|
5
|
-
return "
|
|
5
|
+
return "#ifdef WRITE_DEPTH\n\
|
|
6
|
+
#ifdef GL_EXT_frag_depth\n\
|
|
7
|
+
#extension GL_EXT_frag_depth : enable\n\
|
|
8
|
+
#endif\n\
|
|
9
|
+
#endif\n\
|
|
10
|
+
uniform vec3 u_radii;\n\
|
|
6
11
|
uniform vec3 u_oneOverEllipsoidRadiiSquared;\n\
|
|
7
12
|
varying vec3 v_positionEC;\n\
|
|
8
13
|
vec4 computeEllipsoidColor(czm_ray ray, float intersection, float side)\n\
|
|
@@ -23,7 +28,11 @@ materialInput.normalEC = normalEC;\n\
|
|
|
23
28
|
materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(positionMC, normalEC);\n\
|
|
24
29
|
materialInput.positionToEyeEC = positionToEyeEC;\n\
|
|
25
30
|
czm_material material = czm_getMaterial(materialInput);\n\
|
|
31
|
+
#ifdef ONLY_SUN_LIGHTING\n\
|
|
32
|
+
return czm_private_phong(normalize(positionToEyeEC), material);\n\
|
|
33
|
+
#else\n\
|
|
26
34
|
return czm_phong(normalize(positionToEyeEC), material);\n\
|
|
35
|
+
#endif\n\
|
|
27
36
|
}\n\
|
|
28
37
|
void main()\n\
|
|
29
38
|
{\n\
|
|
@@ -57,6 +66,17 @@ vec4 outsideFaceColor = (intersection.start != 0.0) ? computeEllipsoidColor(ray,
|
|
|
57
66
|
vec4 insideFaceColor = (outsideFaceColor.a < 1.0) ? computeEllipsoidColor(ray, intersection.stop, -1.0) : vec4(0.0);\n\
|
|
58
67
|
gl_FragColor = mix(insideFaceColor, outsideFaceColor, outsideFaceColor.a);\n\
|
|
59
68
|
gl_FragColor.a = 1.0 - (1.0 - insideFaceColor.a) * (1.0 - outsideFaceColor.a);\n\
|
|
69
|
+
#ifdef WRITE_DEPTH\n\
|
|
70
|
+
#ifdef GL_EXT_frag_depth\n\
|
|
71
|
+
t = (intersection.start != 0.0) ? intersection.start : intersection.stop;\n\
|
|
72
|
+
vec3 positionEC = czm_pointAlongRay(ray, t);\n\
|
|
73
|
+
vec4 positionCC = czm_projection * vec4(positionEC, 1.0);\n\
|
|
74
|
+
float z = positionCC.z / positionCC.w;\n\
|
|
75
|
+
float n = gl_DepthRange.near;\n\
|
|
76
|
+
float f = gl_DepthRange.far;\n\
|
|
77
|
+
gl_FragDepthEXT = (z * (f - n) + f + n) * 0.5;\n\
|
|
78
|
+
#endif\n\
|
|
79
|
+
#endif\n\
|
|
60
80
|
}\n\
|
|
61
81
|
";
|
|
62
82
|
});
|