From 35e9d5d0bf016dc778f902ec403f5a09e4dbc474 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Lemaire?= Date: Sun, 18 Dec 2011 21:59:33 +0000 Subject: [PATCH] paysages: Added sun rendering. git-svn-id: https://subversion.assembla.com/svn/thunderk/paysages@197 b1fd45b6-86a6-48da-8261-f70d1f35bdcc --- data/gui.glade | 98 +++++++++++++++++++++++++++++++++++++++++++++++ src/auto.c | 5 ++- src/gui/tab_sky.c | 8 ++-- src/main.c | 6 +-- src/render.c | 6 +-- src/sky.c | 32 +++++++++++++++- 6 files changed, 143 insertions(+), 12 deletions(-) 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 - Color gradient editor + False + True + center-on-parent + True + True + main_window + + + True + False + vertical + + + True + False + GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_STRUCTURE_MASK + 5 + + + 500 + 50 + True + False + gtk-missing-image + + + + + False + True + 0 + + + + + True + False + + + + + + + + + False + True + 1 + + + + + True + False + True + spread + + + Validate + True + True + True + False + + + False + False + 0 + + + + + Cancel + True + True + True + False + + + False + False + 1 + + + + + False + False + 5 + 2 + + + + + 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)