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:
@@ -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() );
|
||||
|
||||
@@ -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();
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
42
src/osgProducer/ReadCameraConfigFile.cpp
Normal file
42
src/osgProducer/ReadCameraConfigFile.cpp
Normal 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;
|
||||
}
|
||||
|
||||
|
||||
8
src/osgProducer/WriteCameraConfigFile.cpp
Normal file
8
src/osgProducer/WriteCameraConfigFile.cpp
Normal file
@@ -0,0 +1,8 @@
|
||||
#include <osgProducer/WriteCameraConfigFile>
|
||||
|
||||
using namespace osgProducer;
|
||||
|
||||
bool osgProducer::writeCameraConfigFile(const Producer::CameraConfig& cameraconfig, const std::string& filename)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Reference in New Issue
Block a user