Beziehung Renderer <-> SceneManager + Physik gehört wohin?
-
Mein Renderer kann nur Objekte vom Typ "Renderable" rendern. Alle Objekte die gerendert werden wollen werden von Renderable abgeleitet. Jedes Renderable-Objekt hat eine eigene Render()-Funktion und wickelt die Arbeit alleine ab - natürlich wenig performant einfach für jedes Objekt Render() aufzurufen. Also einen SceneManager her.
Mein SceneManager ist ebenfalls ein Renderable - gleichzeitig aber auch Container für Renderables. Man kann ihm Renderable-Objekte hinzufügen und bekommt nun eine ID dafür (falls Daten geändert werden müssen). Der SceneManager sortiert jetzt die Objekte nach Skin (Textur+Material) in Vertex/Index-Buffer. Wenn er gerendert werden soll betreibt er zuerst mal Culling (bei mir ist das derzeit noch ein biliges - ObjektVorMir?:Rendern:NichtRendern) - Kameraposition hat der SceneManager auch.
Jetzt hab ich noch vor zwischen statischen Daten (zB einem Level) und dynamischen zu unterscheiden (zB einem Entity das sich die ganze Zeit dreht). Dann kann ich da das DX-Buffering optimaler nützen. Für den SceneManager heißt das einfach -> für statische gibts keine ID, fertig :).
Damit ich schneller zu Erfolgen komme, werde ich ein Renderable von ID3DXMesh ableiten und den Loader für *.x-Files verwenden. Dann kann ich meine Milkshape-Models schon laden.
Ist das halbwegs brauchbar für den Anfang? Mach ich irgendwo gröbere Fehler? rapso du hast ja auch eine Engine, wie machst du es - oder ist alles TopSecret?
Der User hats sehr einfach, der pumpt jetzt nur noch die Modelle in den SceneManger, verändert dynamische Objekte per ID und setzt die Kamera anders auf Wunsch, fertig.
=====
Jetzt kann ich ein Model und einen Level laden - aber wie, nein beser wo, füge ich Physik hinzu? Die ganzen Daten lagern im SceneManager. Ich hab mir gedacht, dass der User die Möglichkeit hat zwischen STATIC und PHYSIC beim adden zu wählen. STATIC ist von allem unbeeindruckt. Wenn PHYSIC nach vorne bewegt wird, fällt er bis er wieder auf einem anderen Objekt steht (Kollission). Aber was hat Physik im SceneManager zu tun?
Wie macht man das besser? Wohin mit der Physik?
MfG SideWinder
-
Wäre das nicht eher ein Statemanager, da er aus den benötigten States der Rennderables Batches erstellt, die dann zusammen gerendert werden?
Bye, TGGC Deine Unterstützung wird gebraucht!
-
Naja, Du mußt halt in Deinem Loop machen:
GetPlayerInput()
UpdatePlayerPositionAndNPCStuff()
LetThePhysicsEngineCalculateCollisionsEtc()
RenderScene()Wenn Du keinen Object/Entity-Manager hat, na, dann muß es halt in den SM rein.
Trotzdem mußt Du dann noch 'ne Physicable oder so haben,
die Objekte müssen ja dann noch z.B. ihre Masse, Mittelpunkt, Physik-BB etc. kennen...