Siehe OpenCity.info in englischSiehe OpenCity.info in französischSiehe OpenCity.info in italienischSiehe OpenCity.info in deutsch
OpenCity header image
NoPatent logoOpenSource logoOpenGL logoSourceForge.net logoValid CSS!Valid XHTML 1.0 Strict

Hinter der Szene

OpenCity 0.0.6 Entwicklung Plan

Verwenden Sie weniger Dreiecke, um die Wasser   (done)
Erhöhen alpha-Display                           (done)
Erhöhen Keulung Berechnung                      (done)
Entfernen Sie nicht verwendete Modell OCM       (done)
Entfernen Sie OCM-Code                          (done)
Add 1 Staatssprache Taste                       (done)
Fügen Sie neue Abfrage Symbole                  (done)
Verbesserte Abfrage Kreis                       (done)
Verbesserte Auswahl Berechnung                  (done)
Verbesserte Auswahl heiße Zone                  (done)
Add heightmap in den Release                    (done)
Fix-String-Format speichern                     (done)
Datei speichern Version prüfen                  (done)
Fix Fahrzeug-Display Fehler auf neu starten     (done)
Entfernen Sie std-Namespace von Header          (done)
Erhöhen OpenGL-Erweiterung Handhabung           (done)
Entfernen Sie DOS-Fenster zu starten            (done)
Vereinfachen Sie Video-Setup-Code               (done)
Add SDL beschleunigte visuelle                  (done)
Fix Vollbild-und GL-Version bestellen           (done)
Fix Vollbild-Auflösung Erkennung                (done)
Verbesserung der Textur-Klasse                  (done)
Referenz Zählung Textur-Cache                   (done)

Design Problem

Der aktuelle UML-Klassendiagramm ist hier . Alles in grün ist noch nicht implementiert. Alle gelb Klassen sind mehr oder weniger umgesetzt und die rosa Rechtecke sind die Schnittstellen. Für die komplette, zuletzt aktualisiert UML-Design, die Datei herunterzuladen UML.xmi aus dem Quell-Repository. Es ist aus mit Umbrello, ein Open-Source-UML-Design-Programm, das Sie herunterladen können hier . Ich möchte bemerken Sie das UML-Design ist nicht ständig genau, aber es kann die Codes "Verständnis. Hier ist die Zusammenarbeit Diagramm, wenn das Programm startet, und dieser ein ist, wenn die Stadt Klasse zeigt eine Schicht.

Die UML ist in erster Linie für Design Zwecke. Und Sie haben Recht, es sollte keine "const", "&" oder eine andere Sprache bestimmten Schlüssel-Wörter in sie. Der Grund dafür ist, am Anfang habe ich verwendet der "Built-in Code-Generator von Umbrello . Wenn ich einige dieser Sprache bestimmten Schlüssel-Worte, ich, um eine funktionale Codes direkt aus einer UML-Klassendiagramm. Außerdem bin ich sehr streng über die Verwendung der Taste "C"-Worte, das ist der Grund, warum ich beschlossen, sie in das UML-Klassendiagramm. Sie erinnern mich, wie ich sollte sie später in die Codes.

Normalerweise arbeite ich auf die Gestaltung der Klassen vor deren Umsetzung. Im Übrigen bin ich der Verwendung der Standard Template Library (STL) so weit wie möglich. In einigen Fällen jedoch, die STL ist zu langsam für OpenCity. Das ist der Grund, warum ich lieber die plain alten C-Stil-Array anstelle eines Vektors von Objekten. In naher Zukunft, jeder Klasse wird vollständig dokumentiert (er. .. Ich habe es nicht für alle von ihnen noch ;-)). Seit OpenCity ist ein 3D-Stadt-Simulator entwickelt, unter Linux, es läuft auf den meisten Linux-Distributionen. Allerdings, mein Programm ist codiert in den Weg, dem Marken es einfach (Ich hoffe, so) ist die Portierung auf andere Betriebssysteme. Derzeit OpenCity kann auf Win32 ohne Probleme.

Die folgenden STL-Klassen werden derzeit in die KN-Code:

std::vector std::map std::pair std::deque

3D-Ausgabe

Ich habe eine sehr begrenzte Erfahrungen mit OpenGL und ich lerne es auf der fliegen . Weitere Funktionen werden in der Zukunft, solange die Entwicklung der OpenCity fortschreitet, um zu beschleunigen und Rendering-Funktionen, um eine bessere Grafiken. Für die Zeit, die aktuelle Version benutzt sehr einfache OpenGL-Primitive wie z. B.:

GL_POLYGON GL_LINES GL_TRIANGLE_STRIP ...

Das gesamte Gelände wird als eine einzigartige GL_TRIANGLE_STRIP für Geschwindigkeits-Optimierung. Der Algorithmus, den ich verwendet ist schnell und schmutzig. Für weitere Informationen, können Sie mehr über die Kommentare in den Code-Quellen.

Die alte 0.0.3beta Version verwendet die Objekt-Methode für die Färbung Modell Kommissionierung. Diese Methode ist beschrieben in der "OpenGL Programming Guide" oder die "Red Book". Wenn der Player Klicks in das Fenster, es weist ein anderes RGB-Kombination für jedes Objekt in der Back-Puffer. Dann liest es die RGB-Werte der Pixel, die direkt unter dem Cursor die Position, um festzustellen, welches Objekt ist wieder durch den Spieler. Diese Methode ist sehr einfach umgesetzt werden und es kann sehr schnell. Darüber hinaus, so wie es mit der Tiefe Kontrolle, werden Sie sich gar nicht haben, um die Tiefe der Objekte, da nur der nächste Objekt kann wieder durch den Spieler. Die Grenzen dieser Methode sind die Anzahl der Bits pro Pixel zur Verfügung und das Doppel-Pufferung. OpenCity erfordert 32bpp und Double-Buffering, weil dieser Auswahl Methode.

In der neuen Version 0.0.3stable, OpenCity verwendet GL_SELECT-Modus für Objekt Kommissionierung. Das ist der Grund, warum die 32bpp oder 24bpp Video-Modi sind nicht mehr erforderlich.

Coding Stil

Manchmal können Sie sehen, "//TOKILL" in meinem Codes. Wie können Sie erraten, ihre Bedeutung leicht, es ist das Gegenteil von "// TODO" :-D Die Codes, die sich aus einer "tokill" Marke oft Arbeit perfekt. Allerdings sind sie nicht mehr in die aktuelle Version der OpenCity und wird "getötet" in der nahen Zukunft. Ich verließ sie dort eine Referenz zu liefern. Wie auch immer, sie wird nicht verlangsamt das Spiel, da sie alle kommentiert werden.

Jede Variable wird mit dem Präfix seiner Art, zum Beispiel: "uiCityWidth". Es ist eine Variable vom Typ "unsigned int". Mehr Details sind in der Design-Dokument: "OpenCity_Design.sxw" und der "CodingStyle.*"-Dateien. Sie können sie aus dem SVN-Repository.

Anderer Ort Simulatoren

Ich habe hast über das Internet, um herauszufinden, über die andere Stadt Simulatoren. Es gibt natürlich, die so berühmte SimCity 1-4 und Sim Societies. Unter Linux, gibt es eine Menge von SimCity auch gern haben. Allerdings, im Gegensatz von SimCity, sie sind frei, und oft aufgegeben Projekte ... außer drei: LinCity, PocketCity, und Simutrans. Wenn Sie fragen sich, was die anderen Projekte sind, hier ist die Liste: TheCity, TransitExecutive, FreeReign, LCitySim und SimBlob.

Ich möchte Drop paar Zeilen zu LinCity-NG, die eine aktualisierte Version des alten LinCity mit neuen Grafiken. Du kannst es auf LinCity-NG Berlios Projekte.

Alle diese Projekte sind groß und sie machen mir Traum von einem riesigen Ziel: Integration von ihrer besten Aspekte in OpenCity.

SDL OpenGL Ogre3D STL Boost xhtmlCopyright (C) von Duong Khang NGUYEN - Alle Rechte vorbehalten