Files
simgear/simgear/scene/model/model.hxx
T
Mathias Froehlich 11fd888ed8 Replace osgDB::ReaderWriter::Options to osgDB::Options.
This has changed in osg, so reflect that here.
2012-03-04 07:07:42 +01:00

125 lines
3.5 KiB
C++

// model.hxx - manage a 3D aircraft model.
// Written by David Megginson, started 2002.
//
// This file is in the Public Domain, and comes with no warranty.
#ifndef __MODEL_HXX
#define __MODEL_HXX 1
#ifndef __cplusplus
# error This library requires C++
#endif
#include <simgear/compiler.h>
#include <vector>
#include <set>
#include <osg/Node>
#include <osg/Texture2D>
#include <osgDB/ReaderWriter>
#include <simgear/misc/sg_path.hxx>
#include <simgear/props/props.hxx>
#include <simgear/scene/util/NodeAndDrawableVisitor.hxx>
namespace simgear
{
class SGReaderWriterOptions;
}
osg::Texture2D*
SGLoadTexture2D(bool staticTexture, const std::string& path,
const osgDB::Options* options = 0,
bool wrapu = true, bool wrapv = true, int mipmaplevels = -1);
inline osg::Texture2D*
SGLoadTexture2D(const std::string& path,
const osgDB::Options* options = 0,
bool wrapu = true, bool wrapv = true, int mipmaplevels = -1)
{
return SGLoadTexture2D(true, path, options, wrapu, wrapv, mipmaplevels);
}
inline osg::Texture2D*
SGLoadTexture2D(const SGPath& path,
const osgDB::Options* options = 0,
bool wrapu = true, bool wrapv = true,
int mipmaplevels = -1)
{
return SGLoadTexture2D(true, path.str(), options, wrapu, wrapv,
mipmaplevels);
}
inline osg::Texture2D*
SGLoadTexture2D(bool staticTexture, const SGPath& path,
const osgDB::Options* options = 0,
bool wrapu = true, bool wrapv = true,
int mipmaplevels = -1)
{
return SGLoadTexture2D(staticTexture, path.str(), options, wrapu, wrapv,
mipmaplevels);
}
namespace simgear
{
osg::Node* copyModel(osg::Node* model);
// Change the StateSets of a model to hold different textures based on
// a livery path.
class TextureUpdateVisitor : public NodeAndDrawableVisitor
{
public:
TextureUpdateVisitor(const osgDB::FilePathList& pathList);
virtual void apply(osg::Node& node);
virtual void apply(osg::Drawable& drawable);
// Copied from Mathias' earlier SGTextureUpdateVisitor
protected:
osg::Texture2D* textureReplace(int unit, const osg::StateAttribute* attr);
osg::StateSet* cloneStateSet(const osg::StateSet* stateSet);
private:
osgDB::FilePathList _pathList;
};
// Create new userdata structs in a copied model.
// The BVH trees are shared with the original model, but the velocity fields
// should usually be distinct fields for distinct models.
class UserDataCopyVisitor : public osg::NodeVisitor
{
public:
UserDataCopyVisitor();
virtual void apply(osg::Node& node);
};
/**
* Transform an OSG subgraph by substituting Effects and EffectGeodes
* for osg::Geodes with osg::StateSets. This is only guaranteed to
* work for models prouced by the .ac loader.
*
* returns a copy if any nodes are changed
*/
osg::ref_ptr<osg::Node>
instantiateEffects(osg::Node* model,
PropertyList& effectProps,
const SGReaderWriterOptions* options);
/**
* Transform an OSG subgraph by substituting the Effects and
* EffectGeodes for osg::Geodes with osg::StateSets, inheriting from
* the default model effect. This is only guaranteed to work for
* models prouced by the .ac loader.
*
* returns a copy if any nodes are changed
*/
inline osg::ref_ptr<osg::Node>
instantiateEffects(osg::Node* model,
const SGReaderWriterOptions* options)
{
PropertyList effectProps;
return instantiateEffects(model, effectProps, options);
}
}
#endif // __MODEL_HXX