本文整理汇总了C++中osg::Trackball::setStartPosition方法的典型用法代码示例。如果您正苦于以下问题:C++ Trackball::setStartPosition方法的具体用法?C++ Trackball::setStartPosition怎么用?C++ Trackball::setStartPosition使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类osg::Trackball
的用法示例。
在下文中一共展示了Trackball::setStartPosition方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: key
//.........这里部分代码省略.........
pFBO_RB->setSize(uiImgSize, uiImgSize);
pFBO_RB->setColorAttachment(pRenBuffer, 0);
pFBO_RB->setDepthAttachment(pDepthBuffer_RB );
pFBO_RB->editMFDrawBuffers()->clear();
pFBO_RB->editMFDrawBuffers()->push_back(GL_COLOR_ATTACHMENT0_EXT);
vpFBO_RB->setFrameBufferObject(pFBO_RB);
pRenBuffer ->setReadBack (true);
vpFBO_RB->getFrameBufferObject()->setPostProcessOnDeactivate(true);
win->addPort(vpFBO_RB);
dumpImg_RB = true;
}
break;
case 'v':
rentravact->setVolumeDrawing(!rentravact->getVolumeDrawing());
break;
case 'a':
glDisable( GL_LIGHTING );
std::cerr << "Lighting disabled." << std::endl;
break;
case 's':
glEnable( GL_LIGHTING );
std::cerr << "Lighting enabled." << std::endl;
break;
case 'z':
pPoly->setFrontMode(GL_POINT);
pPoly->setBackMode(GL_POINT);
std::cerr << "PolygonMode: Point." << std::endl;
break;
case 'x':
pPoly->setFrontMode(GL_LINE);
pPoly->setBackMode(GL_LINE);
std::cerr << "PolygonMode: Line." << std::endl;
break;
case 'c':
pPoly->setFrontMode(GL_FILL);
pPoly->setBackMode(GL_FILL);
std::cerr << "PolygonMode: Fill." << std::endl;
break;
case 'p':
{
if(bPolyActive == true)
{
OSG_ASSERT(pCOver->subChunk(pPoly) == true);
bPolyActive = false;
}
else
{
OSG_ASSERT(pCOver->addChunk(pPoly) == true);
bPolyActive = true;
}
break;
}
case ' ':
{
OSG::Matrix m;
OSG::Quaternion q;
OSG::Vec3f v;
q = oldq;
v = oldv;
oldq = tball.getRotation();
oldv = tball.getPosition();
move_obj = ! move_obj;
if ( move_obj )
{
puts("moving object");
// m = scene_trans->getSFMatrix()->getValue();
tball.setMode( OSG::Trackball::OSGCamera );
}
else
{
puts("moving camera");
// m = cam_trans->getSFMatrix()->getValue();
tball.setMode( OSG::Trackball::OSGObject );
}
// q.setValue(m);
tball.setStartPosition( v, true );
tball.setStartRotation( q, true );
// std::cout << q << std::endl;
// std::cout << v << std::endl;
// std::cout << " " << m[3][0] << " " << m[3][1] << " " << m[3][2] << std::endl;
}
break;
}
}
示例2: init
//.........这里部分代码省略.........
vp->addForeground(pFG);
vp->addForeground(pFGCheck);
// vp->dump();
// Background
OSG::SolidBackgroundUnrecPtr bkgndFBO = OSG::SolidBackground::create();
bkgndFBO->setColor(OSG::Color3f(1.0,0.5,0.5));
// Viewport
vpFBO = OSG::FBOViewport::create();
vpFBO->setCamera (cam );
vpFBO->setBackground(bkgndFBO );
vpFBO->setRoot (root );
vpFBO->setSize (0, 0, 1, 1);
vpFBO->addForeground(pFGCheck);
OSG::FrameBufferObjectUnrecPtr pFBO = OSG::FrameBufferObject::create();
pTexBuffer = OSG::TextureBuffer::create();
OSG::RenderBufferUnrecPtr pDepthBuffer = OSG::RenderBuffer ::create();
pDepthBuffer->setInternalFormat(GL_DEPTH_COMPONENT24 );
pTexBuffer->setTexture(tx1o);
pFBO->setSize(128, 128);
pFBO->setColorAttachment(pTexBuffer, 0);
pFBO->setDepthAttachment(pDepthBuffer );
pFBO->editMFDrawBuffers()->clear();
pFBO->editMFDrawBuffers()->push_back(GL_COLOR_ATTACHMENT0_EXT);
vpFBO->setFrameBufferObject(pFBO);
// Window
std::cout << "GLUT winid: " << winid << std::endl;
GLint glvp[4];
glGetIntegerv( GL_VIEWPORT, glvp );
gwin = OSG::GLUTWindow::create();
gwin->setGlutId(winid);
gwin->setSize( glvp[2], glvp[3] );
win = gwin;
win->addPort(vpFBO );
win->addPort(vp );
win->init();
// Action
rentravact = OSG::RenderAction::create();
// renact->setFrustumCulling(false);
// tball
OSG::Vec3f pos;
pos.setValues(min[0] + ((max[0] - min[0]) * 0.5),
min[1] + ((max[1] - min[1]) * 0.5),
max[2] + ( max[2] - min[2] ) * 1.5 );
float scale = (max[2] - min[2] + max[1] - min[1] + max[0] - min[0]) / 6;
OSG::Pnt3f tCenter(min[0] + (max[0] - min[0]) / 2,
min[1] + (max[1] - min[1]) / 2,
min[2] + (max[2] - min[2]) / 2);
fprintf(stderr, "Startpos : %f %f %f\n", pos[0], pos[1], pos[2]);
tball.setMode( OSG::Trackball::OSGObject );
tball.setStartPosition( pos, true );
tball.setSum( true );
tball.setTranslationMode( OSG::Trackball::OSGFree );
tball.setTranslationScale(scale);
tball.setRotationCenter(tCenter);
// run...
pPoly = OSG::PolygonChunk::create();
pCOver->subChunk(pPoly);
return 0;
}
示例3: doMain
//.........这里部分代码省略.........
cam = OSG::PerspectiveCamera::create();
{
cam->setBeacon( b1n );
cam->setFov( OSG::osgDegree2Rad( 90 ) );
cam->setNear( 0.1f );
cam->setFar( 100000 );
}
// Background
OSG::SolidBackgroundUnrecPtr bkgnd = OSG::SolidBackground::create();
{
bkgnd->setColor(OSG::Color3f(0.3f, 0.3f, 0.3f));
}
// Viewport
vp = OSG::Viewport::create();
{
vp->setCamera( cam );
vp->setBackground( bkgnd );
vp->setRoot( hdrroot );
// vp->setRoot( root );
vp->setSize( 0,0, 1,1 );
}
// Window
OSG::GLUTWindowUnrecPtr gwin;
GLint glvp[4];
glGetIntegerv(GL_VIEWPORT, glvp);
gwin = OSG::GLUTWindow::create();
{
gwin->setGlutId(winid);
gwin->setSize( glvp[2], glvp[3] );
win = gwin;
win->addPort( vp );
win->init();
}
// Action
rentravact = OSG::RenderAction::create();
rentravact->setVolumeDrawing(true);
// rentravact->setFrustumCulling(false);
// tball
OSG::Vec3f pos;
pos.setValues(min[0] + ((max[0] - min[0]) * 0.5),
min[1] + ((max[1] - min[1]) * 0.5),
max[2] + ( max[2] - min[2] ) * 1.5 );
float scale = (max[2] - min[2] + max[1] - min[1] + max[0] - min[0]) / 6;
OSG::Pnt3f tCenter(min[0] + (max[0] - min[0]) / 2,
min[1] + (max[1] - min[1]) / 2,
min[2] + (max[2] - min[2]) / 2);
fprintf(stderr, "Startpos : %f %f %f\n", pos[0], pos[1], pos[2]);
tball.setMode (OSG::Trackball::OSGObject);
tball.setStartPosition (pos, true );
tball.setSum (true );
tball.setTranslationMode (OSG::Trackball::OSGFree );
tball.setTranslationScale(scale );
tball.setRotationCenter (tCenter );
fprintf(stderr, "Create b1n %p %d %d \n",
b1n.get(),
b1n->getRefCount(),
b1n->getWeakRefCount());
fprintf(stderr, "Create t1n %p %d %d \n",
t1n.get(),
t1n->getRefCount(),
t1n->getWeakRefCount());
fprintf(stderr, "Create dlight %p %d %d \n",
dlight.get(),
dlight->getRefCount(),
dlight->getWeakRefCount());
fprintf(stderr, "Create hdrroot %p %d %d \n",
hdrroot.get(),
hdrroot->getRefCount(),
hdrroot->getWeakRefCount());
fprintf(stderr, "Create root %p %d %d \n",
root.get(),
root->getRefCount(),
root->getWeakRefCount());
return 0;
}
示例4: init
//.........这里部分代码省略.........
OSG::Vec3f min,max;
file->getVolume().getBounds( min, max );
std::cout << "Volume: from " << min << " to " << max << std::endl;
OSG::MultiCoreUnrecPtr pMCore = OSG::MultiCore::create();
pCOver = OSG::ChunkOverrideGroup::create();
OSG::TransformRecPtr scene_trans = OSG::Transform::create();
pMCore->addCore(scene_trans);
pMCore->addCore(pCOver );
pPoly = OSG::PolygonChunk::create();
OSG::NodeUnrecPtr sceneTrN = OSG::Node::create();
sceneTrN->setCore (pMCore);
sceneTrN->addChild(file );
dlight->addChild(sceneTrN);
// Camera
OSG::PerspectiveCameraRecPtr cam = OSG::PerspectiveCamera::create();
cam->setBeacon(b1n );
cam->setFov (OSG::osgDegree2Rad(60));
cam->setNear (0.1 );
cam->setFar (400 );
// Background
OSG::SolidBackgroundUnrecPtr bkgnd = OSG::SolidBackground::create();
bkgnd->setColor(OSG::Color3f(0,0,0));
// Viewport
OSG::ViewportRecPtr vp = OSG::Viewport::create();
vp->setCamera (cam );
vp->setBackground(bkgnd );
vp->setRoot (root );
vp->setSize (0, 0, 1, 1);
// Window
std::cout << "GLUT winid: " << winid << std::endl;
GLint glvp[4];
glGetIntegerv(GL_VIEWPORT, glvp);
OSG::GLUTWindowUnrecPtr gwin = OSG::GLUTWindow::create();
gwin->setGlutId(winid);
gwin->setSize( glvp[2], glvp[3] );
win = gwin;
win->addPort(vp);
win->init();
// Action
rentravact = OSG::RenderAction::create();
// renact->setFrustumCulling(false);
// tball
OSG::Vec3f pos;
pos.setValues(min[0] + ((max[0] - min[0]) * 0.5),
min[1] + ((max[1] - min[1]) * 0.5),
max[2] + ( max[2] - min[2] ) * 1.5 );
float scale = (max[2] - min[2] + max[1] - min[1] + max[0] - min[0]) / 6;
OSG::Pnt3f tCenter(min[0] + (max[0] - min[0]) / 2,
min[1] + (max[1] - min[1]) / 2,
min[2] + (max[2] - min[2]) / 2);
fprintf(stderr, "Startpos : %f %f %f\n", pos[0], pos[1], pos[2]);
tball.setMode (OSG::Trackball::OSGObject);
tball.setStartPosition (pos, true );
tball.setSum (true );
tball.setTranslationMode (OSG::Trackball::OSGFree );
tball.setTranslationScale(scale );
tball.setRotationCenter (tCenter );
// run...
return 0;
}
示例5: doMain
//.........这里部分代码省略.........
cam->setFar( 100000 );
// Background
OSG::SolidBackgroundUnrecPtr bkgnd = OSG::SolidBackground::create();
bkgnd->setColor(OSG::Color3f(0,0,1));
// Viewport
vp = OSG::Viewport::create();
vp->setCamera( cam );
vp->setBackground( bkgnd );
vp->setRoot( root );
vp->setSize( 0,0, 1,1 );
// Action
ract = OSG::RenderAction::create();
// tball
OSG::Vec3f pos;
pos.setValues(min[0] + ((max[0] - min[0]) * 0.5),
min[1] + ((max[1] - min[1]) * 0.5),
max[2] + ( max[2] - min[2] ) * 1.5 );
float scale = (max[2] - min[2] + max[1] - min[1] + max[0] - min[0]) / 6;
OSG::Pnt3f tCenter(min[0] + (max[0] - min[0]) / 2,
min[1] + (max[1] - min[1]) / 2,
min[2] + (max[2] - min[2]) / 2);
tball.setMode( OSG::Trackball::OSGObject );
tball.setStartPosition( pos, true );
tball.setSum( true );
tball.setTranslationMode( OSG::Trackball::OSGFree );
tball.setTranslationScale(scale);
tball.setRotationCenter(tCenter);
// CoreGL init
// Install event handler
EventHandlerUPP eventHandlerUPP = NewEventHandlerUPP(eventHandler);
EventTypeSpec eventList[] =
{
{ kEventClassTextInput, kEventTextInputUnicodeForKeyEvent },
{ kEventClassMouse, kEventMouseDown },
{ kEventClassMouse, kEventMouseUp },
{ kEventClassMouse, kEventMouseDragged }
};
InstallApplicationEventHandler(eventHandlerUPP, GetEventTypeCount(eventList), eventList, 0, 0);
CGDisplayCapture(kCGDirectMainDisplay);
CGLPixelFormatAttribute attribs[] =
{
kCGLPFADoubleBuffer,
kCGLPFAFullScreen,
kCGLPFADepthSize,
(CGLPixelFormatAttribute)16,
kCGLPFADisplayMask,
(CGLPixelFormatAttribute)CGDisplayIDToOpenGLDisplayMask(kCGDirectMainDisplay),
(CGLPixelFormatAttribute)0
};
CGLPixelFormatObj pixelFormatObj;
GLint numPixelFormats;
CGLChoosePixelFormat(attribs, &pixelFormatObj, &numPixelFormats);
示例6: key
void key(unsigned char key, int x, int y)
{
switch ( key )
{
case 27:
fprintf(stderr, "Start Destruction\n\n");
rentravact = NULL;
hdrroot = NULL;
root = NULL;
file = NULL;
cam = NULL;
vp = NULL;
win = NULL;
cam_trans = NULL;
scene_trans = NULL;
pAnimTrs[0] = NULL;
pAnimTrs[1] = NULL;
pAnimTrs[2] = NULL;
pAnimTrs[3] = NULL;
pAnimTrs[4] = NULL;
pAnimTrs[5] = NULL;
OSG::osgExit();
exit(0);
case 'a':
glDisable( GL_LIGHTING );
std::cerr << "Lighting disabled." << std::endl;
break;
case 's':
glEnable( GL_LIGHTING );
std::cerr << "Lighting enabled." << std::endl;
break;
case 'r':
{
std::cerr << "Sending ray through " << x << "," << y << std::endl;
OSG::Line l;
cam->calcViewRay( l, x, y, *vp );
std::cerr << "From " << l.getPosition() << ", dir "
<< l.getDirection()
<< std::endl;
}
break;
case 'd':
OSG::ActionDataSlotPool::the()->dumpState();
OSG::StageIdPool ::the()->dumpState();
rentravact->dumpStore();
break;
case ' ':
{
OSG::Matrix m;
OSG::Quaternion q;
OSG::Vec3f v;
q = oldq;
v = oldv;
oldq = tball.getRotation();
oldv = tball.getPosition();
move_obj = ! move_obj;
if ( move_obj )
{
puts("moving object");
tball.setMode( OSG::Trackball::OSGCamera );
}
else
{
puts("moving camera");
tball.setMode( OSG::Trackball::OSGObject );
}
tball.setStartPosition( v, true );
tball.setStartRotation( q, true );
}
break;
}
}
示例7: key
void key(unsigned char key, int x, int y)
{
switch ( key )
{
case 27:
fprintf(stderr, "Start Destruction\n\n");
rentravact = NULL;
hdrroot = NULL;
root = NULL;
// file = NULL;
cam = NULL;
vp = NULL;
win = NULL;
cam_trans = NULL;
scene_trans = NULL;
pAnimTrs[0] = NULL;
pAnimTrs[1] = NULL;
pAnimTrs[2] = NULL;
pAnimTrs[3] = NULL;
pAnimTrs[4] = NULL;
pAnimTrs[5] = NULL;
OSG::osgExit();
exit(0);
case 'a':
glDisable( GL_LIGHTING );
std::cerr << "Lighting disabled." << std::endl;
break;
case 's':
glEnable( GL_LIGHTING );
std::cerr << "Lighting enabled." << std::endl;
break;
case 'r':
{
std::cerr << "Sending ray through " << x << "," << y << std::endl;
OSG::Line l;
cam->calcViewRay( l, x, y, *vp );
std::cerr << "From " << l.getPosition() << ", dir "
<< l.getDirection()
<< std::endl;
}
break;
case 'g':
hdrroot->setCore(OSG::Group::create());
break;
case 'h':
createHDRCore(hdrroot);
break;
case 'd':
OSG::ActionDataSlotPool::the()->dumpState();
OSG::StageIdPool ::the()->dumpState();
rentravact->dumpStore();
break;
case ' ':
{
OSG::Matrix m;
OSG::Quaternion q;
OSG::Vec3f v;
q = oldq;
v = oldv;
oldq = tball.getRotation();
oldv = tball.getPosition();
move_obj = ! move_obj;
if ( move_obj )
{
puts("moving object");
tball.setMode( OSG::Trackball::OSGCamera );
}
else
{
puts("moving camera");
tball.setMode( OSG::Trackball::OSGObject );
}
tball.setStartPosition( v, true );
tball.setStartRotation( q, true );
}
break;
case '1':
{
OSG::HDR2Stage* pHDR = dynamic_cast<OSG::HDR2Stage*>(hdrroot->getCore());
if (pHDR) pHDR->setTarget(OSG::HDR2Stage::SCENE_TEXTURE);
}
break;
case '2':
{
OSG::HDR2Stage* pHDR = dynamic_cast<OSG::HDR2Stage*>(hdrroot->getCore());
//.........这里部分代码省略.........
示例8: main
//.........这里部分代码省略.........
osg::DirectionalLightPtr light = osg::DirectionalLight::create();
beginEditCP( light_node );
light_node->setCore( light );
endEditCP( light_node );
root->addChild( light_node );
beginEditCP(light);
light->setAmbient( .3, .3, .3, 1 );
light->setDiffuse( 1, 1, 1, 1 );
light->setDirection(0,0,1);
light->setBeacon( beacon );
endEditCP(light);
// transformation, parent of beacon
node = osg::Node::create();
cam_trans = osg::Transform::create();
beginEditCP(node);
node->setCore( cam_trans );
node->addChild( beacon );
endEditCP(node);
root->addChild( node );
// finish scene graph
endEditCP(root);
// Camera
osg::PerspectiveCameraPtr cam = osg::PerspectiveCamera::create();
cam->setBeacon( beacon );
cam->setFov( 50 );
cam->setNear( 0.1 );
cam->setFar( 10000 );
// Background
osg::SolidBackgroundPtr background = osg::SolidBackground::create();
// Viewport
osg::ViewportPtr vp = osg::Viewport::create();
vp->setCamera( cam );
vp->setBackground( background );
vp->setRoot( root );
vp->setSize( 0,0, 1,1 );
if ( with_window )
{
// GLUT init
glutInitWindowSize( 400, 400 ); // before glutInit so user can
glutInitWindowPosition( 100, 100 ); // override with comannd line args
glutInit(&argc, argv);
glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
int winid = glutCreateWindow("Polygon Intersection Check Test");
glutKeyboardFunc(key);
glutVisibilityFunc(vis);
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutIdleFunc(display);
glEnable( GL_DEPTH_TEST );
glEnable( GL_LIGHTING );
glEnable( GL_LIGHT0 );
// Window
osg::GLUTWindowPtr gwin;
GLint glvp[4];
glGetIntegerv( GL_VIEWPORT, glvp );
gwin = osg::GLUTWindow::create();
gwin->setId(winid);
gwin->setSize( glvp[2], glvp[3] );
win = gwin;
win->addPort( vp );
// Action
render_action = osg::DrawAction::create();
// trackball
Vec3f min(-1,-1,-1), max(1,1,1);
// root->updateVolume();
// const osg::BoxVolume &vol = dynamic_cast<const osg::BoxVolume &>(root->getVolume());
// // in the long term, the abstract volume will be able to provide min/max
// vol.getBounds( min, max );
trackball.setMode( osg::Trackball::OSGObject );
float d = max[2] + (max[2]-min[2])*1.5;
trackball.setStartPosition( 0, 0, d, true );
trackball.setSum( true );
trackball.setTranslationMode( osg::Trackball::OSGFree );
// run...
glutMainLoop();
}
else
{
// run in batch mode
int phase = 0;
do
testcase( &phase );
while ( phase > 0 );
}
return 0;
}
示例9: main
//.........这里部分代码省略.........
// Background
osg::SolidBackgroundPtr background = osg::SolidBackground::create();
if ( White_background )
{
beginEditCP( background );
background->setColor(osg::Color3f(1,1,1));
endEditCP( background );
}
// Viewport
osg::ViewportPtr vp = osg::Viewport::create();
vp->setCamera( cam );
vp->setBackground( background );
vp->setRoot( root );
vp->setSize( 0,0, 1,1 );
if ( With_window )
{
// GLUT init
glutInitWindowSize( 400, 400 ); // before glutInit so user can
glutInitWindowPosition( 100, 100 ); // override with comannd line args
glutInit(&argc, argv);
glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
int winid = glutCreateWindow("Collision Benchmark");
glutKeyboardFunc(key);
glutVisibilityFunc(vis);
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutIdleFunc(display);
glEnable( GL_DEPTH_TEST );
glEnable( GL_LIGHTING );
glEnable( GL_LIGHT0 );
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 1);
// Window
osg::GLUTWindowPtr gwin;
GLint glvp[4];
glGetIntegerv( GL_VIEWPORT, glvp );
gwin = osg::GLUTWindow::create();
gwin->setId(winid);
gwin->setSize( glvp[2], glvp[3] );
win = gwin;
win->addPort( vp );
// Action
render_action = osg::DrawAction::create();
// trackball
Vec3f min(-2.5,-2.5,-2.5), max(2.5,2.5,2.5);
trackball.setMode( osg::Trackball::OSGObject );
float d = max[2] + (max[2]-min[2]);
trackball.setStartPosition( 0, 0, d, true );
trackball.setSum( true );
trackball.setTranslationMode( osg::Trackball::OSGFree );
}
// create moving objects
if ( geom_type != OBJ_FILE )
createGeom( geom_type, Complexity, &fixed_node, &fixed_geom );
// else: has been loaded from file
light_node->addChild( fixed_node );
if ( geom_type != OBJ_FILE )
createGeom( geom_type, Complexity, &moving_node, &moving_geom );
//#define DOPTREE_NUM_ORI 16
double pi = 3.141592653589793f;
vector<Vec3f> translates;
vector<Vec3f> rotation_xyzs;
vector<float> rotates;
//string config("");
if(configFile.length() == 0)
{
printf("config file is null, use -r configFileName\n");
return 0;
}
ifstream fin(configFile.data());
string line;
int i = 0;
int angle;
float x,y,z;
while(std::getline(fin, line))
{
stringstream ss;
ss << line;
if(i & 0x1) // tranls
{
ss >> x >> y >> z;
translates.push_back(Vec3f(x,y,z));
}else //angle rot
{
示例10: init
//.........这里部分代码省略.........
deco=OSG::ShearedStereoCameraDecorator::create();
deco->setLeftEye(false);
deco->setEyeSeparation(eyedistance);
deco->setDecoratee(cam);
deco->setZeroParallaxDistance(zeroparallax);
vp2 = OSG::Viewport::create();
vp2->setCamera ( deco );
vp2->setBackground( bkgnd );
vp2->setRoot ( root );
vp2->setSize ( .5,0,1,1 );
}
else if(stereoMode == 2)
{
OSG::ShearedStereoCameraDecoratorUnrecPtr deco;
// left
deco=OSG::ShearedStereoCameraDecorator::create();
deco->setLeftEye(true);
deco->setEyeSeparation(eyedistance);
deco->setDecoratee(cam);
deco->setZeroParallaxDistance(zeroparallax);
OSG::ColorBufferViewportUnrecPtr cvp1 =
OSG::ColorBufferViewport::create();
cvp1->setCamera ( deco );
cvp1->setBackground( bkgnd );
cvp1->setRoot ( root );
cvp1->setSize ( 0,0, 1,1 );
cvp1->setRed(GL_FALSE);
cvp1->setGreen(GL_TRUE);
cvp1->setBlue(GL_TRUE);
cvp1->setAlpha(GL_TRUE);
vp1 = cvp1;
// right
deco=OSG::ShearedStereoCameraDecorator::create();
deco->setLeftEye(false);
deco->setEyeSeparation(eyedistance);
deco->setDecoratee(cam);
deco->setZeroParallaxDistance(zeroparallax);
OSG::ColorBufferViewportUnrecPtr cvp2 =
OSG::ColorBufferViewport::create();
cvp2->setCamera ( deco );
cvp2->setBackground( bkgnd );
cvp2->setRoot ( root );
cvp2->setSize ( 0,0,1,1 );
cvp2->setRed(GL_TRUE);
cvp2->setGreen(GL_FALSE);
cvp2->setBlue(GL_FALSE);
cvp2->setAlpha(GL_FALSE);
vp2 = cvp2;
}
GLint glvp[4];
glGetIntegerv( GL_VIEWPORT, glvp );
if(serverx>0 && servery>0)
clusterWindow->setSize( serverx, servery );
else
clusterWindow->setSize( glvp[2], glvp[3] );
clusterWindow->addPort( vp1 );
if(multiport || stereoMode > 0)
clusterWindow->addPort( vp2 );
if(serviceInterfaceValid == true)
{
clusterWindow->setServiceInterface(serviceInterface);
fprintf(stderr, "tcclient use if %s\n", serviceInterface.c_str());
}
if(serviceAddressValid == true)
{
clusterWindow->setServiceAddress(serviceAddress);
fprintf(stderr, "tcclient use ba %s\n", serviceAddress.c_str());
}
// tball
OSG::Vec3f pos(min[0] + ((max[0] - min[0]) * 0.5),
min[1] + ((max[1] - min[1]) * 0.5),
max[2] + ( max[2] - min[2] ) * 1.5 );
float scale = (max[2] - min[2] + max[1] - min[1] + max[0] - min[0]) / 6;
tball.setMode( OSG::Trackball::OSGObject );
tball.setStartPosition( pos, true );
tball.setSum( true );
tball.setTranslationMode( OSG::Trackball::OSGFree );
tball.setTranslationScale(scale);
tball.setRotationCenter(center);
tball.setTranslationGen(OSG::Trackball::OSGAbsoluteTranslation);
// run...
std::cout << size.length() << std::endl;
cam->setFar (size.length() * 100.0);
cam->setNear(size.length() * 100.0 / 100000.0);
}
示例11: doMain
//.........这里部分代码省略.........
cam->setFar( 100000 );
// Background
OSG::SolidBackgroundUnrecPtr bkgnd = OSG::SolidBackground::create();
bkgnd->setColor(OSG::Color3f(0,0,1));
// Viewport
vp = OSG::Viewport::create();
vp->setCamera( cam );
vp->setBackground( bkgnd );
vp->setRoot( root );
vp->setSize( 0,0, 1,1 );
// Action
ract = OSG::RenderAction::create();
// tball
OSG::Vec3f pos;
pos.setValues(min[0] + ((max[0] - min[0]) * 0.5),
min[1] + ((max[1] - min[1]) * 0.5),
max[2] + ( max[2] - min[2] ) * 1.5 );
float scale = (max[2] - min[2] + max[1] - min[1] + max[0] - min[0]) / 6;
OSG::Pnt3f tCenter(min[0] + (max[0] - min[0]) / 2,
min[1] + (max[1] - min[1]) / 2,
min[2] + (max[2] - min[2]) / 2);
tball.setMode( OSG::Trackball::OSGObject );
tball.setStartPosition( pos, true );
tball.setSum( true );
tball.setTranslationMode( OSG::Trackball::OSGFree );
tball.setTranslationScale(scale);
tball.setRotationCenter(tCenter);
// Carbon init
// Create window
WindowAttributes windowAttrs =
kWindowStandardDocumentAttributes |
kWindowLiveResizeAttribute |
kWindowStandardHandlerAttribute;
Rect contentRect;
SetRect(&contentRect, 0, 0, 300, 300);
WindowRef window;
CreateNewWindow(kDocumentWindowClass, windowAttrs, &contentRect, &window);
SetWindowTitleWithCFString(window, CFSTR("testWindowCarbon"));
// Install event handler
EventHandlerUPP eventHandlerUPP = NewEventHandlerUPP(eventHandler);
EventTypeSpec eventList[] =
{
{ kEventClassTextInput, kEventTextInputUnicodeForKeyEvent },
{ kEventClassMouse, kEventMouseDown },
{ kEventClassMouse, kEventMouseUp },
{ kEventClassMouse, kEventMouseDragged },
{ kEventClassWindow, kEventWindowClose },
{ kEventClassWindow, kEventWindowDrawContent },
{ kEventClassWindow, kEventWindowBoundsChanged }
};
InstallWindowEventHandler(window, eventHandlerUPP, GetEventTypeCount(eventList), eventList, /*this*/0, 0);