Registriert: Sa Okt 22, 2005 20:24 Beiträge: 291 Wohnort: Frauenfeld/CH
Ich probiere demnächst mal einen Leveleditor zu bauen. Diese Levels sollten so grundsätzlich in einem Ego-Shooter Stil sein.
Nun ist die grosse Frage wie ich die Daten verarbeite, also die ganzen Texturen, Objekte usw.
Ich habe da schon von Octrees, BSP-Bäumen usw gehört, aber ich bin mir nicht sicher, was dass beste ist um das ganze darzustellen.
Mir ist ausserdem wichtig, dass das ganze nicht ein extremer Aufwand ist, also kein 2k Zeilen Code. Am besten wärs natürlich, wenn das ganze dann auch noch für die Bewegung der Figuren brauchbar wäre und für Line of sight abfragen, die ich für ne KI für ziemlich wichtig halte.
Mit 2K Zeilen Code und mehr wirst du denke ich schon rechnen müssen.
Wie du deine Daten speicherst bleibt dir selbst überlassen. Du musst dafür sorgen das du für alle Texturen die du auf die Polygone setzt eine eindeutige ID vergibst oder sie über ihren Texturenamen zuordnest. Was du nun für dein Map Format nimmst bleibt dir überlassen.
Du kannst das ganze auch via XML speichern, einige Forenmitglieder tun das bei ihren Editoren.
Mehr fällt mir gerade nicht ein ^^
Registriert: So Sep 26, 2004 05:57 Beiträge: 190 Wohnort: Linz
Also bei einem Leveleditor würd ich erst mal nur die Daten abspeichern die der Benutzer auch eingibt. Erst danach wenn das Level fertig ist wär es gut wenn noch diverse Möglichkeiten existieren um in die rohen Daten noch eine brauchbarere Struktur rein zu bekommen.
Beispielsweise zum erstellen eines .BSP-Files gibt es da konverter die dir die Arbeit abnehmen. Schau dir einfach mal irgend einen Quake-Editor an da ist das eh dabei.
Ganz nebenbei bemerkt noch: Line of Sight ist eine "einfache" Kollisionsabfrage eines Strahles mit der Welt, somit reicht dafür beispielsweise ein BSP Baum aus.
Und wie eh schon gesagt wurde ... mit 2K Codezeilen da geht sich grad mal ein etwas besseres "Hello World" Programmchen aus :-).
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich hatte 2 Versuche unternommen, um ein Leveleditor zu schreiben und beide male war es eher ein Zeit problem als ein umsetzungsproblem. Kollisionen, Optimierungen und so weiter sind alles dinge die Zeit kosten.
Ich habe mich selber für Blender und Pyhton Scripts entschieden, da Blender alles bietet was man zum entwickeln, von normalen Levels braucht.
Wenn du aber wirklich ein Eigenen Editor schreiben willst, dann sollte der schon einer guten Basis zu grunde liegen.
Es lohnt sich hierfür mal die Dokumentation von Blender an zu sehen um herraus zu bekommen, was denn so alles ein Meshobjekt braucht und worauf du selber verzichten kannst.
Du brauchst für das editieren von Model andere Werkzeuge als das editieren von z.B. Häusern oder Landschaften.
Ich rate dir den Modelpart aus zu lagern und einfach fertige modelfiles zu importieren.
Eventuell noch ein Tool schreiben, welches normale models noch aufwertet und in ein eigenes Format speichert.
Also z.B. md3 rein ins Tool und dann noch spezielle dinge(Materials,Bones,...) hinzufügen und in ein eigenes Format speicher.
Dein Entity Support sollte so Generisch wie möglich sein(Blender Bietet da eine gute Lösung, die solltest du dir mal ansehen(mit RTTI sehr leicht zu realisieren), sonnst ist da für feststehende Engines noch das System von HL WorldCraft).
Bau gute Bezier Tools ein, denn das sind dinge die laufen auch noch 2 Grafikgenerationen weiter mit besserer Qualität.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Ja Leveleditoren sind etwas schwer. Bsonders problematisch ist dsas man teilweise zwischen Physik und Grafik unterschieden muss. Ein durchaus guter ansatz wäre konstruktive geometrie mit anschließendem Texturieren der Oberflächen (So ist sicher gestellt das die Leveldaten wirklich auch für die spielephysik geeignet sind) Allerdings durfte ein solches Programm schon recht schwer zu schreiben sein. Wenn man es allerding machen würde, dann könnte man durchaus mit objektbiblioteken arbeiten. Diese Ansatz ist vileicht für zukünfige größe Projekte sinvoll. Bei kleineren projekten oder dorch woi es keine echte physik gibt kommt man duchaus mit weniger aus. hier würde ich aber versuchen einen vorhanden Editor zu benutzen. Damit kommen wieder Blender oder andere in frage...
Registriert: Sa Okt 22, 2005 20:24 Beiträge: 291 Wohnort: Frauenfeld/CH
also ist es unter umständen eine gescheite lösung, in 3ds max ein ganzes level zu erstellen, dass man dann das ganze abspeichert als 3ds und dann irgendwie in den Octree lädt?
wie wird eigentlich 3ds abgespeichert? wird das irgendwie in triangles gemacht, so dass ich dies gerade für den Octree nutzen könnte?
Wenn es irgendwie geht das ganze leicht in einen Octree zu bringen, wäre das natürlich eine sehr gescheite lösung und auch eine einfache.
Ich habe auch schon einen Prototypen eines Leveleditors gebastelt, aber irgendwie war das ganze dann doch unbefriedigend, weil es wirklich schwer ist viele Funktionen da reinzubringen. Ausserdem ist es den Aufwand wahrscheinlich ned Wert, wenn man mit Blender und ähnlichem modellieren kann.
Registriert: Sa Okt 22, 2005 20:24 Beiträge: 291 Wohnort: Frauenfeld/CH
weiss auch jemand wie man da am gescheitesten mit texturen umgeht? wenn man zb. mehrere hat? oder sollte man einfach schauen, dass man nur mit einer modelliert?
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Bastel dir einen Texturmanager, und speichere für jedes Element den Schlüssel (Keycode, ID, Name oder ähnliches) ab mit dem du per Texturmanager die Textur dann binden kannst.
Keinesfalls 1 Textur allein. Sieht entweder furchtbar aus, oder wird zugroß. Schon allein weil die maximale Texturgröße auch nicht beliebig sein kann. Bei > 2048x2048 siehts bei GraKas von vor ein paar Jahren nämlich schon mau aus.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Sa Okt 22, 2005 20:24 Beiträge: 291 Wohnort: Frauenfeld/CH
Naja, das Problem ist ja hauptsächlich, dass ich nicht bei jedem Dreieck in einem Node ein weiteres glBindTexture(...) aufrufen will und dann immer glBegin und glEnd haben will. Das Ziel wäre es, in einem Octree nur einmal eine Textur zu binden und den Rest dann z.B. pro Node einmal einen Texturwechsel oder noch weniger zu machen
Im Editor würde ich auf so etwas wie Octrees oder andere eher statische Strukturen verzichten, auch wenn er dann natürlich langsamer als die Engine läuft. Es ist generell schlecht Editor und Engine zu sehr aneinander zu binden, weil beide auf verschiedene Ziele hin optimiert sind. Im Editor benötigt man eine objektbasierte Sicht auf das Level, man muß damit arbeiten können. Beim endgültigen Rendern sind hierachische Datenstrukturen sinnvoll und man möchte das Level in einem Format haben, dass es möglichst einfach zu rendern ist. Wenn man beides voneinander trennt, hat man die Möglichkeit für jeden Zweck die optimale Datenstruktur zu verwenden.
Es kommt darauf an was für ein Editor das sein soll. Wenn man einzelne Dreiecke bearbeitet, werden vermutlich nicht so viele sein und man kann die dynamisch einsortieren. Fertige Modelle, die man in das Level setzt, kann man auch schon beim Laden in Blöcke mit gleicher Texture unterteilen, so dass man dann da auch nicht jedes Dreieck einzeln sortieren muss.
Falls man Objekte mit vielen Dreiecken bearbeitet, dann legt man sich am besten für jedes Objekt einen VertexBuffer an und kopiert jeweils nur die geänderten Punkte.
Solange es nicht extrem viele Objekte werden, reicht Frustum Culling aus und man kann durchaus auf die Hierachie verzichten.
Man sollte erstmal testen, an welcher Stelle wirklich nennenswert Geschwindigkeit verloren geht, bevor man ein zu umständliches Design nimmt. Optimieren und Ändern kann man hinterher immer noch, solange es am Anfang einfach und elegant genug war.
Registriert: Sa Okt 22, 2005 20:24 Beiträge: 291 Wohnort: Frauenfeld/CH
hmm ok ich hab mich mittlerweile entschieden einen Leveleditor wegzulassen und mit 3ds Max zu arbeiten.
Ich habe mich auch für Octrees entschieden, weil dann Dinge wie z.B. Collision Detection leichter werden.
Das heisst ich definiere die Fragestellung um:
Wie kann man einen Octree gescheit aufbauen, um eine 3ds Max Datei zu laden und zu rendern?
Unterfragen: 1. Wie mache ich das am besten mit den Texturen, sprich wie verhindere ich ein glBegin ... glEnd bei allen Triangles?
2. Werden Dateien in .3ds in Dreiecken abgespeichert, kann ich sie so verwenden für den Octree, oder muss ich zuerst Algorithmen wie z.B. Triangulation einsetzen?
Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.