diff --git a/data/gui.glade b/data/gui.glade
index eabf785..ef7b2ec 100644
--- a/data/gui.glade
+++ b/data/gui.glade
@@ -15,6 +15,104 @@
+
False
Paysages - Noise editor
diff --git a/src/auto.c b/src/auto.c
index d5843cc..e915f2e 100644
--- a/src/auto.c
+++ b/src/auto.c
@@ -185,7 +185,9 @@ void autoGenRealisticLandscape(int seed)
/* Sky */
sky.sun_color = colorGradationCreate();
- colorGradationAddRgba(&sky.sun_color, 0.5, 1.0, 0.98, 0.95, 1.0);
+ colorGradationAddRgba(&sky.sun_color, 0.3, 1.0, 0.91, 0.8, 1.0);
+ colorGradationAddRgba(&sky.sun_color, 0.5, 1.0, 0.95, 0.9, 1.0);
+ colorGradationAddRgba(&sky.sun_color, 0.7, 1.0, 0.91, 0.8, 1.0);
sky.zenith_color = colorGradationCreate();
colorGradationAddRgba(&sky.zenith_color, 0.2, 0.03, 0.03, 0.05, 1.0);
colorGradationAddRgba(&sky.zenith_color, 0.25, 0.25, 0.33, 0.37, 1.0);
@@ -205,6 +207,7 @@ void autoGenRealisticLandscape(int seed)
sky.daytime = 0.0;
sky.haze_height = 0.75;
sky.haze_smoothing = 0.3;
+ sky.sun_radius = 0.02;
skySetDefinition(sky);
noise = noiseCreateGenerator();
diff --git a/src/gui/tab_sky.c b/src/gui/tab_sky.c
index be3c547..744c9b2 100644
--- a/src/gui/tab_sky.c
+++ b/src/gui/tab_sky.c
@@ -14,9 +14,9 @@ static Color _cbPreviewHorizon(SmallPreview* preview, double x, double y, double
Vector3 eye = {0.0, 0.0, 0.0};
Vector3 look;
- look.x = x;
- look.y = -y;
- look.z = 1.0;
+ look.x = cos(M_PI * (x / 1.28 + 0.5)) * cos(M_PI * (y / 2.56));
+ look.y = -sin(M_PI * (y / 2.56));
+ look.z = sin(M_PI * (x / 1.28 + 0.5)) * cos(M_PI * (y / 2.56));
return skyGetColorCustom(eye, look, &_definition, NULL, NULL);
}
@@ -107,7 +107,7 @@ void guiSkyInit()
/* Configs */
gtk_range_set_range(GTK_RANGE(GET_WIDGET("sky_daytime")), 0.0, 1.0);
- gtk_range_set_range(GTK_RANGE(GET_WIDGET("sky_sun_size")), 0.0, 1.0);
+ gtk_range_set_range(GTK_RANGE(GET_WIDGET("sky_sun_size")), 0.0, 0.3);
gtk_range_set_range(GTK_RANGE(GET_WIDGET("sky_haze_height")), 0.0, 1.0);
gtk_range_set_range(GTK_RANGE(GET_WIDGET("sky_haze_smoothing")), 0.0, 1.0);
diff --git a/src/main.c b/src/main.c
index 8d4fc16..39cab06 100644
--- a/src/main.c
+++ b/src/main.c
@@ -103,12 +103,12 @@ int main(int argc, char** argv)
ilInit();
iluInit();
- cameraSetLocation(2.0, 5.0, 10.0);
+ cameraSetLocation(-12.0, 5.0, 2.0);
cameraSetTarget(0.0, 5.0, 0.0);
-
+
autoInit();
guiInit();
-
+
autoSetRenderQuality(5);
autoGenRealisticLandscape(0);
autoSetDaytime(8, 30);
diff --git a/src/render.c b/src/render.c
index bc8002e..41226b5 100644
--- a/src/render.c
+++ b/src/render.c
@@ -92,7 +92,7 @@ void renderSetSize(int width, int height)
_dirty_down = render_height;
_dirty_up = -1;
_dirty_count = 0;
-
+
_pixel_count = render_width * render_height;
for (y = 0; y < height; y++)
@@ -134,7 +134,7 @@ void renderClear()
scanline_left = 0;
scanline_right = render_width - 1;
-
+
_progress = 0.0;
_interrupt = 0;
@@ -682,7 +682,7 @@ void renderPostProcess(int nbchunks)
chunks[i].interrupt = 1;
}
}
-
+
if (y < ny && !chunks[i].thread && !_interrupt)
{
chunks[i].finished = 0;
diff --git a/src/sky.c b/src/sky.c
index a36ed49..fbc6864 100644
--- a/src/sky.c
+++ b/src/sky.c
@@ -99,6 +99,10 @@ SkyDefinition skyGetDefinition()
Color skyGetColorCustom(Vector3 eye, Vector3 look, SkyDefinition* definition, SkyQuality* quality, SkyEnvironment* environment)
{
+ double sun_angle, dist;
+ Vector3 sun_position;
+ Color sun_color, sky_color;
+
if (definition == NULL)
{
definition = &_definition;
@@ -112,8 +116,34 @@ Color skyGetColorCustom(Vector3 eye, Vector3 look, SkyDefinition* definition, Sk
environment = &_environment;
}
+ sun_angle = (definition->daytime + 0.75) * M_PI * 2.0;
+ sun_position.x = cos(sun_angle);
+ sun_position.y = sin(sun_angle);
+ sun_position.z = 0.0;
+
look = v3Normalize(look);
- return colorGradationGet(&definition->_sky_gradation, look.y * 0.5 + 0.5);
+ dist = v3Norm(v3Sub(look, sun_position));
+
+ sky_color = colorGradationGet(&definition->_sky_gradation, look.y * 0.5 + 0.5);
+ if (dist < definition->sun_radius)
+ {
+ dist = dist / definition->sun_radius;
+ sun_color = colorGradationGet(&definition->sun_color, definition->daytime);
+ if (dist < 0.9)
+ {
+ return sun_color;
+ }
+ else
+ {
+ sun_color.a = (1.0 - dist) / 0.1;
+ colorMask(&sky_color, &sun_color);
+ return sky_color;
+ }
+ }
+ else
+ {
+ return sky_color;
+ }
}
Color skyGetColor(Vector3 eye, Vector3 look)