Hallo zusammen - ich hoffe, ihr koennt mir weiterhelfen:
ich programmiere in Open Inventor eine ganz einfache Sache: in einem Fenster muss eine Kugel zu bestimmten Zeitpunkten die Position aendern und das Fenster muss neu gezeichnet werden. Und genau das ist das Problem: eigentlich wird alles richtig gemacht, nur wird die aktuelle Position nicht neu gezeichnet, denn wenn ich mit der Maus ueber das Fenster fahre, erst dann wird neugezeichnet und die Veraenderung der Position ist zu sehen !
Ich hatte mal was aehnliches mit OpenGl programmiert, da habe ich LoadIdentity, PopMatrix, glFlush, swapbuffer usw.. verwendet..dann ging es, aber bei Open Inventor habe ich noch immer keine Loesung gefunden:
hier der Code
in der Main:
Widget myWindow = SoXt::init("Test");
if (myWindow == NULL) exit(1);
SoXtExaminerViewer *myViewer = new SoXtExaminerViewer(myWindow);
myViewer->setTitle("Test");
SbColor backgroundColor(0,0,0);
myViewer->setBackgroundColor(backgroundColor);
SoGroup *root = new SoGroup();
root->ref();
// Erzeugen der Sphere
SoSeparator *pSphereSep = new SoSeparator();
pSphereSep->setName("Sphere");
pSphereSep->ref();
SoSphere *pSphere = new SoSphere();
SoTransform *pSphereTransform = new SoTransform;
pSphere->radius =0.5;
pSphereSep->addChild(pSphereTransform);
pSphereSep->addChild(pSphere);
root->addChild(pSphereSep);
myViewer->setSceneGraph(root);
myViewer->show();
SoXt::show(myWindow); // Display main window
SoXt::mainLoop(); // Main Inventor event loop
In einem anderen Thread, der vor der SoXt:mainLoop gestartet wird, werden die Positionen definiert:
udStruct->pSphereTransform->translation.setValue(-9,0,1);
sleep(1);
udStruct->pSphereTransform->translation.setValue(-5,2,1);
usw....
Hatte versucht, mit
soXtExaminerViewer->render() das Fenster zu aktualisieren, aber fuehrte nur zum Absturz der Anwendung.
Also Thread funktioniert einwandfrei, prinzipiell muesste alles funktionieren, wenn ich jetzt nur noch den Befehl zum Neuzeichnen des Fensters wuesste. Aber ich finde da nichts... Redraw, Refresh, Repaint Render ???
Vielleicht hat mir jemand einen Tip.
Vielen Dank.
Simon