POV-Ray : Newsgroups : povray.binaries.images : Ghurghusht: artifacts at dawn : Re: Ghurghusht: artifacts at dawn Server Time
31 Jul 2024 02:29:50 EDT (-0400)
  Re: Ghurghusht: artifacts at dawn  
From: Jörg 'Yadgar' Bleimann
Date: 9 Jun 2010 23:26:41
Message: <4c105b71@news.povray.org>
High!

On 06/10/2010 04:44 AM, Dave Blandston wrote:
>> Now playing: Twilight (Vangelis) - how matching!
>
> Always good music!

And I thought you were a metalhead... I'm quite amazed!

> Why not post the entire scene code? I'm not very experienced with media, but the
> bright spots on the hills are very interesting. I will try to help you if I can.

O.k., but beware, its VERY long - some 1500 lines!

// Ghurghusht and the Shams System

// Credits:
// Atmosphere: Bruno Cabasson
// Water: Christoph Hormann

#include "functions.inc"

#declare ani=0; // animation flag (if mapping = 0)
#declare mapping=0; // toggles generating a cylindrical map of Ghurghusht
#declare greymap=3; // 0 = physical map, 1 = 8-bit grayscale map, 2 = 
16-bit grayscale map, 3 = 24-bit map
#declare legend=0; // toggles rendering map legend only (if mapping != 0)
#declare ridges=2; // switches between various patterns for isosurface
#declare os=1; // operating system: 0 = Linux, 1 = Windows
#declare tcm=0; // terrain calculation mode: 0 = isosurface, 1 = mesh2
#declare test=0; // 0 = full globe, 1 = lake around Sitara Insula only
#declare rds=0; // radiosity switch

#if (ani=1)
   #declare mapping=0;
#end

#if (mapping)
   #declare rds=0;
#end

#if (mapping=2)
   #declare greymap=1;
#end

// Positions of planets and moons

// Column 0: orbital semi-major axis (to Shams or the respective planet) 
in kilometres
// Column 1: radius in x dimension, in kilometres
// Column 2: radius in y dimension, in kilometres (if oblateness is 
given then stated as -1)
// Column 3: radius in z dimension, in kilometres (if oblateness is 
given then stated as -1)
// Column 4: axial tilt in degrees (planets: relative to orbit around 
Shams, moons: relative to planet's equatorial plane)
// Column 5: orbital inclination in degrees (planets: relative to 
ecliptic, moons: relative to planet's equatorial plane)
// Column 6: orbital eccentricity
// Column 7: perihelion argument (degrees; if variable then stated als -1)
// Column 8: longitude of ascending node (degrees; if variable then 
stated als -1)
// Column 9: oblateness (not taken into account if different radii 
explicitly stated)
// Column 10: declination of north pole (degrees)
// Column 11: right ascension of north pole (degrees!)
// Column 12: albedo (if irrelevant (Shams) stated as -1)




// begin modifications according to Bruno Cabasson's TerraPOV tutorial 
(2009)

global_settings
{
     #if (version < 3.7 & !mapping)
       assumed_gamma 1
       adc_bailout 0.001
     #end
     max_trace_level 20
     #if (rds) radiosity { } #end
}

#declare TP_PLANET_RADIUS = 5124.6666;

#declare TP_BASE_RAYLEIGH_POWER = 6.7;  // Constant
#declare TP_RAYLEIGH_FACTOR = 0.35; // User defined
#declare _tp_rayleigh_power = TP_BASE_RAYLEIGH_POWER*TP_RAYLEIGH_FACTOR;

#declare TP_ATMO_THICKNESS = 100; // original value: 50
#declare TP_RAYLEIGH_DENSITY_MAX = 0.15; // original value: 1

#declare TP_RAYLEIGH_AMOUNT = 2.3;

#declare _tp_rayleigh_density = density
{
     function
     {
 
TP_RAYLEIGH_DENSITY_MAX*exp(-_tp_rayleigh_power*(sqrt(x*x+(y+TP_PLANET_RADIUS)*(y+TP_PLANET_RADIUS)+z*z)

- TP_PLANET_RADIUS)/TP_ATMO_THICKNESS)
     }
}

#declare TP_RAYLEIGH_SCATTERING_COLOR = rgb <0.135, 0.33, 1>;

#declare TP_ATMO_INTERVALS = 3; // Necessary for good integration
#declare TP_ATMO_SAMPLES = 3;
#declare TP_ATMO_METHOD = 3; // Adaptive

#declare TP_ATMO_BOTTOM = 0;

#declare _tp_rayleigh_media =
media
{
   method TP_ATMO_METHOD
   intervals TP_ATMO_INTERVALS
   samples TP_ATMO_SAMPLES
   scattering
   {
     4, TP_RAYLEIGH_AMOUNT*TP_RAYLEIGH_SCATTERING_COLOR/TP_ATMO_THICKNESS
     extinction 1
   }
   density
   {
     _tp_rayleigh_density
   }
}

#declare _tp_rayleigh_atmosphere = difference
{
     sphere {0, TP_PLANET_RADIUS + TP_ATMO_BOTTOM + TP_ATMO_THICKNESS 
translate -TP_PLANET_RADIUS*y}
     sphere {0, TP_PLANET_RADIUS + TP_ATMO_BOTTOM translate 
-TP_PLANET_RADIUS*y}
     hollow
     pigment {rgbt 1}
     interior {media{_tp_rayleigh_media}}
     translate TP_PLANET_RADIUS*y
}


// end modifications according to Bruno Cabasson's TerraPOV tutorial (2009)


#if (os=0)
   #declare fontpath="/media/disk1part9/fonts/";
#else
   #declare fontpath="D:/WINDOWS/Fonts/";
#end

#declare S =
function { x*x + y*y + z*z -1 }

#declare Terrain_Part1_Function=
function
{
   pattern
   {
     granite
     scale 10
     poly_wave 0.333
   }
}

#declare Terrain_Part2_Function=
function
{
   pattern
   {
     bozo
   }
}

#declare Terrain_Part3_Function=
function
{
   pattern
   {
     ripples
     scale 10
     turbulence 0.5
   }
}

#declare P_Average =
pigment
{
   average
   pigment_map
   {
     [0.5 granite scale 10 poly_wave 0.333 ]
     [1 spherical scale 10 turbulence 0.5 poly_wave 0.333 ]
     [0.025 crackle scale 0.2 turbulence 1 ]
   }
}

#declare Terrain_Part4_Function=
function
{
   pigment { P_Average }
}



#switch (ridges)
   #case (0)
     #declare Terrain_Function=
     function { S(x, y, z) + Terrain_Part1_Function (x*50, y*50, 
z*50)*0.02 + Terrain_Part2_Function (x, y, z)*0.01 }
   #break
   #case (1)
     #declare Terrain_Function=
     function { S(x, y, z) + Terrain_Part3_Function (x*50, y*50, z*50)*0.05
              + Terrain_Part2_Function (x, y, z)*0.01 }
   #break
   #case (2)
     #declare Terrain_Function=
     function { S(x, y, z) + Terrain_Part4_Function (x*50, y*50, 
z*50).gray*0.05
              + Terrain_Part2_Function (x, y, z)*0.01 }
   #break
#end





#if (!mapping)
   #declare R1=seed(1747);
   #declare R2=seed(1969);



   union
   {
     sphere // Qais
     {
       0, 1
       texture
       {
	pigment
	{
	  gradient y
	  color_map
	  {
	    [0      rgb 1]
	    [0.027  rgb 1]
	    [0.0274 rgb 0.85]
	    [0.0304 rgb 0.85]
	    [0.0324  rgb 1]
	    [0.0329  rgb 1]
	    [0.0411 rgb 0.6]
	    [0.0418 rgb 0.6]
	    [0.0429 rgb 1]
	    [0.0708  rgb 1]
	    [0.0712 rgb 0.96]
	    [0.0731 rgb 0.96]
	    [0.0742  rgb 1]
	    [0.0776 rgb <0.8, 0.9, 1>]
	    [0.0783 rgb <0.8, 0.9, 1>]
	    [0.079 rgb 1]
	    [0.0845 rgb 1]
	    [0.0848 rgb <0.66, 0.85, 1>]
	    [0.0976 rgb <0.66, 0.85, 1>]
	    [0.0987 rgb 1]
	    [0.1102 rgb 1]
	    [0.1108 rgb 0.88]
	    [0.1128 rgb 0.88]
	    [0.1132 rgb 1]
	    [0.1339 rgb 1]
	    [0.1452 rgb <0.56, 0.76, 1>]
	    [0.1501 rgb <0.56, 0.76, 1>]
	    [0.1537 rgb 1]
	    [0.1639 rgb 1]
	    [0.1646 rgb 0.91]
	    [0.1692 rgb 0.91]
	    [0.1784 rgb 1]
	    [0.1987 rgb 1]
	    [0.1999 rgb <0.3, 0.7, 1>]
	    [0.2473 rgb <0.3, 0.7, 1>]
	    [0.2478 rgb 1]
	    [0.2538 rgb 1]
	    [0.2541 rgb <0.17, 0.53, 1>]
	    [0.2798 rgb <0.17, 0.53, 1>]
	    [0.2901 rgb 1]
	    [0.2976 rgb 1]
	    [0.2995 rgb <0.04, 0.45, 1>]
	    [0.3524 rgb <0, 0.3, 1>]
	    [0.4634 rgb <0, 0, 0.95>]
	    [0.4982 rgb <0.2, 0.59, 1>]
	    [0.5052 rgb <0.12, 0.56, 1>]
	    [0.5475 rgb <0, 0, 0.97>]
	    [0.6789 rgb <0.06, 0.47, 1>]
	    [0.6967 rgb <0.3, 0.8, 1>]
	    [0.6978 rgb 0.35]
	    [0.7032 rgb 0.35]
	    [0.7035 rgb 0.86]
	    [0.7472 rgb 0.89]
	    [0.7498 rgb <0.42, 0.86, 1>]
	    [0.7767 rgb <0.42, 0.86, 1>]
	    [0.7782 rgb 0.93]
	    [0.8245 rgb 0.93]
	    [0.8261 rgb <0.45, 0.89, 1>]
	    [0.8673 rgb <0.45, 0.89, 1>]
	    [0.8702 rgb 0.75]
	    [0.8712 rgb 0.75]
	    [0.8713 rgb 0.43]
	    [0.8756 rgb 0.43]
	    [0.876  rgb 1]
	    [0.8903 rgb 1]
	    [0.8916 rgb 0.68]
	    [0.8923 rgb 0.68]
	    [0.8928 rgb 1]
	    [0.9139 rgb 1]
	    [0.9142 rgb 0.53]
	    [0.9187 rgb 0.53]
	    [0.9193 rgb 1]
	    [0.9372 rgb 1]
	    [0.9398 rgb 0.48]
	    [0.9508 rgb 0.48]
	    [0.9682 rgb 1]
	    [1      rgb 1]
	  }
           turbulence 0.02
           scale 2
           translate y
         }

	finish { ambient 0.0005 diffuse 1 brilliance 0.4 }
       }
     }
     difference
     {
       cylinder
       {
	<0, -0.002, 0>, <0, 0.002, 0>, 2.4
       }
       cylinder
       {
	<0, -0.0021, 0>, <0, 0.0021, 0>, 1.5
       }
       double_illuminate
       texture
       {
	pigment
	{
	  cylindrical
	  color_map
	  {
	    [0 rgbf <1, 0.97, 0.985, 0.6>]
	    [0.0092 rgbf <1, 0.97, 0.985, 0.6>]
	    [0.0092 rgbf <0.65, 0.62, 0.47, 0.14>]
	    [0.0107 rgbf <0.65, 0.62, 0.47, 0.14>]
	    [0.0107 rgbf <1, 0.97, 0.985, 0.6>]
	    [0.0127 rgbf <1, 0.97, 0.985, 0.6>]
	    [0.0127 rgbf <0.75, 0.696, 0.672, 0.36>]
	    [0.0141 rgbf <0.75, 0.696, 0.672, 0.36>]
	    [0.0141 rgbf <1, 0.97, 0.985, 0.6>]
	    [0.0184 rgbf <1, 0.97, 0.985, 0.6>]
	    [0.0184 rgbf <1, 1, 1, 0.6>]
	    [0.0205 rgbf <1, 1, 1, 0.6>]
	    [0.0205 rgbf <1, 0.97, 0.985, 0.6>]
	    [0.0321 rgbf <1, 0.97, 0.985, 0.6>]
	    [0.0321 rgbf <0.89, 0.87, 0.834, 0.64>]
	    [0.0373 rgbf <0.89, 0.87, 0.834, 0.64>]
	    [0.0373 rgbf <1, 0.97, 0.985, 0.6>]
	    [0.0452 rgbf <1, 0.97, 0.985, 0.6>]
	    [0.0452 rgbf <0.98, 0.95, 0.81, 0.43>]
	    [0.0487 rgbf <0.98, 0.95, 0.81, 0.43>]
	    [0.0487 rgbf <1, 0.97, 0.985, 0.6>]
	    [0.0532 rgb <1, 0.97, 0.985, 0.6>]
	    [0.0532 rgb <0.97, 0.925, 0.896, 0.51>]	
	    [0.0575 rgb <0.97, 0.925, 0.896, 0.51>]	
	    [0.0575 rgbf <0.683, 0.5904, 0.2164, 0.8>]
	    [0.0603 rgbf <0.683, 0.5904, 0.2164, 0.8>]
	    [0.0603 rgbf <1, 0.963, 0.888, 0.534>]
	    [0.0651 rgbf <1, 0.963, 0.888, 0.534>]
	    [0.0651 rgbf <0.742, 0.7195, 0.6721, 0.248>]
	    [0.0675 rgbf <0.742, 0.7195, 0.6721, 0.248>]
	    [0.0675 rgbf <0.721, 0.612, 0.5139, 0.557>]
	    [0.0692 rgbf <0.721, 0.612, 0.5139, 0.557>]
	    [0.0692 rgbf <0.965, 0.948, 0.8123, 0.092>]
	    [0.0732 rgbf <0.965, 0.948, 0.8123, 0.092>]
	    [0.0732 rgbf <0.7921, 0.78231, 0.6231, 0.47>]
       [0.0762 rgbf <0.7921, 0.78231, 0.6231, 0.47>]
       [0.0762 rgbf <0.7812, 0.7526, 0.5931, 0.53>]
       [0.0804 rgbf <0.7812, 0.7526, 0.5931, 0.53>]
       [0.0804 rgbf <0.7415, 0.7126, 0.6312, 0.12>]
       [0.0829 rgbf <0.7415, 0.7126, 0.6312, 0.12>]
       [0.0829 rgbf <0.6712, 0.6623, 0.4894, 0.73>]
       [0.0853 rgbf <0.6712, 0.6623, 0.4894, 0.73>]
       [0.0853 rgbf <0.5921, 0.5823, 0.5561, 0.376>]
       [0.0881 rgbf <0.5921, 0.5823, 0.5561, 0.376>]
       [0.0881 rgbf <0.3126, 0.2531, 0.0037, 0.621>] 

       [0.09 rgbf <0.3126, 0.2531, 0.0037, 0.621>]
	    [0.09 rgbf <1, 0.97, 0.985, 0.6>]
	    [0.09 rgbf <0.2, 0.14, 0.04, 0.045>]
	    [0.1023 rgbf <0.2, 0.14, 0.04, 0.045>]
	    [0.1023 rgbf <1, 0.95, 0.94, 0.5>]
	    [0.1065 rgbf <1, 0.95, 0.94, 0.5>]
	    [0.1065 rgbf <0.45, 0.38, 0.29, 0.19>]
	    [0.1083 rgbf <0.45, 0.38, 0.29, 0.19>]	
	    [0.1083 rgbf <0.93, 0.85, 0.81, 0.55>]	
	    [0.1102 rgbf <0.93, 0.85, 0.81, 0.55>]	
	    [0.1102 rgbf <0.74, 0.61, 0.46, 0.21>]	
	    [0.1108 rgbf <0.74, 0.61, 0.46, 0.21>]
	    [0.1108 rgbf <0.51, 0.457, 0.219, 0.77>]	    	
	    [0.1134 rgbf <0.51, 0.457, 0.219, 0.77>]	    	
	    [0.1134 rgbf <0.49, 0.416, 0.193, 0.92>]	    	
	    [0.1156 rgbf <0.49, 0.416, 0.193, 0.92>]	    	
	    [0.1156 rgbf <0.692, 0.623, 0.523, 0.14>]
	    [0.1181 rgbf <0.692, 0.623, 0.523, 0.14>]	    	    	    	    	
	    [0.1181 rgbf <0.815, 0.761, 0.4134, 0.69>]
	    [0.1197 rgbf <0.815, 0.761, 0.4134, 0.69>]	    	    	    	    	 
   	    	    	    	    	    	
	    [0.1197 rgbf <0.512, 0.412, 0.3218, 0.92>]	    	    	    	    	 
   	    	    	    	    	    	
	    [0.1215 rgbf <0.512, 0.412, 0.3218, 0.92>]
	    [0.1215 rgbf <0.478, 0.423, 0.2951, 0.85>]	
	    [0.1228 rgbf <0.478, 0.423, 0.2951, 0.85>]
	    [0.1228 rgbf <0.1946, 0.1725, 0.0842, 0.94>]
	    [0.1251 rgbf <0.1946, 0.1725, 0.0842, 0.94>]
	    [0.1251 rgbf <0.8153, 0.7841, 0.7522, 0.25>]	    	    	    	 
     	    	    	    	    	    	    	    	    	    	
	    [0.1275 rgbf <0.8153, 0.7841, 0.7522, 0.25>]
	    [0.1275 rgbf <0.5278, 0.5005, 0.3928, 0.68>]
	    [0.1299 rgbf <0.5278, 0.5005, 0.3928, 0.68>]	
	    [0.1299 rgbf <0.8039, 0.7869, 0.7521, 0.29>]
	    [0.1327 rgbf <0.8039, 0.7869, 0.7521, 0.29>]
	    [0.1327 rgbf <0.5732, 0.5412, 0.3412, 0.67>]
	    [0.1339 rgbf <0.5732, 0.5412, 0.3412, 0.67>]
	    [0.1339 rgbf <0.951, 0.9082, 0.8312, 0.2209>]
	    [0.1374 rgbf <0.951, 0.9082, 0.8312, 0.2209>]
	    [0.1374 rgbf <0.6731, 0.6233, 0.4678, 0.4761>]
	    [0.14 rgbf <0.6731, 0.6233, 0.4678, 0.4761>]
	    [0.14 rgbf <0.8592, 0.8492, 0.5782, 0.2375>]	    	
	    [0.1415 rgbf <0.8592, 0.8492, 0.5782, 0.2375>]	    	
	    [0.1415 rgbf <0.7572, 0.6531, 0.5905, 0.4231>]
	    [0.1447 rgbf <0.7572, 0.6531, 0.5905, 0.4231>]
	    [0.1447 rgbf <0.4824, 0.4245, 0.3126, 0.8634>]	    	    	
	    [0.1476 rgbf <0.4824, 0.4245, 0.3126, 0.8634>]
	    [0.1476 rgbf <0.5123, 0.4563, 0.2195, 0.7361>]
	    [0.1503 rgbf <0.5123, 0.4563, 0.2195, 0.7361>]
	    [0.1503 rgbf <0.3735, 0.3129, 0.1938, 0.0412>]	
	    [0.1523 rgbf <0.3735, 0.3129, 0.1938, 0.0412>]
	    [0.1523 rgbf <0.4123, 0.3563, 0.2453, 0.0932>]
	    [0.1547 rgbf <0.4123, 0.3563, 0.2453, 0.0932>]
	    [0.1547 rgbf <0.4593, 0.4126, 0.2231, 0.4231>]	    	    	    	
	    [0.1601 rgbf <0.4593, 0.4126, 0.2231, 0.4231>]
	    [0.1601 rgbf <0.4003, 0.3521, 0.1963, 0.0214>]
	    [0.1634 rgbf <0.4003, 0.3521, 0.1963, 0.0214>]
	    [0.1651 rgbf <0.4003, 0.3521, 0.1963, 0.0214>]	    	    	    	 
    	    	    	
	    [0.1651 rgbf <0.5124, 0.4751, 0.2768, 0.2544>]
	    [0.1678 rgbf <0.5124, 0.4751, 0.2768, 0.2544>]
	    [0.1678 rgbf <0.5069, 0.4457, 0.2989, 0.3444>]	    	    	
	    [0.1695 rgbf <0.5069, 0.4457, 0.2989, 0.3444>]	    	    	    	
	    [0.1695 rgbf <0.5241, 0.4321, 0.1295, 0.9542>]	
	    [0.1732 rgbf <0.5241, 0.4321, 0.1295, 0.9542>]
	    [0.1732 rgbf <0.4721, 0.4109, 0.1758, 0.4682>]
	    [0.176 rgbf <0.4721, 0.4109, 0.1758, 0.4682>]
	    [0.176 rgbf <0.4832, 0.4201, 0.2254, 0.2156>]
	    [0.1776 rgbf <0.4832, 0.4201, 0.2254, 0.2156>]	    	    	    	    	
	    [0.1776 rgbf <0.4369, 0.3974, 0.2405, 0.1198>]
	    [0.1805 rgbf <0.4369, 0.3974, 0.2405, 0.1198>]
	    [0.1805 rgbf <0.5823, 0.5172, 0.4423, 0.5768>]
	    [0.1828 rgbf <0.5823, 0.5172, 0.4423, 0.5768>]
	    [0.1828 rgbf <0.5492, 0.5047, 0.4782, 0.315>]
	    [0.1857 rgbf <0.5492, 0.5047, 0.4782, 0.315>]
	    [0.1857 rgbf <0.5392, 0.4902, 0.4248, 0.229>]
	    [0.1891 rgbf <0.5392, 0.4902, 0.4248, 0.229>]	    	
	    [0.1891 rgbf <0.5205, 0.4721, 0.4004, 0.311>]
	    [0.1916 rgbf <0.5205, 0.4721, 0.4004, 0.311>]
	    [0.1916 rgbf <0.5085, 0.4631, 0.3815, 0.782>]
	    [0.197 rgbf <0.5085, 0.4631, 0.3815, 0.782>]
	    [0.197 rgbf <0.4581, 0.413, 0.3241, 0.762>]
	    [0.1994 rgbf <0.4581, 0.413, 0.3241, 0.762>]	    	    	    	 
      	    	    	    	
	    [0.1994 rgbf <0.4329, 0.3571, 0.2554, 0.1563>]
	    [0.2041 rgbf <0.4329, 0.3571, 0.2554, 0.1563>]	    	    	    	 
    	    	     	    	    	    	     	
	    [0.2041 rgbf <0.4003, 0.32, 0.2136, 0.537>]
	    [0.2067 rgbf <0.4003, 0.32, 0.2136, 0.537>]
	    [0.2067 rgbf <0.4153, 0.3041, 0.1942, 0.3478>]	    	
	    [0.2089 rgbf <0.4153, 0.3041, 0.1942, 0.3478>]
	    [0.2089 rgbf <0.3999, 0.3128, 0.1911, 0.3237>]	    	    	    	
	    [0.2112 rgbf <0.3999, 0.3128, 0.1911, 0.3237>]
	    [0.2112 rgbf <0.3745, 0.2984, 0.1736, 0.5123>]
	    [0.2137 rgbf <0.3745, 0.2984, 0.1736, 0.5123>]	    	    	    	 
    	    	    	    	    	
	    [0.2137 rgbf <0.3763, 0.2742, 0.1836, 0.221>]
	    [0.2154 rgbf <0.3763, 0.2742, 0.1836, 0.221>]
	    [0.2154 rgbf <0.3423, 0.2532, 0.1325, 0.198>]
	    [0.2181 rgbf <0.3423, 0.2532, 0.1325, 0.198>]
	    [0.2181 rgbf <0.3321, 0.2409, 0.1452, 0.209>]	    	    	    	
	    [0.22 rgbf <0.3321, 0.2409, 0.1452, 0.209>]
	    [0.22 rgbf <0.11, 0.045, 0.001, 1>]
	    [0.2223 rgbf <0.11, 0.045, 0.001, 1>]
	    [0.2223 rgbf <0.3163, 0.2376, 0.1508, 0.2842>]
	    [0.2246 rgbf <0.3163, 0.2376, 0.1508, 0.2842>]	    	    	
	    [0.2246 rgbf <0.3004, 0.2153, 0.1276, 0.3412>]
	    [0.2275 rgbf <0.3004, 0.2153, 0.1276, 0.3412>]
	    [0.2275 rgbf <0.2987, 0.2204, 0.1264, 0.3934>]	    	    	
	    [0.23 rgbf <0.2987, 0.2204, 0.1264, 0.3934>]
	    [0.23 rgbf <0.2835, 0.2175, 0.1003, 0.2145>]
	    [0.2331 rgbf <0.2835, 0.2175, 0.1003, 0.2145>]
	    [0.2331 rgbf <0.2809, 0.1984, 0.0921, 0.3674>]
	    [0.2367 rgbf <0.2809, 0.1984, 0.0921, 0.3674>]
	    [0.2367 rgbf <0.279, 0.1912, 0.0909, 0.4582>]
	    [0.2389 rgbf <0.279, 0.1912, 0.0909, 0.4582>]	    	    	    	 
   	    	    	    	
	    [0.2389 rgbf <0.2659, 0.1738, 0.1184, 0.44>]
	    [0.2406 rgbf <0.2659, 0.1738, 0.1184, 0.44>]
	    [0.2406 rgbf <0.2711, 0.166, 0.1053, 0.5693>]
	    [0.2437 rgbf <0.2711, 0.166, 0.1053, 0.5693>]
	    [0.2437 rgbf <0.2523, 0.123, 0.0934, 0.5552>]	    	    	    	
	    [0.2459 rgbf <0.2523, 0.123, 0.0934, 0.5552>]
	    [0.2459 rgbf <0.2401, 0.1264, 0.0894, 0.126>]
	    [0.2483 rgbf <0.2401, 0.1264, 0.0894, 0.126>]	    	    	    	 
   	    	
	    [0.291 rgbf <0.09, 0.035, 0.001, 1>]
	    [0.294 rgb <0.98, 0.94, 0.97, 0.2>]
	    [0.296 rgbf <0.09, 0.035, 0.001, 1>]
	    [0.3289 rgbf <0.092, 0.032, 0.002, 1>]
	    [0.3293 rgbf <0.78, 0.71, 0.21, 0.3>]
	    [0.3299 rgbf <0.78, 0.71, 0.21, 0.3>]
	    [0.3301 rgbf <0.089, 0.029, 0.0017, 0.99>]	
	    [0.3325 rgbf <0.089, 0.029, 0.0017, 0.99>]	    	
	    [0.3325 rgbf <0.34, 0.29, 0.007, 0.32>]	    	    	
	    [0.3333 rgbf <0.34, 0.29, 0.007, 0.32>]	    	    	
	    [0.3333 rgbf <0.09, 0.027, 0.0015, 0.84>]	    	    	
	    [0.3357 rgbf <0.09, 0.027, 0.0015, 0.84>]	    	    	
	    [0.3357 rgbf <0.37, 0.29, 0.013, 0.54>]
	    [0.3364 rgbf <0.37, 0.29, 0.013, 0.54>]	    	    	    	    	    	
	    [0.3365 rgbf <0.09, 0.027, 0.0015, 0.84>]
	    [0.3397 rgbf <0.09, 0.027, 0.0015, 0.84>]
	    [0.34   rgbf <0.54, 0.49, 0.09, 0.23>]
	    [0.3412  rgbf <0.53, 0.497, 0.085, 0.25>]
	    [0.3415 rgbf <0.09, 0.027, 0.0015, 0.84>]
	    [0.3421 rgbf <0.09, 0.027, 0.0015, 0.84>]	
	    [0.3421 rgbf <0.1034, 0.0256, 0.008, 0.87>]	
	    [0.3438 rgbf <0.1034, 0.0256, 0.008, 0.87>]
	    [0.3438 rgbf <0.126, 0.0463, 0.0042, 0.912>]	
	    [0.3449 rgbf <0.126, 0.0463, 0.0042, 0.912>]
	    [0.3449 rgbf <0.115, 0.0408, 0.0052, 0.905>]
	    [0.3465 rgbf <0.115, 0.0408, 0.0052, 0.905>]
	    [0.3465 rgbf <0.105, 0.0467, 0.0053, 0.942>]
	    [0.3479 rgbf <0.105, 0.0467, 0.0053, 0.942>]
       [0.3479 rgbf <0.109, 0.0504, 0.0023, 0.921>]
       [0.3482 rgbf <0.109, 0.0504, 0.0023, 0.921>]
	    [0.3482 rgbf <0.116, 0.0532, 0.0038, 0.829>]
	    [0.3509 rgbf <0.116, 0.0532, 0.0038, 0.829>]
	    [0.3509 rgbf <0.1362, 0.07631, 0.0091, 0.821>]
	    [0.3521 rgbf <0.1362, 0.07631, 0.0091, 0.821>]
	    [0.3521 rgbf <0.0921, 0.0683, 0.0073, 0.859>]
	    [0.3529 rgbf <0.0921, 0.0683, 0.0073, 0.859>]
	    [0.3529 rgbf <0.1582, 0.0921, 0.0089, 0.912>]
	    [0.3576 rgbf <0.1582, 0.0921, 0.0089, 0.912>]
	    [0.3576 rgbf <0.1542, 0.0931, 0.0082, 0.921>]
	    [0.3592 rgbf <0.1542, 0.0931, 0.0082, 0.921>]
	    [0.3592 rgbf <0.1321, 0.1021, 0.0079, 0.949>]
	    [0.3607 rgbf <0.1321, 0.1021, 0.0079, 0.949>]
	    [0.3607 rgbf <0.1129, 0.0929, 0.0081, 0.841>]
	    [0.3613 rgbf <0.1129, 0.0929, 0.0081, 0.841>]
	    [0.3613 rgbf <0.1031, 0.0842, 0.0072, 0.846>]
	    [0.3628 rgbf <0.1031, 0.0842, 0.0072, 0.846>]
	    [0.3628 rgbf <0.0953, 0.0472, 0.0074, 0.869>]
	    [0.3648 rgbf <0.0953, 0.0472, 0.0074, 0.869>]
	    [0.3648 rgbf <0.0973, 0.0381, 0.0037, 0.563>]
	    [0.3657 rgbf <0.0973, 0.0381, 0.0037, 0.563>]
	    [0.3657 rgbf <0.0982, 0.0429, 0.0053, 0.583>]
	    [0.3682 rgbf <0.0982, 0.0429, 0.0053, 0.583>]
	    [0.3682 rgbf <0.4721, 0.4127, 0.0153, 0.109>]
	    [0.3705 rgbf <0.4721, 0.4127, 0.0153, 0.109>]
	    [0.3705 rgbf <0.1023, 0.0357, 0.0003, 0.984>]
	  }
	  scale 2.4
	}
	finish { ambient 0.05 diffuse 1 brilliance 0.2 }
       }
     }
     scale <63879, 58782, 63879>
     rotate <-8.6, 0, 27.7>
   }

  #if (!ani)
     #declare Pos_Ghurghusht = 3961542  * <sin(radians(270)), 0, 
cos(radians(270))>;
     #declare Rot_Ghurghusht = <0, 153, 0>;
   #else
     #declare Pos_Ghurghusht = 3961542  * <sin(radians(50)), 0, 
cos(radians(50))>;
   #end

   #declare Pos_Shams = <-104720000, 0, 0>;

   light_source  // Shams
   {
     Pos_Shams
     color rgb <1, 1, 0.95>
   }

   sphere
   {
     (Pos_Shams-Pos_Ghurghusht)/100, 6230
     texture
     {
       pigment { color rgb <1, 1, 0.95> }
       finish { ambient 1 diffuse 0 }
     }
     no_shadow
   }


#end

#declare T_Ghurghusht=
texture
{
   pigment { color rgb <0.98, 0.85, 0.45> }
   finish { ambient 0.003 diffuse 1 brilliance 0.98 }
}

#if (tcm=0)
   #declare Ghurghusht =
     isosurface
     {
       function { Terrain_Function(x, y, z) }
       contained_by { sphere { 0, 1 } }
       max_gradient 5
       accuracy 0.0001
       double_illuminate
       texture { T_Ghurghusht }
       scale 5178
     }
#else
   #declare hf=
   pigment
   {
     image_map
     {
       png "tiles/ghurghusht360_n05_040.png"
     }
   }

   #declare sl=5124.6666;
   #declare rng=31.5519+6.2452;
   #declare ll=sl-6.2452;
   #declare long=40;
   #declare lat=5;

   #declare Ghurghusht =
   mesh2
   {
     vertex_vectors
     {
       1440000 // 1200 * 1200
       #declare a=0;
       #while (a<1200)
	#declare b=0;
	#while (b<1200)
	  #declare rd=eval_pigment(hf, <1/2400+b/1200, 2399/2400-a/1200, 0>).red;
	  #declare gr=eval_pigment(hf, <1/2400+b/1200, 2399/2400-a/1200, 
0>).green/256;
	  #declare bl=eval_pigment(hf, <1/2400+b/1200, 2399/2400-a/1200, 
0>).blue/65536;
	 
(ll+(rd+gr+bl)*rng)*<sin(radians(-long-(10/3)*(1/2400+b/1200)))*cos(radians(lat-(10/3)*(1/2400+a/1200))),

sin(radians(lat-(10/3)*(1/2400+a/1200))), 
cos(radians(-long-(10/3)*(1/2400+b/1200)))*cos(radians(lat-(10/3)*(1/2400+a/1200)))>
	  #declare b=b+1;
	#end
	// #warning concat("Assigning vectors for line ", str(a, 4, 0))
	#declare a=a+1;
       #end
     }
     face_indices
     {
       2875202 // 1199 * 1199 * 2
       #declare a = 0;
       #while (a < 1199)
	#declare b = 0;
	#while (b < 1199)
	  <1200*a + b, 1200*a + b+1, 1200*(a+1) + b>,
	  <1200*a + b+1, 1200*(a+1) + b+1, 1200*(a+1) + b>
	  #if(b<(l-2))
	    ,
	  #end
	  #declare b = b+1;
	#end
	#warning concat("Parsing lines ", str(a, 4, 0), " and ", str(a+1, 4, 
0),".")
	#declare a = a+1;
       #end
     }
     texture { T_Ghurghusht }
   }
#end

#if (!mapping)

   #declare Box_Cutout =
   box
   {
     <-1, -10, -1>, <1, 30, 1>
     #declare surfPos = trace(Ghurghusht, 0, 
<sin(radians(-140.5905556))*cos(radians(0.368888888)), 
sin(radians(0.368888888)), 
cos(radians(-140.5905556))*cos(radians(0.368888888))>);
     rotate <0, 0, 90-0.368888888>
     rotate <0, -50.5905556, 0>
     translate surfPos
   }


   union
   {
     #if (test = 1)
       intersection
       {
	union
         {
     #end
	  object { Ghurghusht }
	  sphere
           {
	    0, 1
	    material {
	      texture {
		pigment {
		  color rgbt <1, 1, 1, 1>
		}
		finish {
		  diffuse 0

		  reflection {
		    <0.03, 0.03, 0.04>, <0.75, 0.75, 1>
		    exponent 1.2
		    falloff 5
		    fresnel on
		  }

		  phong 1
		  phong_size 2500000
		}
		normal
		{
		  bozo 1.5
		  bump_size 0.5
		  scale 0.00000013
		}
		
		
	      }
	      interior {
		ior 1.34
	      }
	    }
	    scale 5178*0.9897 // sea level at 5124.6666 kms
	  }
	  sphere
	  {
	    0, 1
	    hollow
	    texture
	    {
	      pigment { color rgb <0, 0, 0.5> }
	      finish { ambient 0.05 diffuse 1 brilliance 1 }
	    }
	    scale 5178*0.98969999 // preliminary sea floor at 5124.666548 kms
	  }
     #if (test = 1)
         }
	object { Box_Cutout }
	bounded_by { object { Box_Cutout } }
       }
     #end
     #if (test = 0)
       object { _tp_rayleigh_atmosphere }
     #end

     #if (ani=1)
       rotate y*(clock/10)
     #end
     rotate Rot_Ghurghusht
     translate Pos_Ghurghusht
   }

   #if (test = 1)
     sky_sphere
     {
       pigment
       {
	gradient y
	color_map
	{
	  [0 rgb <0.8, 1, 1>]
	  [0.15 rgb <0, 0.7, 1>]
	  [0.3 rgb <0, 0.3, 1>]
	  [1   rgb <0, 0.3, 1>]
	}
	rotate <0, 0, 90-0.368888888>
	rotate <0, -50.5905556, 0>
       }
     }
   #end

   #declare view=12;
   #if (test=1)
     #declare view=12;
   #end
   #switch (view)
     #case (0)
       #declare camPos=Pos_Ghurghusht + 20000 * <sin(radians(300)), 0, 
cos(radians(300))>;
       #declare camLook=Pos_Ghurghusht-<7200, 0, 0>;
       #declare camAng=1.5;
       #declare surfPos=<-1, 0, 0>;
     #break
     #case (1)
       #declare camPos=Pos_Ghurghusht + 20000 * <sin(radians(270)), 0, 
cos(radians(270))>;
       #declare camLook=Pos_Ghurghusht;
       #declare camAng=40;
       #declare surfPos=<0, 1, 0>;
     #break
     #case (2)
       #declare lat=0.131666666;
       #declare long=140.902222;
       #declare ht=3000;
       #declare dir=0;
       #declare azi=-89.999;
       #declare camAng=40;
     #break
     #case (3) // equivalent to Cologne, Germany
       #declare lat=51;
       #declare long=7;
       #declare ht=1000;
       #declare dir=0;
       #declare azi=-89.999;
       #declare camAng=40;
     #break
     #case (3.01) // equivalent to Cologne, Germany
       #declare lat=51;
       #declare long=7;
       #declare ht=250;
       #declare dir=0;
       #declare azi=-89.999;
       #declare camAng=40;
     #break
     #case (3.02) // equivalent to Cologne, Germany
       #declare lat=51;
       #declare long=7;
       #declare ht=50;
       #declare dir=0;
       #declare azi=-89.999;
       #declare camAng=40;
     #break
     #case (4) // equivalent to Kabul, Afghanistan
       #declare lat=34.5;
       #declare long=67.75;
       #declare ht=0.0017;
       #declare dir=0;
       #declare azi=0;
       #declare camAng=40;
     #break
     #case (5) // Centlivres Lacus
       #declare lat=-33.54;
       #declare long=110.78;
       #declare ht=0.0017;
       #declare dir=0;
       #declare azi=0;
       #declare camAng=40;
     #break
     #case (6) // substellar point
       #declare lat=0;
       #declare long=90;
       #declare ht=0.0017;
       #declare dir=180;
       #declare azi=0;
       #declare camAng=40;
     #break
     #case (7) // 45 degrees west from substellar point
       #declare lat=0;
       #declare long=45;
       #declare ht=0.0017;
       #declare dir=0;
       #declare azi=0;
       #declare camAng=40;
     #break
     #case (8) // 55 degrees west from substellar point
       #declare lat=0;
       #declare long=35;
       #declare ht=0.0017;
       #declare dir=90;
       #declare azi=89.999;
       #declare camAng=40;
     #break
     #case (9) // 65 degrees west from substellar point
       #declare lat=0;
       #declare long=25;
       #declare ht=0.0017;
       #declare dir=180;
       #declare azi=0;
       #declare camAng=40;
     #break
     #case (10) // 80 degrees west from substellar point
       #declare lat=0;
       #declare long=10;
       #declare ht=0.05;
       #declare dir=90;
       #declare azi=10;
       #declare camAng=40;
     #break
     #case (11) // 90 degrees west from substellar point
       #declare lat=0;
       #declare long=0;
       #declare ht=5;
       #declare dir=90;
       #declare azi=0;
       #declare camAng=40;
     #break
     #case (12) // Schmidt Lacus, Achakzai Peninsula
       #declare lat=0.368888888;
       #declare long=140.5905556;
       #declare ht=0.0017;
       #declare dir=160;
       #declare azi=0;
       #declare camAng=40;
     #break
     #case (13) // 90 degrees east from substellar point
       #declare lat=0;
       #declare long=180;
       #declare ht=0.5;
       #declare dir=270;
       #declare azi=0;
       #declare camAng=40;
     #break
     #case (14) // Test scene for isosurface vs. mesh2 comparison
       #declare lat=1.8;
       #declare long=43.2;
       #declare ht=0.0017;
       #declare dir=315;
       #declare azi=0;
       #declare camAng=40;
     #break
     #case (15) // Rathjens Lacus
       #declare lat=17;
       #declare long=27.8;
       #declare ht=0.0017;
       #declare dir=90;
       #declare azi=0;
       #declare camAng=40;
     #break
     #case (16) // Start point for Ghurghusht Equatorial Flight
       #declare lat=0;
       #declare long=25.53056789;
       #declare ht=35;
       #declare dir=90;
       #declare azi=0;
       #declare camAng=40;
     #break
   #end

   #switch (view)
     #range (0, 1)
       camera
       {
         #if (ani=1)
           sky <-1, 0, 0>
         #else
           sky surfPos
         #end
         location camPos
         look_at camLook
         angle camAng
       }
     #range (2, 16)
       camera
       {
         #declare surfPos = trace(Ghurghusht, 0, 
<sin(radians(-long))*cos(radians(lat)), sin(radians(lat)), 
cos(radians(-long))*cos(radians(lat))>);
         #if (vlength(surfPos)<5178*0.9897)
           #declare surfPos = vnormalize(surfPos)*5178*0.9897; // camera 
over lake
         #end
         #declare camPos = surfPos+vnormalize(surfPos)*ht;
	#declare dirVect = <sin(radians(dir))*cos(radians(azi)), 
sin(radians(azi)), cos(radians(dir))*cos(radians(azi))>;
	#declare camLook=camPos + vrotate(dirVect, <lat-90, -(long-180), 0>);
	#declare camLook=vrotate(camLook, Rot_Ghurghusht);
	#declare camPos =vrotate(camPos, Rot_Ghurghusht);
	#declare camLook=camLook+Pos_Ghurghusht;
         #declare camPos =camPos+Pos_Ghurghusht;



         sky vrotate(surfPos, Rot_Ghurghusht)
         location camPos
         look_at camLook
         angle camAng
       }
     #break
     #case (17)
       camera
       {
         #declare d=300000;
         location d*<sin(radians(40.01)), 0, cos(radians(40.01))>
         look_at 0
         angle 100
       }
     #break
   #end

   #declare v1=camPos-Pos_Ghurghusht;
   #declare v2=Pos_Shams-Pos_Ghurghusht;
   #declare phase_ang=vdot(camPos-Pos_Ghurghusht, 
Pos_Shams-Pos_Ghurghusht)/(vlength(camPos-Pos_Ghurghusht)*vlength(Pos_Shams-Pos_Ghurghusht));
   #declare phase_ang=acos(phase_ang)/(pi/180);
   #warning str(phase_ang, 3, 2)

   #if (!test)
     sky_sphere // random starry sky, to be replaced later on with 
astronomically accurate sky generated from Hipparcos star catalogue
     {
       #declare R1=seed(9843);
       #declare i=0;

horizon
       {
	object
	{
	  union
	  {
	    #while (i<50)
	      sphere
	      {
		0, 0.001
		#declare rn1=rand(R1)*360;
		#declare rn2=asin(rand(R1)*2-1);
		translate <sin(radians(rn1))*cos(rn2), sin(rn2), 
cos(radians(rn1))*cos(rn2)>
	      }
	      #declare i=i+1;
	    #end
	  }
	  color rgb 0,
	  #switch (phase_ang)
	    #range (0, 95)
	      color rgb 0
             #break
	    #range (95, 98)
	      color rgb (1/3)*(phase_ang-95)
             #break
	    #range (98, 180)
	      color rgb 1
             #break
           #end
	}
       }
       #declare i=0;

       {
	object
	{
	  union
	  {
	    #while (i<150)
	      sphere
	      {
		0, 0.00075
		#declare rn1=rand(R1)*360;
		#declare rn2=asin(rand(R1)*2-1);
		translate <sin(radians(rn1))*cos(rn2), sin(rn2), 
cos(radians(rn1))*cos(rn2)>
	      }
	      #declare i=i+1;
	    #end
	  }
	  color rgbf 1,
	  #switch (phase_ang)
	    #range (0, 97)
	      color rgb 0
	    #break
	    #range (97, 100)
	      color rgb (1/3)*(phase_ang-97)
	    #break
	    #range (100, 180)
	      color rgb 1
             #break
	  #end
	}
       }
       #declare i=0;

below horizon
       {
	object
	{
	  union
	  {
	    #while (i<500)
	      sphere
	      {
		0, 0.0006
		#declare rn1=rand(R1)*360;
		#declare rn2=asin(rand(R1)*2-1);
		translate <sin(radians(rn1))*cos(rn2), sin(rn2), 
cos(radians(rn1))*cos(rn2)>
	      }
	      #declare i=i+1;
	    #end
	  }
	  color rgbf 1,
	  #switch (phase_ang)
	    #range (0, 100)
	      color rgb 0
	    #break
	    #range (100, 104)
	      color rgb (0.9/4)*(phase_ang-100)
	    #break
	    #range (104, 180)
	      color rgb 0.9
             #break
	  #end
	}
       }
       #declare i=0;

       {
	object
	{
	  union
	  {
	    #while (i<2000)
	      sphere
	      {
		0, 0.0005
		#declare rn1=rand(R1)*360;
		#declare rn2=asin(rand(R1)*2-1);
		translate <sin(radians(rn1))*cos(rn2), sin(rn2), 
cos(radians(rn1))*cos(rn2)>
	      }
	      #declare i=i+1;
	    #end
	  }
	  color rgbf 1,
	  #switch (phase_ang)
	    #range (0, 105)
	      color rgb 0
	    #break
	    #range (105, 110)
	      color rgb (0.7/5)*(phase_ang-105)
	    #break
	    #range (110, 180)
	      color rgb 1
             #break
	  #end
	}
       }
     }
   #end


#else
   #declare T_White =
   texture
   {
     pigment { color rgb 1 }
     finish { ambient 1 diffuse 0 }
   }

   #declare Grid_Bar_H =
   box
   {
     0, <15, 1, 3>
     texture { T_White }
   }

   #declare Grid_Bar_V =
   object
   {
     Grid_Bar_H
     rotate <0, -90, 0>
     translate <2, 0, 0>
   }

   #declare Physical = array[26]
   {
     color rgb <0, 0, 0.2>,
     color rgb <0, 0, 0.4>,
     color rgb <0, 0, 0.7>,
     color rgb <0, 0.15, 1>,
     color rgb <0, 0.25, 1>,
     color rgb <0, 0.5, 1>,
     color rgb <0, 0.65, 1>,
     color rgb <0, 1, 1>,
     color rgb <0.4, 1, 1>,
     color rgb <0.6, 1, 1>,
     color rgb <0, 0.7, 0>,
     color rgb <0, 1, 0>,
     color rgb <1, 1, 0.5>,
     color rgb <1, 1, 0>,
     color rgb <1, 0.7, 0>,
     color rgb <1, 0.6, 0>,
     color rgb <1, 0.4, 0>,
     color rgb <1, 0.2, 0>,
     color rgb <1, 0, 0>,
     color rgb 0.3,
     color rgb 0.4,
     color rgb 0.5,
     color rgb 0.6,
     color rgb 0.7,
     color rgb 0.78,
     color rgb 1
   };

   #declare Elevations = array [25]
   { "10000", "8000", "6000", "4000", "2000", "1000", "500", "200", 
"100", "0", "100", "200", "500", "1000", "2000", "3000", "4000", "5000", 
"6000", "7000", "8000", "10000", "12000", "15000", "20000" };


   #declare lat_start=90-int(clock/360);
   #declare long_start=mod(clock,360);
   #declare res=900; // pixels per degree
   #declare xdim=900;
   #declare ydim=900;
   #declare lat_end=lat_start-(ydim/res);
   #declare long_end=long_start+(xdim/res);

   #if (!legend)
     #declare sl=5124.6666; // sea level
     // #if (mapping=2) // elevation probing mode for grayscale maps
       #declare min_file=0;
       #declare max_file=0;
       #declare lat_end=lat_start-(ydim/res);
       #declare long_end=long_start+(xdim/res);
       #fopen mm "minmax" read
       #while (defined(mm))
         #read (mm, min_file, max_file)
       #end
       #fclose mm
       #warning concat("min_file = ", str(min_file, 5, 4), " max_file = 
", str(max_file, 5, 4))
       #declare min_el=min_file;
       #declare max_el=max_file;
     // #end
     #declare lat=lat_start;
     #while (lat >= lat_end)
       #declare long=long_start;
       #while (long < long_end)
	#declare el=vlength(trace(Ghurghusht, 0, 
<sin(radians(-long))*cos(radians(lat)), sin(radians(lat)), 
cos(radians(-long))*cos(radians(lat))>));
	#if (greymap=0) // defining pixel colors for physical map
	  #switch(el-sl)
	    #range (-sl, -10)
	      #declare pc = Physical[0];
	    #break
	    #range (-10, -8)
	      #declare pc = Physical[1];
	    #break
	    #range (-8, -6)
	      #declare pc = Physical[2];
	    #break
	    #range (-6, -4)
	      #declare pc = Physical[3];
	    #break
	    #range (-4, -2)
	      #declare pc = Physical[4];
	    #break
	    #range (-2, -1)
	      #declare pc = Physical[5];
	    #break
	    #range (-1, -0.5)
	      #declare pc = Physical[6];
	    #break
	    #range (-0.5, -0.2)
	      #declare pc = Physical[7];
	    #break
	    #range (-0.2, -0.1)
	      #declare pc = Physical[8];
	    #break
	    #range (-0.1, 0)
	      #declare pc = Physical[9];
	    #break
	    #range (0, 0.1)
	      #declare pc = Physical[10];
	    #break
	    #range (0.1, 0.2)
	      #declare pc = Physical[11];
	    #break
	    #range (0.2, 0.5)
	      #declare pc = Physical[12];
	    #break
	    #range (0.5, 1)
	      #declare pc = Physical[13];
	    #break
	    #range (1, 2)
	      #declare pc = Physical[14];
	    #break
	    #range (2, 3)
	      #declare pc = Physical[15];
	    #break
	    #range (3, 4)
	      #declare pc = Physical[16];
	    #break
	    #range (4, 5)
	      #declare pc = Physical[17];
	    #break
	    #range (5, 6)
	      #declare pc = Physical[18];
	    #break
	    #range (6, 7)
	      #declare pc = Physical[19];
	    #break
	    #range (7, 8)
	      #declare pc = Physical[20];
	    #break
	    #range (8, 10)
	      #declare pc = Physical[21];
	    #break
	    #range (10, 12)
	      #declare pc = Physical[22];
	    #break
	    #range (12, 15)
	      #declare pc = Physical[23];
	    #break
	    #range (15, 20)
	      #declare pc = Physical[24];
	    #break
	    #range (20, 100)
	      #declare pc = Physical[25];
	    #break
	  #end
   #end

   #if ((el-sl)<min_el)
     #declare min_el = el-sl;
   #end
   #if ((el-sl)>max_el)
     #declare max_el = el-sl;
   #end

   #declare rng=max_el+abs(min_el);
   #declare ll=sl-abs(min_el);
   #declare grv=(el-ll)/rng;
	
   #if (mapping != 2)
    	box
    	{
    	  0, 1
    	  texture
    	  {
    	    #switch (greymap)
		      #case (0) // physical map
			      pigment { color rgb <pc.red, pc.green, pc.blue> }
           #break
         	#case (1) // 8-bit heightfield
         	  pigment { color rgb <grv, grv, grv> }
         	#break
           #case (2) // 16-bit heightfield
             #declare rdraw = grv*255;
             #declare rdval = int(rdraw);
             #declare grraw = (rdraw-rdval)*255;
             #declare grval = int(grraw);
             pigment { color rgb <rdval, grval, 0>/255 }
           #break
           #case (3) // 24-bit heightfield
             #declare rdraw = grv*255;
             #declare rdval = int(rdraw);
             #declare grraw = (rdraw-rdval)*255;
             #declare grval = int(grraw);
             #declare blraw = (grraw-grval)*255;
             #declare blval = int(blraw);
             pigment { color rgb <rdval, grval, blval>/255 }
           #break
         #end
         finish { ambient 1 diffuse 0 }
       }
       translate <(long-long_start)*res, 0, 450-(lat_start-lat)*res>
    	}
   #end
	#declare long=long+1/res;
#end
       #declare lat=lat-1/res;
     #end
   #end
   // #if (mapping=2)
     #warning concat("min_el = ", str(min_el, 5, 4), " max_el = ", 
str(max_el, 5, 4))
     #fopen mm "minmax" write
       #write (mm, min_el, ",", max_el, "\n")
      #fclose mm
   // #end

   #if(legend)
     box // dummy map
     {
       <0, 0, -450>, <1800, 1, 450>
       texture
       {
	pigment { color rgb <1, 0, 0> }
	finish { ambient 1 diffuse 0 }
       }
     }
   #end

   #if (greymap=0)
     object { Grid_Bar_H translate <-15, 0, -450> } // lower left map 
corner, latitude bar
     object { Grid_Bar_H translate <-15, 0, 447> }  // upper left map 
corner, latitude bar
     object { Grid_Bar_H translate <1800, 0, -450> } // lower right map 
corner, latitude bar
     object { Grid_Bar_H translate <1800, 0, 447> } // upper right map 
corner, latitude bar
     object { Grid_Bar_V translate <1, 0, -465> } // lower left map 
corner, longitude bar
     object { Grid_Bar_V translate <1, 0, 450> } // upper left map 
corner, longitude bar
     object { Grid_Bar_V translate <1798, 0, -465> } // lower right map 
corner, longitude bar
     object { Grid_Bar_V translate <1798, 0, 450> } // upper right map 
corner, longitude bar

     text
     {
       ttf concat(fontpath, "arial.ttf") str(lat_start, 2, 0), 1, 0
       texture { T_White }
       rotate <90, 0, 0>
       scale 20
       translate <-47, 0, 442.5>
     }

     text
     {
       ttf concat(fontpath, "arial.ttf") str(lat_end, 2, 0), 1, 0
       texture { T_White }
       rotate <90, 0, 0>
       scale 20
       translate <-47, 0, -455>
     }

     text
     {
       ttf concat(fontpath, "arial.ttf") str(lat_start, 2, 0), 1, 0
       texture { T_White }
       rotate <90, 0, 0>
       scale 20
       translate <1820, 0, 442.5>
     }

     text
     {
       ttf concat(fontpath, "arial.ttf") str(lat_end, 2, 0), 1, 0
       texture { T_White }
       rotate <90, 0, 0>
       scale 20
       translate <1820, 0, -455>
     }

     text
     {
       ttf concat(fontpath, "arial.ttf") str(long_end, 3, 0), 1, 0
       texture { T_White }
       rotate <90, 0, 0>
       scale 20
       translate <1785, 0, 470>
     }

     text
     {
       ttf concat(fontpath, "arial.ttf") str(long_start, 3, 0), 1, 0
       texture { T_White }
       rotate <90, 0, 0>
       scale 20
       translate <-15, 0, 470>
     }

     text
     {
       ttf concat(fontpath, "arial.ttf") str(long_end, 3, 0), 1, 0
       texture { T_White }
       rotate <90, 0, 0>
       scale 20
       translate <1785, 0, -484>
     }

     text
     {
       ttf concat(fontpath, "arial.ttf") str(long_start, 3, 0), 1, 0
       texture { T_White }
       rotate <90, 0, 0>
       scale 20
       translate <-15, 0, -484>
     }


     text
     {
       ttf concat(fontpath, "arial.ttf") concat("Cylindrical Map of 
Ghurghusht - ", str(res, 3, 0), " pixels per degree"), 1, 0
       texture
       {
	pigment { color rgb 1 }
	finish { ambient 1 diffuse 0 }
       }
       rotate x*90
       scale 40
       translate <430, 0, 515>
     }

     #declare Elevation_Color_Bar =
     box
     {
       0, <40, 1, 20>
     }

     #declare a=0;
     #while (a<26)
       object
       {
	Elevation_Color_Bar
	texture
	{
	  pigment { color rgb <Physical[a].red, Physical[a].green, 
Physical[a].blue> }
	  finish { ambient 1 diffuse 0 }
	}
	translate <40*a, 0, -525>
       }
       #declare a=a+1;
     #end

     #declare a=0;
     #while (a<25)
       text
       {
	ttf concat(fontpath, "arial.ttf") Elevations[a] 1, 0
	texture
	{
	  pigment { color rgb 1 }
	  finish { ambient 1 diffuse 0 }
	}
	rotate x*90
	scale 10
	#if (a=9)
	  #declare os=7.5;
	#else
	  #declare os=6;
	#end
	translate <5*(os+8*a), 0, -540>
       }
       #declare a=a+1;
     #end

     text
     {
       ttf concat(fontpath, "arial.ttf") "Depths and elevations in 
metres" 1, 0
       texture
       {
	pigment { color rgb 1 }
	finish { ambient 1 diffuse 0 }
       }
       rotate x*90
       scale 10
       translate <1090, 0, -540>
     }
   #end

   camera
   {
     orthographic
     #switch (greymap)
       #case (0) // physical map with legend
	right <1900, 0, 0>
	up <0, 1100, 0 >
	location <900, 500, 0>
	look_at <900, 0, 0>
       #break
       #range (1, 2) // 8- and 16-bit heightfield, global coverage
	right <1800, 0, 0>
	up <0, 900, 0>
	location <900, 500, 0>
	look_at <900, 0, 0>
       #break
       #case (3) // tiled 24-bit heightfields
         right <900, 0, 0>
         up <0, 900, 0>
        location <450, 500, 0>
        look_at <450, 0, 0>
       #break
     #end
   }

#end


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.