Implementierungsbeispiel für Szenengraphen
← Szenengraph Klassengraph | ● | Szenengraph Basisklasse →
Implementierungsbeispiel für die Konstruktion eines Szenengraphen mit einer Kamera (typischerweise in initializeOpenGL):
lgl_CameraNode *cam = new lgl_CameraNode();
cam->setPerspective(...);
cam_->setEye(...);
root->add(cam);
Dem Szenengraphen werden zusätzlich unterschiedlich transformierte Geometrien mit jeweiliger Transformationsmatrix M und Farbe c hinzugefügt:
lgl_Node *geometry = new lgl_ContainerNode(vbo);
root->add(new lgl_TransformationNode(M1)->add(new lgl_ColorNode(c1))->add(geometry);
root->add(new lgl_TransformationNode(M2)->add(new lgl_ColorNode(c2))->add(geometry);
...
Für jeden Frame wird die so definierte Szene gerendet (typischerweise in renderOpenGL):
Und bei Programmende wird der Szenengraph und die darin gekapselten VBOs gelöscht (typischerweise im Destruktor des Fenster-Widgets):
Einfaches Beispiel zum Erzeugen einer Szeme mit zwei farbigen, beleuchteten Zahnrädern:

double fovy = 45;
double aspect = (double)width()/height();
double nearp = 0.1;
double farp = 1000;
lgl_CameraNode *cam = new lgl_CameraNode();
cam->setPerspective(fovy, aspect, nearp, farp);
cam->setEye(vec3(0,1.15,0.5), vec3(0,1,0), vec3(0,1,0));
root->add(cam);
lgl_Node *node = root_->add(new lgl_LightSourceNode(vec4f(0,0,0)))
->add(new lgl_RotationNode(90, vec3(0,0,1)));
lglGear *gear = new lglGear(1, 0.25, PI/71, 0, 1.5, 0.1);
gear->create(256, 0.1);
lgl_Node *geometry = new lgl_ContainerNode(gear);
node->add(new lgl_TranslationNode(vec3(0,0,0)))
->add(new lgl_RotationAnimationNode(2.5, vec3(0,0,1)))
->add(new lgl_ColorNode(vec3(0.75,0.75,1)))
->add(geometry);
node->add(new lgl_TranslationNode(vec3(2,0,0)))
->add(new lgl_RotationAnimationNode(-2.5, vec3(0,0,1)))
->add(new lgl_ColorNode(vec3(1,0.75,0.75)))
->add(geometry);
Live Demo: Szenengraph-Konstruktion (T#D01a)