paysages : Added sun halo control.

git-svn-id: https://subversion.assembla.com/svn/thunderk/paysages@337 b1fd45b6-86a6-48da-8261-f70d1f35bdcc
This commit is contained in:
Michaël Lemaire 2012-06-07 19:26:23 +00:00 committed by ThunderK
parent 6ff990bf8f
commit d9aa79ea28
6 changed files with 38 additions and 8 deletions

View file

@ -7,6 +7,7 @@
* Version management in saved files. * Version management in saved files.
* Added ground texture and sun location in 3D explorer. * Added ground texture and sun location in 3D explorer.
* 3D explorer now takes advantage of multiple CPU cores. * 3D explorer now takes advantage of multiple CPU cores.
* Added sun halo control.
2012-04-20 Technology Preview 1 2012-04-20 Technology Preview 1
------------------------------- -------------------------------

View file

@ -90,7 +90,9 @@ FormSky::FormSky(QWidget *parent):
addInputDouble(tr("Day time"), &_definition.daytime, 0.0, 1.0, 0.01, 0.1); addInputDouble(tr("Day time"), &_definition.daytime, 0.0, 1.0, 0.01, 0.1);
addInputColorGradation(tr("Sun color"), _definition.sun_color); addInputColorGradation(tr("Sun color"), _definition.sun_color);
addInputDouble(tr("Sun radius"), &_definition.sun_radius, 0.0, 0.3, 0.01, 0.03); addInputDouble(tr("Sun radius"), &_definition.sun_radius, 0.0, 0.4, 0.004, 0.04);
addInputDouble(tr("Sun halo radius"), &_definition.sun_halo_size, 0.0, 0.4, 0.004, 0.04);
addInputCurve(tr("Sun halo profile"), _definition.sun_halo_profile, 0.0, 1.0, 0.0, 1.0);
addInputColorGradation(tr("Zenith color"), _definition.zenith_color); addInputColorGradation(tr("Zenith color"), _definition.zenith_color);
addInputColorGradation(tr("Haze color"), _definition.haze_color); addInputColorGradation(tr("Haze color"), _definition.haze_color);
addInputDouble(tr("Haze height"), &_definition.haze_height, 0.0, 1.0, 0.01, 0.1); addInputDouble(tr("Haze height"), &_definition.haze_height, 0.0, 1.0, 0.01, 0.1);

View file

@ -546,21 +546,31 @@ Maintenir Ctrl : Plus rapide</translation>
</message> </message>
<message> <message>
<location filename="../gui_qt/formsky.cpp" line="94"/> <location filename="../gui_qt/formsky.cpp" line="94"/>
<source>Sun halo radius</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui_qt/formsky.cpp" line="95"/>
<source>Sun halo profile</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui_qt/formsky.cpp" line="96"/>
<source>Zenith color</source> <source>Zenith color</source>
<translation>Couleur du ciel au zénith</translation> <translation>Couleur du ciel au zénith</translation>
</message> </message>
<message> <message>
<location filename="../gui_qt/formsky.cpp" line="95"/> <location filename="../gui_qt/formsky.cpp" line="97"/>
<source>Haze color</source> <source>Haze color</source>
<translation>Couleur de la brume</translation> <translation>Couleur de la brume</translation>
</message> </message>
<message> <message>
<location filename="../gui_qt/formsky.cpp" line="96"/> <location filename="../gui_qt/formsky.cpp" line="98"/>
<source>Haze height</source> <source>Haze height</source>
<translation>Hauteur apparente de la brume</translation> <translation>Hauteur apparente de la brume</translation>
</message> </message>
<message> <message>
<location filename="../gui_qt/formsky.cpp" line="97"/> <location filename="../gui_qt/formsky.cpp" line="99"/>
<source>Haze smoothing</source> <source>Haze smoothing</source>
<translation>Facteur de lissage de la brume</translation> <translation>Facteur de lissage de la brume</translation>
</message> </message>

View file

@ -127,6 +127,11 @@ void autoGenRealisticLandscape(int seed)
sky.haze_height = 0.75; sky.haze_height = 0.75;
sky.haze_smoothing = 0.3; sky.haze_smoothing = 0.3;
sky.sun_radius = 0.02; sky.sun_radius = 0.02;
sky.sun_halo_size = 0.3;
curveClear(sky.sun_halo_profile);
curveQuickAddPoint(sky.sun_halo_profile, 0.0, 1.0);
curveQuickAddPoint(sky.sun_halo_profile, 0.1, 0.2);
curveQuickAddPoint(sky.sun_halo_profile, 1.0, 0.0);
scenerySetSky(&sky); scenerySetSky(&sky);
skyDeleteDefinition(&sky); skyDeleteDefinition(&sky);

View file

@ -26,6 +26,8 @@ void skySave(PackStream* stream, SkyDefinition* definition)
packWriteDouble(stream, &definition->daytime); packWriteDouble(stream, &definition->daytime);
colorGradationSave(stream, definition->sun_color); colorGradationSave(stream, definition->sun_color);
packWriteDouble(stream, &definition->sun_radius); packWriteDouble(stream, &definition->sun_radius);
packWriteDouble(stream, &definition->sun_halo_size);
curveSave(stream, definition->sun_halo_profile);
colorGradationSave(stream, definition->zenith_color); colorGradationSave(stream, definition->zenith_color);
colorGradationSave(stream, definition->haze_color); colorGradationSave(stream, definition->haze_color);
packWriteDouble(stream, &definition->haze_height); packWriteDouble(stream, &definition->haze_height);
@ -37,6 +39,8 @@ void skyLoad(PackStream* stream, SkyDefinition* definition)
packReadDouble(stream, &definition->daytime); packReadDouble(stream, &definition->daytime);
colorGradationLoad(stream, definition->sun_color); colorGradationLoad(stream, definition->sun_color);
packReadDouble(stream, &definition->sun_radius); packReadDouble(stream, &definition->sun_radius);
packReadDouble(stream, &definition->sun_halo_size);
curveLoad(stream, definition->sun_halo_profile);
colorGradationLoad(stream, definition->zenith_color); colorGradationLoad(stream, definition->zenith_color);
colorGradationLoad(stream, definition->haze_color); colorGradationLoad(stream, definition->haze_color);
packReadDouble(stream, &definition->haze_height); packReadDouble(stream, &definition->haze_height);
@ -52,6 +56,8 @@ SkyDefinition skyCreateDefinition()
def.daytime = 0.0; def.daytime = 0.0;
def.sun_color = colorGradationCreate(); def.sun_color = colorGradationCreate();
def.sun_radius = 1.0; def.sun_radius = 1.0;
def.sun_halo_size = 0.0;
def.sun_halo_profile = curveCreate();
def.zenith_color = colorGradationCreate(); def.zenith_color = colorGradationCreate();
def.haze_color = colorGradationCreate(); def.haze_color = colorGradationCreate();
def.haze_height = 0.0; def.haze_height = 0.0;
@ -64,6 +70,7 @@ SkyDefinition skyCreateDefinition()
void skyDeleteDefinition(SkyDefinition* definition) void skyDeleteDefinition(SkyDefinition* definition)
{ {
curveDelete(definition->sun_halo_profile);
colorGradationDelete(definition->sun_color); colorGradationDelete(definition->sun_color);
colorGradationDelete(definition->zenith_color); colorGradationDelete(definition->zenith_color);
colorGradationDelete(definition->haze_color); colorGradationDelete(definition->haze_color);
@ -73,9 +80,12 @@ void skyCopyDefinition(SkyDefinition* source, SkyDefinition* destination)
{ {
destination->daytime = source->daytime; destination->daytime = source->daytime;
destination->sun_radius = source->sun_radius; destination->sun_radius = source->sun_radius;
destination->sun_halo_size = source->sun_halo_size;
destination->haze_height = source->haze_height; destination->haze_height = source->haze_height;
destination->haze_smoothing = source->haze_smoothing; destination->haze_smoothing = source->haze_smoothing;
curveCopy(source->sun_halo_profile, destination->sun_halo_profile);
colorGradationCopy(source->sun_color, destination->sun_color); colorGradationCopy(source->sun_color, destination->sun_color);
colorGradationCopy(source->zenith_color, destination->zenith_color); colorGradationCopy(source->zenith_color, destination->zenith_color);
colorGradationCopy(source->haze_color, destination->haze_color); colorGradationCopy(source->haze_color, destination->haze_color);
@ -152,17 +162,17 @@ Color skyGetColor(SkyDefinition* definition, Renderer* renderer, Vector3 eye, Ve
dist = v3Norm(v3Sub(look, sun_position)); dist = v3Norm(v3Sub(look, sun_position));
sky_color = colorGradationGet(definition->_sky_gradation, look.y * 0.5 + 0.5); sky_color = colorGradationGet(definition->_sky_gradation, look.y * 0.5 + 0.5);
if (dist < definition->sun_radius) if (dist < definition->sun_radius + definition->sun_halo_size)
{ {
dist = dist / definition->sun_radius;
sun_color = colorGradationGet(definition->sun_color, definition->daytime); sun_color = colorGradationGet(definition->sun_color, definition->daytime);
if (dist < 0.9) if (dist <= definition->sun_radius)
{ {
return sun_color; return sun_color;
} }
else else
{ {
sun_color.a = (1.0 - dist) / 0.1; dist = (dist - definition->sun_radius) / definition->sun_halo_size;
sun_color.a = curveGetValue(definition->sun_halo_profile, dist);
colorMask(&sky_color, &sun_color); colorMask(&sky_color, &sun_color);
return sky_color; return sky_color;
} }

View file

@ -15,6 +15,8 @@ typedef struct
double daytime; double daytime;
ColorGradation* sun_color; ColorGradation* sun_color;
double sun_radius; double sun_radius;
double sun_halo_size;
Curve* sun_halo_profile;
ColorGradation* zenith_color; ColorGradation* zenith_color;
ColorGradation* haze_color; ColorGradation* haze_color;
double haze_height; double haze_height;