precision highp float; precision highp sampler3D; #include "parameters" #include "functions" uniform vec3 sunDirection; in vec3 vCameraPosition; in vec3 vRayDirection; in vec3 vEllipsoidCenter; layout(location = 0) out vec4 outputColor; #include in vec3 vColor; void main() { #if !defined(PERSPECTIVE_CAMERA) outputColor = vec4(0.0); discard; // Rendering celestial objects without perspective doesn't make sense. #endif // !defined(PERSPECTIVE_CAMERA) #ifdef BACKGROUND vec3 cameraPosition = vCameraPosition - vEllipsoidCenter; vec3 rayDirection = normalize(vRayDirection); float r = length(cameraPosition); float mu = dot(cameraPosition, rayDirection) / r; if (RayIntersectsGround(r, mu)) { discard; } vec3 transmittance; vec3 radiance = GetSkyRadiance( vCameraPosition - vEllipsoidCenter, normalize(vRayDirection), 0.0, sunDirection, transmittance ); radiance += transmittance * vColor; outputColor = vec4(radiance, 1.0); #else // BACKGROUND outputColor = vec4(vColor, 1.0); #endif // BACKGROUND #include }