Updates from Nick.

Added support for OSG_TXP_DEFAULT_MAX_ANISOTROPY to override the default make
anistropy in textures.
This commit is contained in:
Robert Osfield 2003-12-23 13:02:13 +00:00
parent 2747c0aa41
commit 5cc98a420d
11 changed files with 344 additions and 37 deletions

View File

@ -37,7 +37,12 @@ osgDB::ReaderWriter::ReadResult ReaderWriterTXP::readNode(const std::string& fil
if (txpNode->loadArchive())
{
TXPArchive* archive = txpNode->getArchive();
if (archive) archive->setId(_archiveId++);
if (archive)
{
int id = _archiveId++;
archive->setId(id);
getArchive(id,osgDB::getFilePath(fileName));
}
return txpNode.get();
}
else
@ -137,11 +142,14 @@ TXPArchive *ReaderWriterTXP::getArchive(int id, const std::string& dir)
return NULL;
}
/*
// We load the models on demand
if (archive->loadModels() == false)
{
ReaderWriterTXPERROR("getArchive()") << "failed to load models from archive: \"" << archiveName << "\"" << std::endl;
return NULL;
}
*/
if (archive->loadLightAttributes() == false)
{

View File

@ -1,3 +1,36 @@
/* **************************************************************************
* December 2003
*
* This TerraPage loader was re-written in a fashion to use PagedLOD
* to manage paging entirely, also includes a version of Terrex's smart mesh
* adapted to work with PagedLOD. The basic code by Boris Bralo is still present,
* slight modified.
* nick at terrex dot com
*
* Ported to PagedLOD technology by Trajce Nikolov (Nick) & Robert Osfield
*****************************************************************************/
/* **************************************************************************
* OpenSceneGraph loader for Terrapage format database
* by Boris Bralo 2002
*
* based on/modifed sgl (Scene Graph Library) loader by Bryan Walsh
*
* This loader is based on/modified from Terrain Experts Performer Loader,
* and was ported to SGL by Bryan Walsh / bryanw at earthlink dot net
*
* That loader is redistributed under the terms listed on Terrain Experts
* website (www.terrex.com/www/pages/technology/technologypage.htm)
*
* "TerraPage is provided as an Open Source format for use by anyone...
* We supply the TerraPage C++ source code free of charge. Anyone
* can use it and redistribute it as needed (including our competitors).
* We do, however, ask that you keep the TERREX copyrights intact."
*
* Copyright Terrain Experts Inc. 1999.
* All Rights Reserved.
*
*****************************************************************************/
#ifndef __READERWRITER_TXP_H_
#define __READERWRITER_TXP_H_

View File

@ -82,11 +82,28 @@ bool TXPArchive::openFile(const std::string& archiveName)
header->GetExtents(_swExtents,_neExtents);
}
/*
int numTextures;
texTable.GetNumTextures(numTextures);
_textures.resize(numTextures);
*/
int numModel;
modelTable.GetNumModels(numModel);
_models.resize(numModel);
return true;
}
bool TXPArchive::loadMaterial(int ix)
{
return false;
}
bool TXPArchive::loadMaterials()
{
osg::notify(osg::NOTICE) << "txp:: Loading materials ..." << std::endl;
trpgrImageHelper image_helper(this->GetEndian(),getDir(),materialTable,texTable);
int numTextures;
@ -341,53 +358,68 @@ bool TXPArchive::loadMaterials()
_gstates[i] = osg_state_set;
}
}
osg::notify(osg::NOTICE) << "txp:: ... done." << std::endl;
return true;
}
bool TXPArchive::loadModel(int ix)
{
trpgModel *mod = modelTable.GetModelRef(ix);
int type;
mod->GetType(type);
// Only dealing with external models currently
if (type == trpgModel::External)
{
char name[1024];
mod->GetName(name,1023);
// Load the model. It's probably not TerraPage
osg::Node *osg_model = osgDB::readNodeFile(name);
if (!osg_model)
{
osg::notify(osg::WARN) << "TrPageArchive::LoadModels() error: "
<< "failed to load model: "
<< name << std::endl;
}
// Do this even if it's NULL
_models[ix] = osg_model;
}
/*
else
{
trpgMemReadBuffer buf(GetEndian());
mod->Read(buf);
Group *osg_model = parse->ParseScene(buf, m_gstates , m_models);
m_models.push_back(osg_model);
}
*/
return true;
}
bool TXPArchive::loadModels()
{
osg::notify(osg::NOTICE) << "txp:: Loading models ..." << std::endl;
int numModel;
modelTable.GetNumModels(numModel);
_models.resize(numModel);
// Iterate over the models
for (int i=0; i< numModel; i++)
{
trpgModel *mod = modelTable.GetModelRef(i);
int type;
mod->GetType(type);
// Only dealing with external models currently
if (type == trpgModel::External)
{
char name[1024];
mod->GetName(name,1023);
// Load the model. It's probably not TerraPage
osg::Node *osg_model = osgDB::readNodeFile(name);
if (!osg_model)
{
osg::notify(osg::WARN) << "TrPageArchive::LoadModels() error: "
<< "failed to load model: "
<< name << std::endl;
}
// Do this even if it's NULL
_models.push_back(osg_model);
}
/*
else
{
trpgMemReadBuffer buf(GetEndian());
mod->Read(buf);
Group *osg_model = parse->ParseScene(buf, m_gstates , m_models);
m_models.push_back(osg_model);
}
*/
loadModel(i);
}
osg::notify(osg::NOTICE) << "txp:: ... done." << std::endl;
return true;
}
bool TXPArchive::loadLightAttributes()
{
osg::notify(osg::NOTICE) << "txp:: Loading light attributes ..." << std::endl;
int num;
lightTable.GetNumLightAttrs(num);
for ( int attr_num = 0; attr_num < num; attr_num++ )
@ -484,6 +516,8 @@ bool TXPArchive::loadLightAttributes()
addLightAttribute(osgLight, stateSet, osg::Vec3(normal.x,normal.y,normal.z));
}
osg::notify(osg::NOTICE) << "txp:: ... done." << std::endl;
return true;
}
@ -557,7 +591,7 @@ osg::Group* TXPArchive::getTileContent(int x, int y, int lod)
trpgMemReadBuffer buf(GetEndian());
if (!ReadTile(x,y,lod,buf))
{
return new osg::Group;
return new osg::Group;
}
osg::Group *tileGroup = _parser->parseScene(buf,_gstates,_models);

View File

@ -1,3 +1,36 @@
/* **************************************************************************
* December 2003
*
* This TerraPage loader was re-written in a fashion to use PagedLOD
* to manage paging entirely, also includes a version of Terrex's smart mesh
* adapted to work with PagedLOD. The basic code by Boris Bralo is still present,
* slight modified.
* nick at terrex dot com
*
* Ported to PagedLOD technology by Trajce Nikolov (Nick) & Robert Osfield
*****************************************************************************/
/* **************************************************************************
* OpenSceneGraph loader for Terrapage format database
* by Boris Bralo 2002
*
* based on/modifed sgl (Scene Graph Library) loader by Bryan Walsh
*
* This loader is based on/modified from Terrain Experts Performer Loader,
* and was ported to SGL by Bryan Walsh / bryanw at earthlink dot net
*
* That loader is redistributed under the terms listed on Terrain Experts
* website (www.terrex.com/www/pages/technology/technologypage.htm)
*
* "TerraPage is provided as an Open Source format for use by anyone...
* We supply the TerraPage C++ source code free of charge. Anyone
* can use it and redistribute it as needed (including our competitors).
* We do, however, ask that you keep the TERREX copyrights intact."
*
* Copyright Terrain Experts Inc. 1999.
* All Rights Reserved.
*
*****************************************************************************/
#ifndef __TXPARCHIVE_H_
#define __TXPARCHIVE_H_
@ -35,9 +68,11 @@ namespace txp
// Load the materials from the archve
bool loadMaterials();
bool loadMaterial(int ix);
// Load the models from the archive
bool loadModels();
bool loadModel(int ix);
// Load the light attribs from the archive
bool loadLightAttributes();
@ -79,7 +114,7 @@ namespace txp
osg::Group* getTileContent(int x, int y, int lod);
protected:

View File

@ -103,7 +103,7 @@ bool TXPNode::loadArchive()
return false;
}
/*
/*
if (_archive->loadMaterials() == false)
{
TXPNodeERROR("loadArchive()") << "failed to load materials from archive: \"" << _archiveName << "\"" << std::endl;
@ -121,7 +121,7 @@ bool TXPNode::loadArchive()
TXPNodeERROR("loadArchive()") << "failed to load light attributes from archive: \"" << _archiveName << "\"" << std::endl;
return false;
}
*/
*/
_archive->getOrigin(_originX,_originY);
_archive->getExtents(_extents);

View File

@ -1,3 +1,36 @@
/* **************************************************************************
* December 2003
*
* This TerraPage loader was re-written in a fashion to use PagedLOD
* to manage paging entirely, also includes a version of Terrex's smart mesh
* adapted to work with PagedLOD. The basic code by Boris Bralo is still present,
* slight modified.
* nick at terrex dot com
*
* Ported to PagedLOD technology by Trajce Nikolov (Nick) & Robert Osfield
*****************************************************************************/
/* **************************************************************************
* OpenSceneGraph loader for Terrapage format database
* by Boris Bralo 2002
*
* based on/modifed sgl (Scene Graph Library) loader by Bryan Walsh
*
* This loader is based on/modified from Terrain Experts Performer Loader,
* and was ported to SGL by Bryan Walsh / bryanw at earthlink dot net
*
* That loader is redistributed under the terms listed on Terrain Experts
* website (www.terrex.com/www/pages/technology/technologypage.htm)
*
* "TerraPage is provided as an Open Source format for use by anyone...
* We supply the TerraPage C++ source code free of charge. Anyone
* can use it and redistribute it as needed (including our competitors).
* We do, however, ask that you keep the TERREX copyrights intact."
*
* Copyright Terrain Experts Inc. 1999.
* All Rights Reserved.
*
*****************************************************************************/
#ifndef __TXPNODE_H_
#define __TXPNODE_H_

View File

@ -1,3 +1,36 @@
/* **************************************************************************
* December 2003
*
* This TerraPage loader was re-written in a fashion to use PagedLOD
* to manage paging entirely, also includes a version of Terrex's smart mesh
* adapted to work with PagedLOD. The basic code by Boris Bralo is still present,
* slight modified.
* nick at terrex dot com
*
* Ported to PagedLOD technology by Trajce Nikolov (Nick) & Robert Osfield
*****************************************************************************/
/* **************************************************************************
* OpenSceneGraph loader for Terrapage format database
* by Boris Bralo 2002
*
* based on/modifed sgl (Scene Graph Library) loader by Bryan Walsh
*
* This loader is based on/modified from Terrain Experts Performer Loader,
* and was ported to SGL by Bryan Walsh / bryanw at earthlink dot net
*
* That loader is redistributed under the terms listed on Terrain Experts
* website (www.terrex.com/www/pages/technology/technologypage.htm)
*
* "TerraPage is provided as an Open Source format for use by anyone...
* We supply the TerraPage C++ source code free of charge. Anyone
* can use it and redistribute it as needed (including our competitors).
* We do, however, ask that you keep the TERREX copyrights intact."
*
* Copyright Terrain Experts Inc. 1999.
* All Rights Reserved.
*
*****************************************************************************/
#ifndef __TXPPAGEMANAGER_H_
#define __TXPPAGEMANAGER_H_

View File

@ -17,11 +17,14 @@
#include <osgSim/LightPointNode>
#include <osg/Point>
#include <osg/ShapeDrawable>
#include <osg/ApplicationUsage>
#include "TXPParser.h"
#include "TXPArchive.h"
using namespace txp;
static osg::ApplicationUsageProxy TXP_e0(osg::ApplicationUsage::ENVIRONMENTAL_VARIABLE,"OSG_TXP_DEFAULT_MAX_ANISOTROPY \"<value> [<value>]\"","1.0 | 2.0 | 4.0 | 8.0 | 16.0");
TXPParser::TXPParser():
_archive(0),
_currentTop(0),
@ -30,7 +33,8 @@ _underBillboardSubgraph(false),
_numBillboardLevels(0),
_underLayerSubgraph(false),
_numLayerLevels(0),
_layerGeode(0)
_layerGeode(0),
_defaultMaxAnisotropy(1.0f)
{
AddCallback(TRPG_GEOMETRY,new geomRead(this));
AddCallback(TRPG_GROUP,new groupRead(this));
@ -40,6 +44,12 @@ _layerGeode(0)
AddCallback(TRPG_LIGHT,new lightRead(this));
AddCallback(TRPG_LAYER,new layerRead(this));
AddCallback(TRPGTILEHEADER,new tileHeaderRead(this));
if (getenv("OSG_TXP_DEFAULT_MAX_ANISOTROPY"))
{
_defaultMaxAnisotropy = atof(getenv("OSG_TXP_DEFAULT_MAX_ANISOTROPY"));
}
}
TXPParser::~TXPParser()
@ -350,7 +360,7 @@ void TXPParser::loadLocalMaterials()
osg_texture->setWrap(osg::Texture2D::WRAP_T, wrap_t == trpgTextureEnv::Repeat ? osg::Texture2D::REPEAT: osg::Texture2D::CLAMP );
// by default is anisotropic filtering.
osg_texture->setMaxAnisotropy(4.0f);
osg_texture->setMaxAnisotropy(_defaultMaxAnisotropy);
}
else
{
@ -430,6 +440,11 @@ void TXPParser::loadLocalMaterials()
}
}
bool TXPParser::requestModel(int ix)
{
return _archive->loadModel(ix);
}
//----------------------------------------------------------------------------
//
// LOD Reader Class
@ -522,6 +537,12 @@ void *modelRefRead::Parse(trpgToken /*tok*/,trpgReadBuffer &buf)
{
osg_Model = (*modelList)[modelID].get();
if (osg_Model==NULL)
{
_parse->requestModel(modelID);
osg_Model = (*modelList)[modelID].get();
}
// Create the SCS and position the model
if (osg_Model)
{

View File

@ -1,3 +1,36 @@
/* **************************************************************************
* December 2003
*
* This TerraPage loader was re-written in a fashion to use PagedLOD
* to manage paging entirely, also includes a version of Terrex's smart mesh
* adapted to work with PagedLOD. The basic code by Boris Bralo is still present,
* slight modified.
* nick at terrex dot com
*
* Ported to PagedLOD technology by Trajce Nikolov (Nick) & Robert Osfield
*****************************************************************************/
/* **************************************************************************
* OpenSceneGraph loader for Terrapage format database
* by Boris Bralo 2002
*
* based on/modifed sgl (Scene Graph Library) loader by Bryan Walsh
*
* This loader is based on/modified from Terrain Experts Performer Loader,
* and was ported to SGL by Bryan Walsh / bryanw at earthlink dot net
*
* That loader is redistributed under the terms listed on Terrain Experts
* website (www.terrex.com/www/pages/technology/technologypage.htm)
*
* "TerraPage is provided as an Open Source format for use by anyone...
* We supply the TerraPage C++ source code free of charge. Anyone
* can use it and redistribute it as needed (including our competitors).
* We do, however, ask that you keep the TERREX copyrights intact."
*
* Copyright Terrain Experts Inc. 1999.
* All Rights Reserved.
*
*****************************************************************************/
#ifndef __TXPPARSER_H_
#define __TXPPARSER_H_
@ -90,6 +123,9 @@ namespace txp
// Return the current model list
std::vector<osg::ref_ptr<osg::Node> >* getModels() { return _models; }
// Request a model to be load
bool requestModel(int ix);
// Return a reference to the tile header (after a tile has been read)
inline trpgTileHeader *getTileHeaderRef() { return &_tileHeader; }
@ -129,6 +165,11 @@ namespace txp
// Returns the current layer geode
inline osg::Geode* getLayerGeode() const { return _layerGeode; }
// default value to use when setting up textures.
void setMaxAnisotropy(float anisotropy) { _defaultMaxAnisotropy = anisotropy; }
float getMaxAnisotropy() const { return _defaultMaxAnisotropy; }
protected:
virtual ~TXPParser();
@ -188,6 +229,9 @@ namespace txp
// Our Layer Geode
osg::Geode* _layerGeode;
// default value to use when setting up textures.
float _defaultMaxAnisotropy;
// TEMP
osg::Geode* createBoundingBox(int x,int y, int lod);

View File

@ -1,3 +1,36 @@
/* **************************************************************************
* December 2003
*
* This TerraPage loader was re-written in a fashion to use PagedLOD
* to manage paging entirely, also includes a version of Terrex's smart mesh
* adapted to work with PagedLOD. The basic code by Boris Bralo is still present,
* slight modified.
* nick at terrex dot com
*
* Ported to PagedLOD technology by Trajce Nikolov (Nick) & Robert Osfield
*****************************************************************************/
/* **************************************************************************
* OpenSceneGraph loader for Terrapage format database
* by Boris Bralo 2002
*
* based on/modifed sgl (Scene Graph Library) loader by Bryan Walsh
*
* This loader is based on/modified from Terrain Experts Performer Loader,
* and was ported to SGL by Bryan Walsh / bryanw at earthlink dot net
*
* That loader is redistributed under the terms listed on Terrain Experts
* website (www.terrex.com/www/pages/technology/technologypage.htm)
*
* "TerraPage is provided as an Open Source format for use by anyone...
* We supply the TerraPage C++ source code free of charge. Anyone
* can use it and redistribute it as needed (including our competitors).
* We do, however, ask that you keep the TERREX copyrights intact."
*
* Copyright Terrain Experts Inc. 1999.
* All Rights Reserved.
*
*****************************************************************************/
#ifndef TXPSeamLOD_H
#define TXPSeamLOD_H

View File

@ -1,3 +1,36 @@
/* **************************************************************************
* December 2003
*
* This TerraPage loader was re-written in a fashion to use PagedLOD
* to manage paging entirely, also includes a version of Terrex's smart mesh
* adapted to work with PagedLOD. The essential code by Boris Bralo is still present,
* slight modified.
* nick at terrex dot com
*
* Ported to PagedLOD technology by Trajce Nikolov (Nick) & Robert Osfield
*****************************************************************************/
/* **************************************************************************
* OpenSceneGraph loader for Terrapage format database
* by Boris Bralo 2002
*
* based on/modifed sgl (Scene Graph Library) loader by Bryan Walsh
*
* This loader is based on/modified from Terrain Experts Performer Loader,
* and was ported to SGL by Bryan Walsh / bryanw at earthlink dot net
*
* That loader is redistributed under the terms listed on Terrain Experts
* website (www.terrex.com/www/pages/technology/technologypage.htm)
*
* "TerraPage is provided as an Open Source format for use by anyone...
* We supply the TerraPage C++ source code free of charge. Anyone
* can use it and redistribute it as needed (including our competitors).
* We do, however, ask that you keep the TERREX copyrights intact."
*
* Copyright Terrain Experts Inc. 1999.
* All Rights Reserved.
*
*****************************************************************************/
#ifndef __TXPTILENODE_H_
#define __TXPTILENODE_H_