Add LOD to each AI model
Add a LOD (range animation) to each AI model if the property /sim/rendering/static-lod/ai is set to any number greater than zero. AI models get loaded but only displayed when closer than the number given in the property (in meters). If the property is absent or it's value is less or equal 0.0 than no LOD is added to the AI model.
This commit is contained in:
parent
5e30675c70
commit
1e7d072eed
2 changed files with 15 additions and 11 deletions
|
@ -225,8 +225,22 @@ bool FGAIBase::init(bool search_in_AI_path) {
|
||||||
else
|
else
|
||||||
_installed = true;
|
_installed = true;
|
||||||
|
|
||||||
model = load3DModel(f, props);
|
osg::Node * mdl = SGModelLib::loadPagedModel(f, props, new FGNasalModelData(props));
|
||||||
|
model = mdl;
|
||||||
|
|
||||||
|
double aiModelMaxRange = fgGetDouble("/sim/rendering/static-lod/ai", 0.0);
|
||||||
|
if( aiModelMaxRange > 0.0 ) {
|
||||||
|
osg::LOD * lod = new osg::LOD;
|
||||||
|
lod->setName("AI-model range animation node");
|
||||||
|
|
||||||
|
lod->addChild( mdl, 0, aiModelMaxRange );
|
||||||
|
lod->setCenterMode(osg::LOD::USE_BOUNDING_SPHERE_CENTER);
|
||||||
|
lod->setRangeMode(osg::LOD::DISTANCE_FROM_EYE_POINT);
|
||||||
|
|
||||||
|
model = lod;
|
||||||
|
}
|
||||||
|
|
||||||
|
initModel(mdl);
|
||||||
if (model.valid() && _initialized == false) {
|
if (model.valid() && _initialized == false) {
|
||||||
aip.init( model.get() );
|
aip.init( model.get() );
|
||||||
aip.setVisible(true);
|
aip.setVisible(true);
|
||||||
|
@ -266,13 +280,6 @@ void FGAIBase::initModel(osg::Node *node)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
osg::Node* FGAIBase::load3DModel(const string &path, SGPropertyNode *prop_root)
|
|
||||||
{
|
|
||||||
model = SGModelLib::loadPagedModel(path, prop_root, new FGNasalModelData(prop_root));
|
|
||||||
initModel(model.get());
|
|
||||||
return model.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool FGAIBase::isa( object_type otype ) {
|
bool FGAIBase::isa( object_type otype ) {
|
||||||
return otype == _otype;
|
return otype == _otype;
|
||||||
}
|
}
|
||||||
|
|
|
@ -300,9 +300,6 @@ public:
|
||||||
inline double _getRange() { return range; };
|
inline double _getRange() { return range; };
|
||||||
inline double _getBearing() { return bearing; };
|
inline double _getBearing() { return bearing; };
|
||||||
|
|
||||||
virtual osg::Node* load3DModel(const string &path,
|
|
||||||
SGPropertyNode *prop_root);
|
|
||||||
|
|
||||||
static bool _isNight();
|
static bool _isNight();
|
||||||
|
|
||||||
string & getCallSign();
|
string & getCallSign();
|
||||||
|
|
Loading…
Reference in a new issue