Patches from Jim Wilson:
This patch creates a seperate scene graph for the cockpit. The near plane is only moved up when in the interior (pilot) view. This is because with rounding (I presume) it the visible ground is a bit up higher than it is with the older nearplane setting. Not much, but it is enough to bury the wheels. I suspected this might be true but spliting to two sg's confirms it. If necessary we can adjust the model up a bit when in interior view. This might be good so we can set the near plane even closer when in the cockpit (its still at 0.2m). In general this looks a lot better on my Voodoo with this patch. No perceptibel change in frame rate on my system. In terms of future plans I'd see the sense in making the model plug into either scene. This will be necessary when we have multiple model instances in the frame.
This commit is contained in:
parent
2288a530c3
commit
58e664a060
2 changed files with 42 additions and 8 deletions
|
@ -137,6 +137,12 @@ ssgTransform *lightpoints_transform = new ssgTransform;
|
|||
FGTileEntry *dummy_tile;
|
||||
sgVec3 rway_ols;
|
||||
// ADA
|
||||
// Clip plane settings...
|
||||
float cockpit_nearplane = 0.2f;
|
||||
float cockpit_farplane = 120000.0f;
|
||||
float scene_nearplane = 0.5f;
|
||||
float scene_farplane = 120000.0f;
|
||||
|
||||
|
||||
#ifndef FG_NEW_ENVIRONMENT
|
||||
# include <WeatherCM/FGLocalWeatherDatabase.h>
|
||||
|
@ -175,6 +181,7 @@ void fgReshape( int width, int height );
|
|||
|
||||
// ssg variables
|
||||
ssgRoot *scene = NULL;
|
||||
ssgRoot *cockpit = NULL;
|
||||
ssgBranch *terrain_branch = NULL;
|
||||
ssgBranch *gnd_lights_branch = NULL;
|
||||
ssgBranch *rwy_lights_branch = NULL;
|
||||
|
@ -363,10 +370,17 @@ void trRenderFrame( void ) {
|
|||
// return to the desired diffuse color
|
||||
ssgGetLight( 0 ) -> setColour( GL_DIFFUSE, l->scene_diffuse );
|
||||
glEnable( GL_DEPTH_TEST );
|
||||
ssgSetNearFar( scene_nearplane, scene_farplane );
|
||||
ssgCullAndDraw( scene );
|
||||
|
||||
// if in cockpit view adjust nearfar...
|
||||
if (globals->get_current_view()->getType() == 0 )
|
||||
ssgSetNearFar( cockpit_nearplane, cockpit_farplane );
|
||||
ssgCullAndDraw( cockpit );
|
||||
|
||||
// draw the lights
|
||||
glFogf (GL_FOG_DENSITY, fog_exp2_punch_through);
|
||||
ssgSetNearFar( scene_nearplane, scene_farplane );
|
||||
ssgCullAndDraw( lighting );
|
||||
|
||||
thesky->postDraw( cur_fdm_state->get_Altitude() * SG_FEET_TO_METER );
|
||||
|
@ -568,12 +582,19 @@ void fgRenderFrame( void ) {
|
|||
double agl = current_aircraft.fdm_state->get_Altitude() * SG_FEET_TO_METER
|
||||
- scenery.get_cur_elev();
|
||||
|
||||
if (fgGetBool("/sim/view/internal"))
|
||||
ssgSetNearFar( 0.2f, 120000.0f );
|
||||
else if ( agl > 10.0)
|
||||
ssgSetNearFar( 10.0f, 120000.0f );
|
||||
else
|
||||
ssgSetNearFar( 0.5f, 120000.0f );
|
||||
// if (fgGetBool("/sim/view/internal"))
|
||||
// ssgSetNearFar( 0.2f, 120000.0f );
|
||||
// else if ( agl > 10.0)
|
||||
|
||||
if ( agl > 10.0 ) {
|
||||
scene_nearplane = 10.0f;
|
||||
scene_farplane = 120000.0f;
|
||||
} else {
|
||||
scene_nearplane = 0.5f;
|
||||
scene_farplane = 120000.0f;
|
||||
}
|
||||
|
||||
ssgSetNearFar( scene_nearplane, scene_farplane );
|
||||
|
||||
current_model.update(0); // FIXME: use real delta time
|
||||
|
||||
|
@ -619,8 +640,14 @@ void fgRenderFrame( void ) {
|
|||
|
||||
// draw the ssg scene
|
||||
glEnable( GL_DEPTH_TEST );
|
||||
ssgSetNearFar( scene_nearplane, scene_farplane );
|
||||
ssgCullAndDraw( scene );
|
||||
|
||||
// if in cockpit view adjust nearfar...
|
||||
if (globals->get_current_view()->getType() == 0 )
|
||||
ssgSetNearFar( cockpit_nearplane, cockpit_farplane );
|
||||
ssgCullAndDraw( cockpit );
|
||||
|
||||
// change state for lighting here
|
||||
|
||||
// draw lighting
|
||||
|
@ -662,6 +689,7 @@ void fgRenderFrame( void ) {
|
|||
glEnable(GL_BLEND);
|
||||
#endif
|
||||
|
||||
ssgSetNearFar( scene_nearplane, scene_farplane );
|
||||
ssgCullAndDraw( lighting );
|
||||
|
||||
#ifdef FG_EXPERIMENTAL_LIGHTING
|
||||
|
@ -1408,6 +1436,10 @@ int mainLoop( int argc, char **argv ) {
|
|||
scene = new ssgRoot;
|
||||
scene->setName( "Scene" );
|
||||
|
||||
// Scene graph root for cockpit
|
||||
cockpit = new ssgRoot;
|
||||
cockpit->setName( "Cockpit" );
|
||||
|
||||
lighting = new ssgRoot;
|
||||
lighting->setName( "Lighting" );
|
||||
|
||||
|
@ -1865,3 +1897,4 @@ void fgUpdateDCS (void) {
|
|||
|
||||
// $$$ end - added VS Renganathan, 15 Oct 2K
|
||||
// added Venky , 12 Nov 2K
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#include "viewmgr.hxx"
|
||||
#include "model.hxx"
|
||||
|
||||
extern ssgRoot * scene; // FIXME: from main.cxx
|
||||
extern ssgRoot * cockpit; // FIXME: from main.cxx
|
||||
|
||||
FGAircraftModel current_model; // FIXME: add to globals
|
||||
|
||||
|
@ -135,7 +135,7 @@ FGAircraftModel::init ()
|
|||
// Set up the selector node
|
||||
_selector->addKid(_position);
|
||||
_selector->clrTraversalMaskBits(SSGTRAV_HOT);
|
||||
scene->addKid(_selector);
|
||||
cockpit->addKid(_selector);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -387,3 +387,4 @@ FGAircraftModel::Animation::setRotation()
|
|||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue