From b350c6cd0f1c7a32cb9c3a20713bc8ba1843de49 Mon Sep 17 00:00:00 2001 From: curt Date: Thu, 19 Sep 2002 01:27:49 +0000 Subject: [PATCH] Miscellanious flailings trying to get 3d cloud imposter rendering to work correctly. --- src/Main/main.cxx | 55 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/src/Main/main.cxx b/src/Main/main.cxx index 7af69d41a..0839d752d 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -244,6 +244,7 @@ sgMat4 copy_of_ssgOpenGLAxisSwapMatrix = // +ssgSimpleState *cloud3d_imposter_state; ssgSimpleState *default_state; ssgSimpleState *hud_and_panel; ssgSimpleState *menus; @@ -264,6 +265,20 @@ void fgBuildRenderStates( void ) { default_state->disable( GL_ALPHA_TEST ); default_state->disable( GL_LIGHTING ); + cloud3d_imposter_state = new ssgSimpleState; + cloud3d_imposter_state->ref(); + cloud3d_imposter_state->enable( GL_TEXTURE_2D ); + cloud3d_imposter_state->enable( GL_CULL_FACE ); + cloud3d_imposter_state->enable( GL_COLOR_MATERIAL ); + cloud3d_imposter_state->setColourMaterial( GL_AMBIENT_AND_DIFFUSE ); + cloud3d_imposter_state->setMaterial( GL_DIFFUSE, 1, 1, 1, 1 ); + cloud3d_imposter_state->setMaterial( GL_AMBIENT, 1, 1, 1, 1 ); + cloud3d_imposter_state->setMaterial( GL_EMISSION, 0, 0, 0, 1 ); + cloud3d_imposter_state->setMaterial( GL_SPECULAR, 0, 0, 0, 1 ); + cloud3d_imposter_state->enable( GL_BLEND ); + cloud3d_imposter_state->enable( GL_ALPHA_TEST ); + cloud3d_imposter_state->enable( GL_LIGHTING ); + hud_and_panel = new ssgSimpleState; hud_and_panel->ref(); hud_and_panel->disable( GL_CULL_FACE ); @@ -397,6 +412,9 @@ void trRenderFrame( void ) { // Update all Visuals (redraws anything graphics related) void fgRenderFrame() { + GLfloat black[4] = { 0.0, 0.0, 0.0, 1.0 }; + GLfloat white[4] = { 1.0, 1.0, 1.0, 1.0 }; + // Process/manage pending events global_events.update( delta_time_sec ); @@ -475,6 +493,20 @@ void fgRenderFrame() { } glClear( clear_mask ); + cloud3d_imposter_state->force(); + glDisable( GL_FOG ); + glEnable( GL_LIGHTING ); + glEnable( GL_LIGHT0 ); + ssgGetLight( 0 ) -> setColour( GL_DIFFUSE, white ); + glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE ); + glColor4f( 1.0, 1.0, 1.0, 1.0 ); + glEnable(GL_COLOR_MATERIAL); + glEnable(GL_TEXTURE_2D); + glEnable(GL_DEPTH_TEST); + glEnable(GL_ALPHA_TEST); + glEnable(GL_BLEND); + glBlendFunc( GL_ONE, GL_ONE_MINUS_SRC_ALPHA ) ; + glEnable(GL_CULL_FACE); if ( fgGetBool("/sim/rendering/clouds3d") ) { posit = globals->get_scenery()->get_center(); if ( _bcloud_orig ) { @@ -577,8 +609,6 @@ void fgRenderFrame() { // we only update GL_AMBIENT for our lights we will never get // a completely dark scene. So, we set GL_LIGHT_MODEL_AMBIENT // explicitely to black. - GLfloat black[4] = { 0.0, 0.0, 0.0, 1.0 }; - GLfloat white[4] = { 1.0, 1.0, 1.0, 1.0 }; glLightModelfv( GL_LIGHT_MODEL_AMBIENT, black ); ssgGetLight( 0 ) -> setColour( GL_AMBIENT, l->scene_ambient ); @@ -757,6 +787,20 @@ void fgRenderFrame() { globals->get_model_mgr()->draw(); globals->get_aircraft_model()->draw(); + glDisable( GL_FOG ); + glEnable(GL_BLEND); + glEnable(GL_TEXTURE_2D); + glEnable(GL_ALPHA_TEST); + glBlendFunc ( GL_ONE, GL_ONE_MINUS_SRC_ALPHA ) ; + glDisable( GL_DEPTH_TEST ); + glDisable( GL_LIGHTING ); + if ( fgGetBool("/sim/rendering/clouds3d") ) { + // cout << "drawing new clouds" << endl; + // set the opengl state to known default values + // default_state->force(); + sgClouds3d->Draw((sgVec4 *)current__view->get_VIEW()); + } + // display HUD && Panel glDisable( GL_FOG ); glDisable( GL_DEPTH_TEST ); @@ -787,13 +831,6 @@ void fgRenderFrame() { puDisplay(); // glDisable ( GL_BLEND ) ; - if ( fgGetBool("/sim/rendering/clouds3d") ) { - // cout << "drawing new clouds" << endl; - // set the opengl state to known default values - // default_state->force(); - sgClouds3d->Draw((sgVec4 *)current__view->get_VIEW()); - } - glEnable( GL_DEPTH_TEST ); glEnable( GL_FOG ); -- 2.39.5