Open Inventor -"Animation" Neuzeichnen des Fensters ??



  • 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 hat nichts geholfen

    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


Anmelden zum Antworten