Skip to content

Commit b2588e4

Browse files
ZhouhaiZhouhai
Zhouhai
authored and
Zhouhai
committed
Revert "Solve struct ellipsoid caused the model to dark"
This reverts commit d6f91aa.
1 parent d6f91aa commit b2588e4

10 files changed

+39
-42
lines changed

CONTRIBUTORS.md

-1
Original file line numberDiff line numberDiff line change
@@ -211,4 +211,3 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to contribute to Cesiu
211211
* [Trubie Turner](https://github.com/flexei)
212212
* [Merijn Wijngaard](https://github.com/mwijngaard)
213213
* [Dennis Adams](https://github.com/dennisadams)
214-
* [Hai Zhou](https://github.com/verybigzhouhai)

Source/Scene/processPbrMaterials.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -740,9 +740,9 @@ define([
740740

741741
fragmentShader += ' vec3 r = normalize(czm_inverseViewRotation * normalize(reflect(v, n)));\n';
742742
// Figure out if the reflection vector hits the ellipsoid
743-
fragmentShader += ' czm_getWgs84EllipsoidEC();\n';
743+
fragmentShader += ' czm_ellipsoid ellipsoid = czm_getWgs84EllipsoidEC();\n';
744744
fragmentShader += ' float vertexRadius = length(positionWC);\n';
745-
fragmentShader += ' float horizonDotNadir = 1.0 - min(1.0, czm_ellipsoid_radii.x / vertexRadius);\n';
745+
fragmentShader += ' float horizonDotNadir = 1.0 - min(1.0, ellipsoid.radii.x / vertexRadius);\n';
746746
fragmentShader += ' float reflectionDotNadir = dot(r, normalize(positionWC));\n';
747747
// Flipping the X vector is a cheap way to get the inverse of czm_temeToPseudoFixed, since that's a rotation about Z.
748748
fragmentShader += ' r.x = -r.x;\n';

Source/Shaders/Builtin/Functions/ellipsoidNew.glsl

+2-4
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ czm_ellipsoid czm_ellipsoidNew(vec3 center, vec3 radii)
99
{
1010
vec3 inverseRadii = vec3(1.0 / radii.x, 1.0 / radii.y, 1.0 / radii.z);
1111
vec3 inverseRadiiSquared = inverseRadii * inverseRadii;
12-
czm_ellipsoid_center = center;
13-
czm_ellipsoid_radii = radii;
14-
czm_ellipsoid_inverseRadii = inverseRadii;
15-
czm_ellipsoid_inverseRadiiSquared = inverseRadiiSquared;
12+
czm_ellipsoid temp = czm_ellipsoid(center, radii, inverseRadii, inverseRadiiSquared);
13+
return temp;
1614
}

Source/Shaders/Builtin/Functions/getWgs84EllipsoidEC.glsl

+4-6
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,18 @@
44
* @name czm_getWgs84EllipsoidEC
55
* @glslFunction
66
*
7+
* @returns {czm_ellipsoid} The WGS84 ellipsoid, with its center at the origin of world coordinates, in eye coordinates.
78
*
89
* @see Ellipsoid.WGS84
910
*
1011
* @example
11-
* czm_getWgs84EllipsoidEC();
12+
* czm_ellipsoid ellipsoid = czm_getWgs84EllipsoidEC();
1213
*/
1314
czm_ellipsoid czm_getWgs84EllipsoidEC()
1415
{
1516
vec3 radii = vec3(6378137.0, 6378137.0, 6356752.314245);
1617
vec3 inverseRadii = vec3(1.0 / radii.x, 1.0 / radii.y, 1.0 / radii.z);
1718
vec3 inverseRadiiSquared = inverseRadii * inverseRadii;
18-
czm_ellipsoid_center = czm_view[3].xyz;
19-
czm_ellipsoid_radii = radii;
20-
czm_ellipsoid_inverseRadii = inverseRadii;
21-
czm_ellipsoid_inverseRadiiSquared = inverseRadiiSquared;
22-
19+
czm_ellipsoid temp = czm_ellipsoid(czm_view[3].xyz, radii, inverseRadii, inverseRadiiSquared);
20+
return temp;
2321
}

Source/Shaders/Builtin/Functions/rayEllipsoidIntersectionInterval.glsl

+11-11
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@
44
* @name czm_rayEllipsoidIntersectionInterval
55
* @glslFunction
66
*/
7-
czm_raySegment czm_rayEllipsoidIntersectionInterval(czm_ray ray, vec3 center, vec3 inverseRadii)
7+
czm_raySegment czm_rayEllipsoidIntersectionInterval(czm_ray ray, czm_ellipsoid ellipsoid)
88
{
9-
// ray and ellipsoid center in eye coordinates. radii in model coordinates.
10-
vec3 q = inverseRadii * (czm_inverseModelView * vec4(ray.origin, 1.0)).xyz;
11-
vec3 w = inverseRadii * (czm_inverseModelView * vec4(ray.direction, 0.0)).xyz;
12-
13-
q = q - inverseRadii * (czm_inverseModelView * vec4(center, 1.0)).xyz;
14-
9+
// ray and ellipsoid center in eye coordinates. radii in model coordinates.
10+
vec3 q = ellipsoid.inverseRadii * (czm_inverseModelView * vec4(ray.origin, 1.0)).xyz;
11+
vec3 w = ellipsoid.inverseRadii * (czm_inverseModelView * vec4(ray.direction, 0.0)).xyz;
12+
13+
q = q - ellipsoid.inverseRadii * (czm_inverseModelView * vec4(ellipsoid.center, 1.0)).xyz;
14+
1515
float q2 = dot(q, q);
1616
float qw = dot(q, w);
17-
17+
1818
if (q2 > 1.0) // Outside ellipsoid.
1919
{
2020
if (qw >= 0.0) // Looking outward or tangent (0 intersections).
@@ -27,11 +27,11 @@ czm_raySegment czm_rayEllipsoidIntersectionInterval(czm_ray ray, vec3 center, ve
2727
float difference = q2 - 1.0; // Positively valued.
2828
float w2 = dot(w, w);
2929
float product = w2 * difference;
30-
30+
3131
if (qw2 < product) // Imaginary roots (0 intersections).
3232
{
33-
return czm_emptyRaySegment;
34-
}
33+
return czm_emptyRaySegment;
34+
}
3535
else if (qw2 > product) // Distinct roots (2 intersections).
3636
{
3737
float discriminant = qw * qw - product;
+12-8
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1-
/**
2-
*
3-
struct ellipsoid
4-
*/
5-
vec3 czm_ellipsoid_center;
6-
vec3 czm_ellipsoid_radii;
7-
vec3 czm_ellipsoid_inverseRadii;
8-
vec3 czm_ellipsoid_inverseRadiiSquared;
1+
/** DOC_TBA
2+
*
3+
* @name czm_ellipsoid
4+
* @glslStruct
5+
*/
6+
struct czm_ellipsoid
7+
{
8+
vec3 center;
9+
vec3 radii;
10+
vec3 inverseRadii;
11+
vec3 inverseRadiiSquared;
12+
};

Source/Shaders/DepthPlaneFS.glsl

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ varying vec4 positionEC;
33
void main()
44
{
55
// TODO: make arbitrary ellipsoid
6-
czm_getWgs84EllipsoidEC();
6+
czm_ellipsoid ellipsoid = czm_getWgs84EllipsoidEC();
77

88
vec3 direction = normalize(positionEC.xyz);
99
czm_ray ray = czm_ray(vec3(0.0), direction);
1010

11-
czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, czm_ellipsoid_center, czm_ellipsoid_inverseRadii);
11+
czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid);
1212
if (!czm_isEmpty(intersection))
1313
{
1414
gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);

Source/Shaders/EllipsoidFS.glsl

+2-2
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ void main()
7373

7474
// March ray forward to intersection with larger sphere and find
7575
// actual intersection point with ellipsoid.
76-
czm_ellipsoidNew(ellipsoidCenter, u_radii);
76+
czm_ellipsoid ellipsoid = czm_ellipsoidNew(ellipsoidCenter, u_radii);
7777
czm_ray ray = czm_ray(t * direction, direction);
78-
czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, czm_ellipsoid_center, czm_ellipsoid_inverseRadii);
78+
czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid);
7979

8080
if (czm_isEmpty(intersection))
8181
{

Source/Shaders/GlobeFS.glsl

+3-4
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,7 @@ void main()
278278
float fadeOutDist = u_lightingFadeDistance.x;
279279
float fadeInDist = u_lightingFadeDistance.y;
280280
if (czm_sceneMode != czm_sceneMode3D) {
281-
czm_getWgs84EllipsoidEC();
282-
vec3 radii = czm_ellipsoid_radii;
281+
vec3 radii = czm_getWgs84EllipsoidEC().radii;
283282
float maxRadii = max(radii.x, max(radii.y, radii.z));
284283
fadeOutDist -= maxRadii;
285284
fadeInDist -= maxRadii;
@@ -377,7 +376,7 @@ void main()
377376
}
378377

379378
#if defined(PER_FRAGMENT_GROUND_ATMOSPHERE) && (defined(ENABLE_DAYNIGHT_SHADING) || defined(ENABLE_VERTEX_LIGHTING))
380-
czm_getWgs84EllipsoidEC();
379+
czm_ellipsoid ellipsoid = czm_getWgs84EllipsoidEC();
381380

382381
float mpp = czm_metersPerPixel(vec4(0.0, 0.0, -czm_currentFrustum.x, 1.0));
383382
vec2 xy = gl_FragCoord.xy / czm_viewport.zw * 2.0 - vec2(1.0);
@@ -386,7 +385,7 @@ void main()
386385
vec3 direction = normalize(vec3(xy, -czm_currentFrustum.x));
387386
czm_ray ray = czm_ray(vec3(0.0), direction);
388387

389-
czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, czm_ellipsoid_center, czm_ellipsoid_inverseRadii);
388+
czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid);
390389

391390
vec3 ellipsoidPosition = czm_pointAlongRay(ray, intersection.start);
392391
ellipsoidPosition = (czm_inverseView * vec4(ellipsoidPosition, 1.0)).xyz;

Source/Shaders/GlobeVS.glsl

+1-2
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,7 @@ void main()
176176
#endif
177177

178178
#ifdef APPLY_MATERIAL
179-
czm_getWgs84EllipsoidEC();
180-
float northPoleZ = czm_ellipsoid_radii.z;
179+
float northPoleZ = czm_getWgs84EllipsoidEC().radii.z;
181180
vec3 northPolePositionMC = vec3(0.0, 0.0, northPoleZ);
182181
vec3 ellipsoidNormal = normalize(v_positionMC); // For a sphere this is correct, but not generally for an ellipsoid.
183182
vec3 vectorEastMC = normalize(cross(northPolePositionMC - v_positionMC, ellipsoidNormal));

0 commit comments

Comments
 (0)