Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

ibi

Frischling

  • »ibi« ist der Autor dieses Themas
  • Private Nachricht senden

1

28.10.2006, 15:50

SceneManagement

Mahlzeit,

gleich vorweg:
a) Nein, ich plane nicht doom4 oder UT-2010 :)
b) Ja ich hab schon Programmiert

Ich bräucht ne "kleine" :D erkärung zum SceneManager in der Irrlicht Engine
oder allgemein zum SceneManagement

Ich weiß, wer lesen kann ist im vorteil, aber ich seh eigentlich nur noch Bahnhof im quelltext, von der OSG Library ganz zu schweigen (also nicht wegen der Interfaces). Und bei Google wird man meistens auch nur über das Frontend informiert und nicht so richtig über das was hintenherum passiert.

Mir ist klar das es ein Baum ist, an dessen Rootnode man z.B 5 Childnodes anhängen kann (im gegensatz zu Binären-Bäumen, ein ParentNode und max. zwei ChildNodes), und man Nodes auch gruppieren und diese dann transformieren, rotieren, skalieren kann und das der Baum eigentlich nur zur bestimmung von abhängigkeiten der einzelnen Objekte in der Szene bestimmt ist(hoffentlich hab ich das richtig verstanden :) ).

Aber wie bring ich das ganze dann auf den Bildschirm aller (scenemanger->drawAll();).

Ein Link oder einfacher Codeauschnitt oder Tut (oder mehrere) wären viell. hilfreich. Hab leider nix gefunden bis jetzt und such schon seit fast vier Wochen :shock:

z.B

Lemming

Alter Hase

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

2

28.10.2006, 16:09

HÄ?????
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

3

28.10.2006, 16:11

vielleicht unvollständiger Beitrag? Bitte den Rest auch noch dazu schreiben!!! ;)

ibi

Frischling

  • »ibi« ist der Autor dieses Themas
  • Private Nachricht senden

4

28.10.2006, 16:47

So, jetzt ganz fertich :D

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

5

29.10.2006, 11:26

Naja, die Drawfunktion muss den Baum traversieren, dabei die Matrizen (im weitesten Sinne) "aufakkumulieren" und dann immer wenn es einen Blattknoten fndet, diesen mit der "aufakkumulierten Matrix" rendern.

Falls Dir das immer noch zu schwer ist, könntest Du Dir mal die PLIB
plib.sf.net ansehen. Deren Hauptnachteil ist dass sie keine weiterführenden (Render) Funktionen hat, aber das wäre bei Dir ja ein Vorteil, weil es dadurch leichter zu durchschauen ist; der eigentliche Scene graph Code ist relativ klein und ist auch sauber und vom Altmeister Steve Baker geschrieben.
"Games are algorithmic entertainment."

Stefan

Alter Hase

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

6

29.10.2006, 14:44

Ja, also ein guter SceneGraph bringt bestimmt sehr viel, jedoch ist es glaub ziemlich viel Arbeit!
Den SceneGraph kannst du aber natürlich nicht nur zum Rendern verwenden, sondern auch für deine Physik. Zb hast du einen Tisch und auf dem steht eine Tasse. Im Scene Graph wurde das dann ungefähr so aussehen:
Welt->Tisch->Tasse->Löffel
Welt->Auto->Spieler
...


Verschiebst du den Tisch, brauchst du dann nur die Matrix für den verschobenen Tisch setzen und die Tasse, Löffel bewegt sich automatisch mit.

Aber am Anfang musst du dir mal überlegen wie du deine Resourcen abspeicherst, dabei kannst du das ganze gleich Plattformunabhängig gestalten für OpenGL und DirectX. Also wie du Vertices, Indices, Texturen, Lichter usw. verwaltest.
Anschließend würd ich dann erst mit der eigentlichen Baum programmierung beginnen und dabei Schnittstellen offen halten für Plugins. Falls du mal zB ein Terrain entwicklen möchtest, wäre das als eigenes Plugin ganz gut.
Und dann einen eigenen RenderTraverser programmieren, der Texturen, selbe Objekte, transparente Objekte usw sortiert und culling gleich durchführt.
Sind die Berechnungen alle durchgeführt kannst du mit dem eigentlichen rendern beginnen!


cya,
Stefan

7

29.10.2006, 15:37

Ein guter Scenegraph dient ihn erster Linie nur zur Verwaltung von Objekten. Es werden Hierarchien aufgestellt, die in vor allem die natürlichen Verhältnisse wiederspiegeln, das heißt, ein Apfel liegt auf einem Teller, welcher sich auf einem Tisch befindet.

Diese Hierarchie ist für die meisten Vorgänge, außer dem Transformieren aber total ungeeignet.

Idealerweise ist es also so, dass es für jeden Fall einen extra Baum gibt, zum Beispiel ein Octree, der die Szene in Gebiete unterteilt, perfekt geeignet zum Cullen und für Kollisionstest, ein Rendergraph, in welchem die Objekte nach Materialien oder Transparenz sortiert sind.

In der Realität ist sowas kaum zu verwirklichen und man verwendet den Scenegraph auch oft zum Cullen oder zum Collisionstest. Dazu verwendet man die eh schon programmierten Node-Klassen, zum Einbau von Quadtrees (Terrain), Octrees (Indoor-Level) oder ähnliche Konstrukte, die dann direkt dem Terrain hinzugefügt werden.

Ein Node im Scenegraph sollte immer nur die Referenz auf das Interface einer Ressource haben, so dass man bei Plattformunabhängigen Engines den Scenegraph universell verwenden kann.

Zum Rendern könnte z.B. ein DXRenderTraverser den Scenegraph durchlaufen, alle Objekte Sortieren und anschließend Rendern. Es gibt hier aber mehrere Konzepte. Zwei gute Tutorials finden sich hier:

(1) http://www.sir-kimmi.de/tuts/graphics/whats_a_scenegraph.txt
(2) http://www.sir-kimmi.de/tuts/graphics/re…_scenegraph.txt

Werbeanzeige