Improvements to the osgProducer lib to better handle Producer's normalized

coord system.

Addition of ReadCameraConfigFile and WriteCameraConfigFile as a tempory
measure for implementing local a C++ read/write of the Producer::CameraConfig, this
will be removed once these implementations or similar have been moved to Producer.
This commit is contained in:
Robert Osfield
2003-01-18 22:07:59 +00:00
parent 13aa469628
commit 762db56a40
9 changed files with 153 additions and 230 deletions

View File

@@ -32,41 +32,6 @@
#include <list>
static Producer::CameraConfig *BuildConfig(void)
{
Producer::RenderSurface *rs1 = new Producer::RenderSurface;
rs1->setScreenNum(0);
// rs1->useBorder(false);
// rs1->setWindowRect(0,0,640,480);
rs1->setWindowRect(10,10,620,480);
Producer::Camera *camera1 = new Producer::Camera;
camera1->setRenderSurface(rs1);
camera1->setOffset( 1.0, 0.0 );
Producer::RenderSurface *rs2 = new Producer::RenderSurface;
rs2->setScreenNum(0);
// rs2->useBorder(false);
// rs2->setWindowRect(640,0,640,480);
rs2->setWindowRect(650,10,620,480);
Producer::Camera *camera2 = new Producer::Camera;
camera2->setRenderSurface(rs2);
camera2->setOffset( -1.0, 0.0 );
Producer::CameraConfig *cfg = new Producer::CameraConfig;
cfg->addCamera("Camera 1",camera1);
cfg->addCamera("Camera 2", camera2);
Producer::InputArea *ia = new Producer::InputArea;
ia->addInputRectangle( rs1, Producer::InputRectangle(0.0,0.5,0.0,1.0));
ia->addInputRectangle( rs2, Producer::InputRectangle(0.5,1.0,0.0,1.0));
cfg->setInputArea(ia);
return cfg;
}
int main( int argc, char **argv )
{
@@ -76,7 +41,8 @@ int main( int argc, char **argv )
threadingModel = Producer::CameraGroup::ThreadPerCamera;
// configuration file.
std::string configFile; // configFile = "twoWindows.cfg"
std::string configFile;
//configFile = "twoWindows.cfg";
// set up the database files to read.
std::vector<std::string> filenameList;
@@ -86,22 +52,10 @@ int main( int argc, char **argv )
// create the camera group.
osgProducer::CameraGroup *cg = 0;
#define USE_BUILD_CONFIG
#ifdef USE_BUILD_CONFIG
Producer::CameraConfig *cfg = BuildConfig();
cg = new osgProducer::CameraGroup(cfg);
#else
cg = configFile.empty() ?
osgProducer::CameraGroup *cg = configFile.empty() ?
(new osgProducer::CameraGroup()):
(new osgProducer::CameraGroup(configFile));
#endif
// set up the maximum number of graphics contexts, before loading the scene graph
// to ensure that texture objects and display buffers are configured to the correct size.
osg::DisplaySettings::instance()->setMaxNumberOfGraphicsContexts( cg->getNumberOfCameras() );

View File

@@ -14,6 +14,11 @@ int EventAdapter::_s_Ymax = 1024;
int EventAdapter::_s_mx = 0;
int EventAdapter::_s_my = 0;
static float s_xOffset=1.0f;
static float s_xScale=0.5f;
static float s_yOffset=1.0f;
static float s_yScale=0.5f;
EventAdapter::EventAdapter()
{
_eventType = NONE; // adaptor does not encapsulate any events.
@@ -93,8 +98,8 @@ void EventAdapter::adaptButtonPress(double time,float x, float y, unsigned int b
break;
}
_s_mx = (int)(x*(float)(_s_Xmax-_s_Xmin))+_s_Xmin;
_s_my = (int)(y*(float)(_s_Ymin-_s_Ymax))+_s_Ymax;
_s_mx = (int)((x+s_xOffset)*s_xScale*(float)(_s_Xmax-_s_Xmin))+_s_Xmin;
_s_my = (int)((y+s_yOffset)*s_yScale*(float)(_s_Ymin-_s_Ymax))+_s_Ymax;
copyStaticVariables();
}
@@ -125,8 +130,8 @@ void EventAdapter::adaptButtonRelease(double time,float x, float y, unsigned int
break;
}
_s_mx = (int)(x*(float)(_s_Xmax-_s_Xmin))+_s_Xmin;
_s_my = (int)(y*(float)(_s_Ymin-_s_Ymax))+_s_Ymax;
_s_mx = (int)((x+s_xOffset)*s_xScale*(float)(_s_Xmax-_s_Xmin))+_s_Xmin;
_s_my = (int)((y+s_yOffset)*s_yScale*(float)(_s_Ymin-_s_Ymax))+_s_Ymax;
copyStaticVariables();
}
@@ -140,8 +145,8 @@ void EventAdapter::adaptMouseMotion(double time, float x, float y)
MOVE;
_time = time;
_s_mx = (int)(x*(float)(_s_Xmax-_s_Xmin))+_s_Xmin;
_s_my = (int)(y*(float)(_s_Ymin-_s_Ymax))+_s_Ymax;
_s_mx = (int)((x+s_xOffset)*s_xScale*(float)(_s_Xmax-_s_Xmin))+_s_Xmin;
_s_my = (int)((y+s_yOffset)*s_yScale*(float)(_s_Ymin-_s_Ymax))+_s_Ymax;
copyStaticVariables();
}

View File

@@ -2,8 +2,12 @@ TOPDIR = ../..
include $(TOPDIR)/Make/makedefs
CXXFILES =\
CameraGroup.cpp\
EventAdapter.cpp\
KeyboardMouseCallback.cpp\
SceneHandler.cpp\
ReadCameraConfigFile.cpp\
WriteCameraConfigFile.cpp\
LIBS += -lProducer $(GL_LIBS) -losgGA -losgUtil -losgDB -losg $(OTHER_LIBS)
DEF += -DOSGPRODUCER_LIBRARY

View File

@@ -0,0 +1,42 @@
#include <osgProducer/ReadCameraConfigFile>
using namespace osgProducer;
Producer::CameraConfig* osgProducer::readCameraConfigFile(const std::string& filename)
{
Producer::RenderSurface *rs1 = new Producer::RenderSurface;
rs1->setScreenNum(0);
// rs1->useBorder(false);
// rs1->setWindowRect(0,0,640,480);
rs1->setWindowRect(10,10,620,480);
Producer::Camera *camera1 = new Producer::Camera;
camera1->setRenderSurface(rs1);
camera1->setOffset( 1.0, 0.0 );
Producer::RenderSurface *rs2 = new Producer::RenderSurface;
rs2->setScreenNum(0);
// rs2->useBorder(false);
// rs2->setWindowRect(640,0,640,480);
rs2->setWindowRect(650,10,620,480);
Producer::Camera *camera2 = new Producer::Camera;
camera2->setRenderSurface(rs2);
camera2->setOffset( -1.0, 0.0 );
Producer::CameraConfig *cfg = new Producer::CameraConfig;
cfg->addCamera("Camera 1",camera1);
cfg->addCamera("Camera 2", camera2);
Producer::InputArea *ia = new Producer::InputArea;
ia->addInputRectangle( rs1, Producer::InputRectangle(-1.0,0.0,-1.0,1.0));
ia->addInputRectangle( rs2, Producer::InputRectangle(0.0,1.0,-1.0,1.0));
cfg->setInputArea(ia);
return cfg;
}

View File

@@ -0,0 +1,8 @@
#include <osgProducer/WriteCameraConfigFile>
using namespace osgProducer;
bool osgProducer::writeCameraConfigFile(const Producer::CameraConfig& cameraconfig, const std::string& filename)
{
return false;
}