X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fsky%2Fcloud.cxx;h=78bde43cad524ff33a5940be86013e514a9a0fc8;hb=f1ab6e2533a1bf07439b3d5918430f496158d8f3;hp=e6d02c5c7c6ee72989c36a986eca7b0a3c85dc4f;hpb=0468b315d4188f610d86ae3e4ec4e3ff3dd924bd;p=simgear.git diff --git a/simgear/sky/cloud.cxx b/simgear/sky/cloud.cxx index e6d02c5c..78bde43c 100644 --- a/simgear/sky/cloud.cxx +++ b/simgear/sky/cloud.cxx @@ -20,15 +20,17 @@ # include #endif +#include + #include -#include +#include STL_IOSTREAM +#include #include -#include -#include #include #include +#include #include "cloud.hxx" @@ -44,8 +46,8 @@ SGCloudLayer::~SGCloudLayer( void ) { // build the moon object -void SGCloudLayer::build( FGPath path, double s, double asl, double thickness, - double transition ) +void SGCloudLayer::build( double s, double asl, double thickness, + double transition, ssgSimpleState *state ) { scale = 4000.0; @@ -56,21 +58,7 @@ void SGCloudLayer::build( FGPath path, double s, double asl, double thickness, size = s; last_lon = last_lat = -999.0f; - // set up the cloud state - path.append( "cloud.rgba" ); - layer_state = new ssgSimpleState(); - layer_state->setTexture( (char *)path.c_str() ); - layer_state->setShadeModel( GL_SMOOTH ); - layer_state->disable( GL_LIGHTING ); - layer_state->disable( GL_CULL_FACE ); - layer_state->enable( GL_TEXTURE_2D ); - layer_state->enable( GL_COLOR_MATERIAL ); - layer_state->setColourMaterial( GL_AMBIENT_AND_DIFFUSE ); - layer_state->setMaterial( GL_EMISSION, 0, 0, 0, 1 ); - layer_state->setMaterial( GL_SPECULAR, 0, 0, 0, 1 ); - layer_state->enable( GL_BLEND ); - layer_state->enable( GL_ALPHA_TEST ); - layer_state->setAlphaClamp( 0.01 ); + layer_state = state; cl = new ssgColourArray( 4 ); vl = new ssgVertexArray( 4 ); @@ -84,7 +72,7 @@ void SGCloudLayer::build( FGPath path, double s, double asl, double thickness, sgSetVec3( vertex, -size, -size, 0.0f ); sgVec2 base; - sgSetVec2( base, fg_random(), fg_random() ); + sgSetVec2( base, sg_random(), sg_random() ); sgSetVec2( tc, base[0], base[1] ); cl->add( color ); vl->add( vertex ); @@ -175,15 +163,17 @@ bool SGCloudLayer::reposition( sgVec3 p, sgVec3 up, double lon, double lat, // zero_elev.x, zero_elev.y, zero_elev.z ); // Rotate to proper orientation - // printf(" lon = %.2f lat = %.2f\n", FG_Longitude * RAD_TO_DEG, - // FG_Latitude * RAD_TO_DEG); - // xglRotatef( f->get_Longitude() * RAD_TO_DEG, 0.0, 0.0, 1.0 ); + // printf(" lon = %.2f lat = %.2f\n", + // lon * SGD_RADIANS_TO_DEGREES, + // lat * SGD_RADIANS_TO_DEGREES); + // xglRotatef( lon * SGD_RADIANS_TO_DEGREES, 0.0, 0.0, 1.0 ); sgSetVec3( axis, 0.0, 0.0, 1.0 ); - sgMakeRotMat4( LON, lon * RAD_TO_DEG, axis ); + sgMakeRotMat4( LON, lon * SGD_RADIANS_TO_DEGREES, axis ); - // xglRotatef( 90.0 - f->get_Latitude() * RAD_TO_DEG, 0.0, 1.0, 0.0 ); + // xglRotatef( 90.0 - f->get_Latitude() * SGD_RADIANS_TO_DEGREES, + // 0.0, 1.0, 0.0 ); sgSetVec3( axis, 0.0, 1.0, 0.0 ); - sgMakeRotMat4( LAT, 90.0 - lat * RAD_TO_DEG, axis ); + sgMakeRotMat4( LAT, 90.0 - lat * SGD_RADIANS_TO_DEGREES, axis ); sgMat4 TRANSFORM; @@ -247,3 +237,24 @@ bool SGCloudLayer::reposition( sgVec3 p, sgVec3 up, double lon, double lat, void SGCloudLayer::draw() { ssgCullAndDraw( layer_root ); } + + +// make an ssgSimpleState for a cloud layer given the named texture +ssgSimpleState *SGCloudMakeState( const string &path ) { + ssgSimpleState *state = new ssgSimpleState(); + + state->setTexture( (char *)path.c_str() ); + state->setShadeModel( GL_SMOOTH ); + state->disable( GL_LIGHTING ); + state->disable( GL_CULL_FACE ); + state->enable( GL_TEXTURE_2D ); + state->enable( GL_COLOR_MATERIAL ); + state->setColourMaterial( GL_AMBIENT_AND_DIFFUSE ); + state->setMaterial( GL_EMISSION, 0, 0, 0, 1 ); + state->setMaterial( GL_SPECULAR, 0, 0, 0, 1 ); + state->enable( GL_BLEND ); + state->enable( GL_ALPHA_TEST ); + state->setAlphaClamp( 0.01 ); + + return state; +}