Brainstorming: DirectX9 Engine
-
Hi,
ich möchte in diesem Thrad ein paar Ideen und Vorschläge zur Objektverwaltung in einer DirectX9 basierende 3D Engine sammeln. Ziel ist es Probleme vorherzusehen und einen (fast) optimalen Weg zu finden wie ich 3D Objekte am besten in einer 3D Engine verwalten kann.
Was soll die Engine können.
Die Engine basiert auf DirectX9. Die Engine soll DirectX Funktionen kapseln und die Verwendung vereinfachen. Einfache C Kenntnisse sollen ausreichen um mit der Engine arbeiten zu können.
Wie stelle ich mir die Arbeit mit der Engine vor.
// 3D Mesh und Textur laden Entity mesh=LoadMesh(filename_mesh); Textur tex =LoadTextur(filename_tex); // Textur zuweisen SetTextur(mesh,tex); while(HAUPTSCHLEIFE) { ... // Alle Objekte rendern Render(); }
Das Entity könnte eine Struktur sein. Diese Struktur müsste einen Zeiger auf den Vertexbuffer speichern die Position, Größe, Zustand (sichtbar,nicht sichtbar) ect...
Eine Kollisionsabfrage könnte z.B so aussehen.
if (collision(Entity1, Entity2)) {...
Zur Objektverwaltung möchte ich das <vector> aus der STL verwenden.
Der Aufruf der Funktion LoadMesh() müsste einen neuen Eintrag in eine Liste machen, in der die Objekte verwaltet werden. Am Ende ( Render() ) müsste man diese Liste durchlaufen und alle Objekte rendern die im Sichtbereich sind und sichtbar sind. Wie könnte man das mit den Texturen am besten Lösen. Vor allem mit den Renderstates, sprich Alpha und evt. für spätere Erweiterungen wie z.B. Vertex- und Pixelshader.
Bitte um ein paar Ideen, mögliche Fehlerquellen, andere Wege. Alles was euch dazu einfällt.
-
Ich glaube, um die Frage zu beantworten, wie man sowas am besten macht, muss man es schonmal gemacht haben
Weil es gibt so viele Sachen, die einem erst beim Implementieren einfallen.
Deine Vorstellung sieht ganz hübsch aus, aber was kann es denn alles? Reicht das auch, um zB sowas wie einen Egoshooterlevel zu machen?
Die erste Frage ist wohl: Was für ein Spiel/Spiele willst Du damit machen? Bei einem Flugsimulator fängt man anderst an als bei einem Pacman Clone oder einem Egoshooter.
-
0x00000001 schrieb:
Weil es gibt so viele Sachen, die einem erst beim Implementieren einfallen.
Deshal dieser Thread
0x00000001 schrieb:
Die erste Frage ist wohl: Was für ein Spiel/Spiele willst Du damit machen?
Ich mache keine Spiele
Ich mache "nur" die Technologie dafür.
0x00000001 schrieb:
Bei einem Flugsimulator fängt man anderst an als bei einem Pacman Clone oder einem Egoshooter.
Es wird praktisch eine Bibliothek mit eingebauter Engine. Damit zwinge ich den Entwickler nicht für ein bestimmtes Genre zu entwickeln. Man müsste z.B. eine Portalengine selber entwickeln. Oder eine Terrainengine. Die Bibliothek hilft nur beim Rendern und Verwalten der 3D Objekte.
-
H.L.T.O schrieb:
Die Engine basiert auf DirectX9. Die Engine soll DirectX Funktionen kapseln und die Verwendung vereinfachen. Einfache C Kenntnisse sollen ausreichen um mit der Engine arbeiten zu können.
Das wäre dann aber nur ein Wrapper.
Bye, TGGC (Der Held ist zurück)
-
H.L.T.O schrieb:
Es wird praktisch eine Bibliothek mit eingebauter Engine. Damit zwinge ich den Entwickler nicht für ein bestimmtes Genre zu entwickeln. Man müsste z.B. eine Portalengine selber entwickeln. Oder eine Terrainengine. Die Bibliothek hilft nur beim Rendern und Verwalten der 3D Objekte.
-
das kann directX schon, wozu willst du das nochmal implementieren? lad einfach die *.x dateien und für texturen gibt es ja auch schon was.
rapso->greets();
-
Eben, es wird keine Funktionalität hinzugefügt, nur andere "eingepackt".
Bye, TGGC (Der Held ist zurück)