update class SDScenery
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@5055 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: 8af441b54b0b6e474c4b182e9c111d94aa1af461 Former-commit-id: 0f69943f71646abef30b6abca99fab2834646e9a
This commit is contained in:
parent
23ff26e3a5
commit
f0c55db136
4 changed files with 71 additions and 93 deletions
|
@ -39,12 +39,15 @@ osg::Node *SDBackground::build(bool type, int grWrldX, int grWrldY, const std::s
|
|||
_sceneY = grWrldY;
|
||||
int land = type;
|
||||
|
||||
std::string strTmpPath = GetDataDir();
|
||||
std::string strPath = strTmpPath +"data/objets";
|
||||
strPath = strPath+strTmpPath+"data/textures";
|
||||
strPath = strPath+TrackPath;
|
||||
std::string LocalPath = GetDataDir();
|
||||
|
||||
osg::Node *m_background = osgDB::readNodeFile(strPath);
|
||||
osgDB::FilePathList pathList = osgDB::Registry::instance()->getDataFilePathList();
|
||||
pathList.push_back(TrackPath);
|
||||
pathList.push_back(LocalPath+"data/objects");
|
||||
pathList.push_back(LocalPath+"data/textures");
|
||||
osgDB::Registry::instance()->setDataFilePathList(pathList);
|
||||
|
||||
osg::Node *m_background = osgDB::readNodeFile("background-sky.ac");
|
||||
|
||||
if (!type)
|
||||
{
|
||||
|
|
|
@ -263,31 +263,11 @@ bool LoadTrack(std::string strTrack)
|
|||
loader.AddSearchPath(m_strTexturePath);
|
||||
osg::Node *pTrack = loader.Load3dFile(strTrack, false);
|
||||
|
||||
//osgDB::writeNodeFile(*pTrack,"mytrack.osg");
|
||||
|
||||
if (pTrack)
|
||||
{
|
||||
osgUtil::Optimizer optimizer;
|
||||
optimizer.optimize(pTrack);
|
||||
//osg::Matrixf mat;
|
||||
//Rotate track model 90 degrees to match the way plib loader works
|
||||
//mat = mat.rotate(osg::inDegrees(90.0), osg::X_AXIS);
|
||||
//osg::MatrixTransform *pTrans = new osg::MatrixTransform(mat);
|
||||
//pTrans->addChild(pTrack);
|
||||
//pTrans->getOrCreateStateSet()->setRenderBinDetails(TRACKBIN,"RenderBin");
|
||||
//pTrack->getOrCreateStateSet()->setRenderBinDetails(TRACKBIN,"RenderBin");
|
||||
|
||||
/* osg::ref_ptr<osg::MatrixTransform> rot = new osg::MatrixTransform;
|
||||
osg::Matrix mat( 1.0f, 0.0f,0.0f, 0.0f,
|
||||
0.0f, 0.0f,1.0f, 0.0f,
|
||||
0.0f, -1.0f,0.0f, 0.0f,
|
||||
0.0f, 0.0f,0.0f, 1.0f );
|
||||
rot->setMatrix(mat);
|
||||
rot->addChild(pTrack);
|
||||
*/
|
||||
|
||||
m_sceneroot->addChild(pTrack);
|
||||
|
||||
m_sceneroot->addChild(pTrack);
|
||||
}
|
||||
else
|
||||
return false;
|
||||
|
@ -349,9 +329,11 @@ grLoadScene(tTrack *track)
|
|||
{
|
||||
GfLogError("No specified track 3D model file\n");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
osgDB::FilePathList filePathList = osgDB::Registry::instance()->getDataFilePathList();
|
||||
osgLoader loader;
|
||||
|
||||
//osgDB::FilePathList filePathList = osgDB::Registry::instance()->getDataFilePathList();
|
||||
//filePathList.push_back(globals->get_fg_root());
|
||||
|
||||
std::string PathTmp = GetDataDir();
|
||||
|
@ -366,49 +348,53 @@ grLoadScene(tTrack *track)
|
|||
if (grBGType)
|
||||
{
|
||||
std::string strTPath = PathTmp;
|
||||
sprintf(buf, "tracks/%s/%s", grTrack->category, grTrack->internalname);
|
||||
sprintf(buf, "tracks/%s/%s/", grTrack->category, grTrack->internalname);
|
||||
strTPath+=buf;
|
||||
//filePathList.push_back(strTPath);
|
||||
SetTexturePaths(strTPath.c_str());
|
||||
loader.AddSearchPath(strTPath);
|
||||
//SetTexturePaths(strTPath.c_str());
|
||||
|
||||
strTPath = PathTmp;
|
||||
strTPath+="data/objects";
|
||||
loader.AddSearchPath(strTPath);
|
||||
//filePathList.push_back(strTPath);
|
||||
SetTexturePaths(strTPath.c_str());
|
||||
//SetTexturePaths(strTPath.c_str());
|
||||
|
||||
strTPath = PathTmp;
|
||||
strTPath+="data/textures";
|
||||
loader.AddSearchPath(strTPath);
|
||||
//filePathList.push_back(strTPath);
|
||||
SetTexturePaths(strTPath.c_str());
|
||||
//SetTexturePaths(strTPath.c_str());
|
||||
|
||||
//osgDB::Registry::instance()->getDataFilePathList() = filePathList;
|
||||
//SetTexturePaths(filePathList);
|
||||
|
||||
std::string strPath = GetDataDir();
|
||||
sprintf(buf, "tracks/%s/%s/land.ac", grTrack->category, grTrack->internalname);
|
||||
strPath+=buf;
|
||||
std::string strPath;
|
||||
//sprintf(buf, "land.ac", grTrack->category, grTrack->internalname);
|
||||
strPath+="land.ac";
|
||||
LoadBackground(strPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string strTPath = PathTmp;
|
||||
sprintf(buf, "tracks/%s/%s", grTrack->category, grTrack->internalname);
|
||||
sprintf(buf, "tracks/%s/%s/", grTrack->category, grTrack->internalname);
|
||||
strTPath+=buf;
|
||||
strTPath+="/";
|
||||
loader.AddSearchPath(strTPath);
|
||||
//filePathList.push_back(strTPath);
|
||||
SetTexturePaths(strTPath.c_str());
|
||||
//SetTexturePaths(strTPath.c_str());
|
||||
|
||||
strTPath = PathTmp;
|
||||
strTPath+="data/objects";
|
||||
loader.AddSearchPath(strTPath);
|
||||
//filePathList.push_back(strTPath);
|
||||
SetTexturePaths(strTPath.c_str());
|
||||
//SetTexturePaths(strTPath.c_str());
|
||||
|
||||
//osgDB::Registry::instance()->getDataFilePathList() = filePathList;
|
||||
//SetTexturePaths(filePathList);
|
||||
|
||||
std::string strPath = GetDataDir();
|
||||
std::string strPath;
|
||||
//sprintf(buf, "tracks/%s/%s/background-sky.ac", grTrack->category, grTrack->internalname);
|
||||
strPath+="data/objects/background-sky.ac";
|
||||
strPath+="background-sky.ac";
|
||||
LoadBackground(strPath);
|
||||
}
|
||||
}
|
||||
|
@ -419,25 +405,26 @@ grLoadScene(tTrack *track)
|
|||
//strTPath+=buf;
|
||||
//sprintf(buf, "%sdata/textures", GetDataDir());
|
||||
std::string strPath = GetDataDir();
|
||||
sprintf(buf, "tracks/%s/%s", grTrack->category, grTrack->internalname);
|
||||
sprintf(buf, "tracks/%s/%s/", grTrack->category, grTrack->internalname);
|
||||
strPath+=buf;
|
||||
strTPath = strPath;
|
||||
filePathList.push_back(strTPath);
|
||||
strPath+="/";
|
||||
strPath+=acname;
|
||||
//filePathList.push_back(strTPath);
|
||||
loader.AddSearchPath(strTPath);
|
||||
//strPath+="/";
|
||||
//strPath+=acname;
|
||||
|
||||
strTPath = PathTmp;
|
||||
//sprintf(buf, "tracks/%s/%s:", grTrack->category, grTrack->internalname);
|
||||
//strTPath+=buf;
|
||||
//sprintf(buf, "%sdata/textures", GetDataDir());
|
||||
strTPath+="data/textures";
|
||||
filePathList.push_back(strTPath);
|
||||
loader.AddSearchPath(strTPath);
|
||||
//SetTexturePaths(strTPath.c_str());
|
||||
|
||||
//osgDB::Registry::instance()->getDataFilePathList() = filePathList;
|
||||
//SetTexturePaths(filePathList);
|
||||
|
||||
LoadTrack(strPath);
|
||||
LoadTrack(acname);
|
||||
|
||||
//GfOut("Track = %d\n", m_sceneroot);
|
||||
//desc = grssgLoadAC3D(acname, NULL);
|
||||
|
|
|
@ -26,10 +26,12 @@
|
|||
#include <osg/LightSource>
|
||||
#include <osg/Camera>
|
||||
|
||||
//#include "OsgLoader.h"
|
||||
|
||||
#include "OsgMain.h"
|
||||
#include "OsgScenery.h"
|
||||
|
||||
#include "OsgLoader.h"
|
||||
|
||||
#include <glfeatures.h> //gluXXX
|
||||
#include <robottools.h> //RtXXX()
|
||||
|
||||
|
@ -43,6 +45,7 @@ SDScenery::SDScenery(void)
|
|||
_nb_cloudlayer = 0;
|
||||
_DynamicSkyDome = 0;
|
||||
_SkyDomeDistance = 0;
|
||||
_SkyDomeDistThresh = 12000;
|
||||
|
||||
_bgtype = false;
|
||||
|
||||
|
@ -61,7 +64,7 @@ SDScenery::~SDScenery(void)
|
|||
//delete m_pits;
|
||||
}
|
||||
|
||||
void SDScenery::LoadScene(tTrack *track)
|
||||
osg::Node* SDScenery::LoadScene(tTrack *track)
|
||||
{
|
||||
void *hndl = grTrackHandle;
|
||||
const char *acname;
|
||||
|
@ -91,7 +94,6 @@ void SDScenery::LoadScene(tTrack *track)
|
|||
if (strlen(acname) == 0)
|
||||
{
|
||||
GfLogError("No specified track 3D model file\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
osgDB::FilePathList filePathList = osgDB::Registry::instance()->getDataFilePathList();
|
||||
|
@ -99,57 +101,50 @@ void SDScenery::LoadScene(tTrack *track)
|
|||
std::string PathTmp = GetDataDir();
|
||||
//filePathList.push_back(path_list[i]);
|
||||
|
||||
if (grSkyDomeDistance > 0 && grTrack->skyversion > 0)
|
||||
if (_SkyDomeDistance > 0 && grTrack->skyversion > 0)
|
||||
{
|
||||
grBGSky = strcmp(GfParmGetStr(grHandle, GR_SCT_GRAPHIC, GR_ATT_BGSKY, GR_ATT_BGSKY_DISABLED), GR_ATT_BGSKY_ENABLED) == 0;
|
||||
if (grBGSky)
|
||||
_bgsky = strcmp(GfParmGetStr(grHandle, GR_SCT_GRAPHIC, GR_ATT_BGSKY, GR_ATT_BGSKY_DISABLED), GR_ATT_BGSKY_ENABLED) == 0;
|
||||
if (_bgsky)
|
||||
{
|
||||
grBGType = strcmp(GfParmGetStr(grHandle, GR_SCT_GRAPHIC, GR_ATT_BGSKYTYPE, GR_ATT_BGSKY_RING), GR_ATT_BGSKY_LAND) == 0;
|
||||
_bgtype = strcmp(GfParmGetStr(grHandle, GR_SCT_GRAPHIC, GR_ATT_BGSKYTYPE, GR_ATT_BGSKY_RING), GR_ATT_BGSKY_LAND) == 0;
|
||||
std::string strPath = PathTmp;
|
||||
sprintf(buf, "tracks/%s/%s", grTrack->category, grTrack->internalname);
|
||||
strPath += buf;
|
||||
_scenery->addChild(m_background->buid(grBGType, _grWrldX, _grWrldY, strPath));
|
||||
_scenery->addChild(m_background->build(_bgtype, _grWrldX, _grWrldY, strPath));
|
||||
}
|
||||
}
|
||||
|
||||
std::string strPath = GetDataDir();
|
||||
sprintf(buf, "tracks/%s/%s", grTrack->category, grTrack->internalname);
|
||||
strPath+=buf;
|
||||
strTPath = strPath;
|
||||
filePathList.push_back(strTPath);
|
||||
_strTexturePath = strPath;
|
||||
strPath+="/";
|
||||
strPath+=acname;
|
||||
|
||||
strTPath = PathTmp;
|
||||
strTPath+="data/textures";
|
||||
filePathList.push_back(strTPath);
|
||||
|
||||
LoadTrack(strPath);
|
||||
|
||||
return 0;
|
||||
return _scenery;
|
||||
}
|
||||
|
||||
void SDScenery::LoadBackgroundGraphicsOptions()
|
||||
void SDScenery::LoadSkyOptions()
|
||||
{
|
||||
// Sky dome / background.
|
||||
grSkyDomeDistance =
|
||||
(unsigned)(GfParmGetNum(grHandle, GR_SCT_GRAPHIC, GR_ATT_SKYDOMEDISTANCE, 0, 0) + 0.5);
|
||||
if (grSkyDomeDistance > 0 && grSkyDomeDistance < SkyDomeDistThresh)
|
||||
grSkyDomeDistance = SkyDomeDistThresh; // If user enabled it (>0), must be at least the threshold.
|
||||
_SkyDomeDistance = (unsigned)(GfParmGetNum(grHandle, GR_SCT_GRAPHIC, GR_ATT_SKYDOMEDISTANCE, 0, 0) + 0.5);
|
||||
if (_SkyDomeDistance > 0 && _SkyDomeDistance < _SkyDomeDistThresh)
|
||||
_SkyDomeDistance = _SkyDomeDistThresh; // If user enabled it (>0), must be at least the threshold.
|
||||
|
||||
grDynamicSkyDome = grSkyDomeDistance > 0 && strcmp(GfParmGetStr(grHandle, GR_SCT_GRAPHIC, GR_ATT_DYNAMICSKYDOME, GR_ATT_DYNAMICSKYDOME_DISABLED),
|
||||
_DynamicSkyDome = _SkyDomeDistance > 0 && strcmp(GfParmGetStr(grHandle, GR_SCT_GRAPHIC, GR_ATT_DYNAMICSKYDOME, GR_ATT_DYNAMICSKYDOME_DISABLED),
|
||||
GR_ATT_DYNAMICSKYDOME_ENABLED) == 0;
|
||||
|
||||
GfLogInfo("Graphic options : Sky dome : distance = %u m, dynamic = %s\n",
|
||||
grSkyDomeDistance, grDynamicSkyDome ? "true" : "false");
|
||||
_SkyDomeDistance, _DynamicSkyDome ? "true" : "false");
|
||||
|
||||
// Cloud layers.
|
||||
grNbCloudLayers = (unsigned)(GfParmGetNum(grHandle, GR_SCT_GRAPHIC, GR_ATT_CLOUDLAYER, 0, 0) + 0.5);
|
||||
//grNbCloudLayers = (unsigned)(GfParmGetNum(grHandle, GR_SCT_GRAPHIC, GR_ATT_CLOUDLAYER, 0, 0) + 0.5);
|
||||
|
||||
GfLogInfo("Graphic options : Number of cloud layers : %u\n", grNbCloudLayers);
|
||||
//GfLogInfo("Graphic options : Number of cloud layers : %u\n", grNbCloudLayers);
|
||||
|
||||
grMax_Visibility =
|
||||
(unsigned)(GfParmGetNum(grHandle, GR_SCT_GRAPHIC, GR_ATT_VISIBILITY, 0, 0));
|
||||
_max_visibility = (unsigned)(GfParmGetNum(grHandle, GR_SCT_GRAPHIC, GR_ATT_VISIBILITY, 0, 0));
|
||||
}
|
||||
|
||||
void SDScenery::LoadGraphicsOptions()
|
||||
|
@ -162,10 +157,10 @@ void SDScenery::LoadGraphicsOptions()
|
|||
grHandle = GfParmReadFile(buf, GFPARM_RMODE_STD | GFPARM_RMODE_REREAD);
|
||||
}//if grHandle
|
||||
|
||||
LoadBackgroundGraphicsOptions();
|
||||
LoadSkyOptions();
|
||||
}
|
||||
|
||||
void SDScenery::ClearScene(void)
|
||||
void SDScenery::ShutdownScene(void)
|
||||
{
|
||||
_scenery->removeChildren(0, _scenery->getNumChildren());
|
||||
}
|
||||
|
@ -174,28 +169,19 @@ bool SDScenery::LoadTrack(std::string strTrack)
|
|||
{
|
||||
GfOut("Chemin Track : %s\n", strTrack.c_str());
|
||||
osgLoader loader;
|
||||
GfOut("Chemin Textures : %s\n", m_strTexturePath.c_str());
|
||||
loader.AddSearchPath(m_strTexturePath);
|
||||
osg::Node *pTrack = loader.Load3dFile(strTrack);
|
||||
GfOut("Chemin Textures : %s\n", _strTexturePath.c_str());
|
||||
loader.AddSearchPath(_strTexturePath);
|
||||
osg::Node *pTrack = loader.Load3dFile(strTrack, false);
|
||||
|
||||
if (pTrack)
|
||||
{
|
||||
osgUtil::Optimizer optimizer;
|
||||
optimizer.optimize(pTrack);
|
||||
pTrack->getOrCreateStateSet()->setRenderBinDetails(TRACKBIN,"RenderBin");
|
||||
m_sceneroot->addChild(pTrack);
|
||||
_scenery->addChild(pTrack);
|
||||
}
|
||||
else
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void SDScenery::ShutdownScene(void)
|
||||
{
|
||||
}//grShutdownScene
|
||||
|
||||
void SDScenery::SetTexturePaths(const char *pszPath)
|
||||
{
|
||||
m_strTexturePath = pszPath;
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#include <track.h> //tTrack
|
||||
#include <raceman.h> // tSituation
|
||||
|
||||
#include "OsgLoader.h"
|
||||
#include <osg/Group>
|
||||
|
||||
class SDBackground;
|
||||
//class SDSpectators;
|
||||
|
@ -101,17 +101,20 @@ private:
|
|||
int _nb_cloudlayer;
|
||||
int _DynamicSkyDome;
|
||||
int _SkyDomeDistance;
|
||||
int _SkyDomeDistThresh;
|
||||
|
||||
bool _bgtype;
|
||||
bool _bgsky;
|
||||
|
||||
//_spectators = 0;
|
||||
//_trees = 0;
|
||||
//_pits = 0;
|
||||
//_pits = 0;
|
||||
std::string _strTexturePath;
|
||||
|
||||
tTrack *grTrack;
|
||||
osgLoader *TheScene;
|
||||
|
||||
void LoadGraphicsOptions();
|
||||
void LoadSkyOptions();
|
||||
void CustomizePits(void);
|
||||
bool LoadTrack(std::string strTrack);
|
||||
|
||||
|
@ -123,7 +126,7 @@ public:
|
|||
/* Destructor */
|
||||
~SDScenery(void);
|
||||
|
||||
void LoadScene(tTrack *track);
|
||||
osg::Node *LoadScene(tTrack *track);
|
||||
void CreatePit(tTrack *track);
|
||||
//void addSpectators(SDSpectators->build(number, tTrack *track));
|
||||
//void addTrees(SDTrees->build(tTrack *track));
|
||||
|
@ -134,7 +137,6 @@ public:
|
|||
|
||||
//osg::ref_ptr<osg::Group> getSDScenery { return _scenery };
|
||||
//osg::Group getSDBackground { return SDBackground->getbackground; }
|
||||
osg::Node* getSceneroot() { return _scenery.get(); }
|
||||
};
|
||||
|
||||
#endif //_OSGSCENERY_H_
|
||||
|
|
Loading…
Reference in a new issue