Hello Keyan,
On 08/15/2012 04:33 AM, Keyan wrote:
thanks for the tip. Unfortunately it is still not working. The only difference
that I see, is that I do not use the OSG::GLUTWindow::create() but
OSG::PassiveWindow::create(). Could that be the problem?
ok, PassiveWindow should not make a difference [1]. I think at this
point your best bet is to run under a debugger and put a breakpoint in
SimpleTextForeground::draw() and see if it gets called at all or if it
exists early before drawing anything.
Cheers,
Carsten
[1] I'm attaching a version that uses PassiveWindow. I had to make one
additional change (call pwin->resize(300, 300)) in the beginning to pass
the initial window size in. Glut apparently only calls the reshape
function after rendering the first frame which for me caused an OpenGL
error, because glOrtho was called with invalid arguments (left == right,
top == bottom).
// OpenSG Tutorial Example: Loading
//
// This example shows how to load a scene file using OpenSG.
// The supported formats right now are VRML97, OBJ, OFF and RAW, so just
// calling this program with a scene file as a parameter should load the scene
// file.
//
// Headers
#include "OSGGLUT.h"
#include "OSGConfig.h"
#include "OSGSimpleGeometry.h"
#include "OSGPassiveWindow.h"
#include "OSGSimpleSceneManager.h"
#include "OSGAction.h"
// New Headers
#include "OSGSimpleTextForeground.h"
// the general scene file loading handler
#include "OSGSceneFileHandler.h"
#include "OSGFieldContainerUtils.h"
// The SimpleSceneManager to manage simple applications
OSG::SimpleSceneManagerRefPtr mgr;
// forward declaration so we can have the interesting stuff upfront
int setupGLUT( int *argc, char *argv[] );
// Initialize GLUT & OpenSG and set up the scene
int main(int argc, char **argv)
{
// OSG init
OSG::osgInit(argc,argv);
// GLUT init
int winid = setupGLUT(&argc, argv);
{
// the connection between GLUT and OpenSG
OSG::PassiveWindowUnrecPtr pwin= OSG::PassiveWindow::create();
// pwin->setGlutId(winid);
pwin->init();
pwin->resize(300, 300);
OSG::SimpleTextForegroundUnrecPtr stf = OSG::SimpleTextForeground::create();
stf->setColor(OSG::Color4f(0.5f, 0.5f, 0.5f, 1.f));
stf->setFamily("SANS");
stf->setHorizontalAlign(2);
stf->setVerticalAlign(0);
stf->addLine("Hello World");
// load the scene
OSG::NodeUnrecPtr scene;
if(argc < 2)
{
FWARNING(("No file given!\n"));
FWARNING(("Supported file formats:\n"));
OSG::SceneFileHandler::the()->print();
scene = OSG::makeTorus(.5, 2, 16, 16);
}
else
{
/*
All scene file loading is handled via the SceneFileHandler.
*/
scene = OSG::SceneFileHandler::the()->read(argv[1]);
}
//scene->dump();
OSG::commitChanges();
// create the SimpleSceneManager helper
mgr = OSG::SimpleSceneManager::create();
mgr->setUseTraversalAction(true);
// tell the manager what to manage
mgr->setWindow(pwin );
mgr->setRoot (scene);
mgr->addForeground(stf);
// show the whole scene
mgr->showAll();
// mgr->useOpenSGLogo();
}
// GLUT main loop
glutMainLoop();
return 0;
}
//
// GLUT callback functions
//
// redraw the window
void display(void)
{
mgr->idle();
mgr->redraw();
OSG::Thread::getCurrentChangeList()->clear();
glutSwapBuffers();
}
// react to size changes
void reshape(int w, int h)
{
mgr->resize(w, h);
glutPostRedisplay();
}
// react to mouse button presses
void mouse(int button, int state, int x, int y)
{
if (state)
mgr->mouseButtonRelease(button, x, y);
else
mgr->mouseButtonPress(button, x, y);
glutPostRedisplay();
}
// react to mouse motions with pressed buttons
void motion(int x, int y)
{
mgr->mouseMove(x, y);
glutPostRedisplay();
}
// react to keys
void keyboard(unsigned char k, int , int )
{
switch(k)
{
case 27:
mgr = NULL;
OSG::osgExit();
exit(0);
break;
case 'f':
mgr->setNavigationMode(OSG::Navigator::FLY);
break;
case 't':
mgr->setNavigationMode(OSG::Navigator::TRACKBALL);
break;
case 'q':
mgr->setStatistics(true);
break;
case 'w':
mgr->setStatistics(false);
break;
case 'h':
mgr->setHeadlight(!mgr->getHeadlightState());
break;
case 'r':
{
bool useTrav = !mgr->getUseTraversalAction();
mgr->setUseTraversalAction(useTrav);
printf("Using %s action.\n", useTrav ? "render traversal" : "render");
}
break;
case 'p':
{
std::cout << "Scanning memory consumption." << std::endl;
OSG::MemoryConsumption mc;
mc.scan();
mc.print(std::cout);
}
break;
}
}
// setup the GLUT library which handles the windows for us
int setupGLUT(int *argc, char *argv[])
{
glutInit(argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
int winid = glutCreateWindow("OpenSG");
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutIdleFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutKeyboardFunc(keyboard);
return winid;
}
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users