From: Tim Moore Date: Sun, 20 Dec 2009 15:07:00 +0000 (+0100) Subject: Merge branch 'timoore/effects' X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=dca07c5634604c18213d08b688e894de354ea335;p=simgear.git Merge branch 'timoore/effects' Conflicts: simgear/scene/model/model.cxx simgear/scene/sky/newcloud.cxx --- dca07c5634604c18213d08b688e894de354ea335 diff --cc simgear/scene/model/model.cxx index d41529ad,9ca65c89..59f33694 --- a/simgear/scene/model/model.cxx +++ b/simgear/scene/model/model.cxx @@@ -11,10 -18,16 +18,17 @@@ #include #include +#include + #include + #include #include + #include + #include + #include + #include + #include #include #include #include diff --cc simgear/scene/sky/newcloud.cxx index d641b2c9,1518b133..f4eb8de2 --- a/simgear/scene/sky/newcloud.cxx +++ b/simgear/scene/sky/newcloud.cxx @@@ -322,38 -219,27 +211,36 @@@ osg::ref_ptr SGNewCloud::g double elev = sg_random() * SGD_PI; x = width * cos(theta) * 0.5f * sin(elev); y = width * sin(theta) * 0.5f * sin(elev); - z = height * cos(elev) * 0.5f; + z = height * cos(elev) * 0.5f; } - SGVec3f *pos = new SGVec3f(x, y, z); - - // Determine the height and width as scaling factors on the minimum size (used to create the quad). + // Determine the height and width as scaling factors on the minimum size (used to create the quad) float sprite_width = 1.0f + sg_random() * (max_sprite_width - min_sprite_width) / min_sprite_width; float sprite_height = 1.0f + sg_random() * (max_sprite_height - min_sprite_height) / min_sprite_height; - - if (i == 2) { + + // Sprites are never taller than square. + if (sprite_height * min_sprite_height > sprite_width * min_sprite_width) + { + sprite_height = sprite_width * min_sprite_width / min_sprite_height; + } + + if (i == 0) { // The center sprite is always maximum size to fill up any holes. sprite_width = 1.0f + (max_sprite_width - min_sprite_width) / min_sprite_width; sprite_height = 1.0f + (max_sprite_height - min_sprite_height) / min_sprite_height; } - - // Determine the sprite texture indexes; + + // Determine the sprite texture indexes. int index_x = (int) floor(sg_random() * num_textures_x); if (index_x == num_textures_x) { index_x--; } - - int index_y = (int) floor(sg_random() * num_textures_y); + + // The y index depends on the positing of the sprite within the cloud. + // This allows cloud designers to have particular sprites for the base + // and tops of the cloud. + int index_y = (int) floor((z / height + 0.5f) * num_textures_y); if (index_y == num_textures_y) { index_y--; } - sg->addSprite(*pos, + sg->addSprite(SGVec3f(x, y, z), index_x, index_y, sprite_width,