Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki

Aktuelle Zeit: Di Jun 27, 2017 01:02

Foren-Übersicht » Sonstiges » Projekte
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Ultimate Conquest
BeitragVerfasst: Mi Nov 25, 2009 19:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ultimate Conquest wird ein Konquest-Klon für den Browser auf Basis von WebGL. Es gibt also feine Hardware-3D-Grafik im Browser ohne Verwendung irgendwelcher Plugins. Also nichts als pures JavaScript.

Spielprinzip
Das Original-Konquest ist ein Teil von KDE und ein runden-basiertes Strategiespiel bei dem es darum geht die Galaxie zu erobern. Jeder Planet hat zwei Faktoren: Produktion und Kampf. Der Produktionsfaktor gibt an wie viele Schiffe der Planet pro Runde produziert. Der Kampffaktor gibt an wie stark eine Flotte von Schiffen ist, wenn sie kämpft. Greift beispielsweise eine Flotte von Planet A einen feindlichen Planeten B an, dann sieht der Kampf so aus:
Code:
Ergebnis = [count(Angreifer) * A.kampf] - [count(Verteidiger) * B.kampf];

Ist das Ergebnis positiv, wird der Planet erobert. Der Wert von abs(Ergebnis) gibt die Anzahl der überlebenden Schiffe des Siegers an. Es gibt auch Varianten des Spiels mit einem komplizierteren Kampfsystem (Zufallskomponente, feindliche Wracks die recycelt werden, ...) , aber das Prinzip ist ähnlich. Es spielt also eine wesentliche Rolle von wo ein Angriff geflogen wird. Normalerweise sammelt man zunächst die Flotte im Orbit eines Planeten mit großem Kampffaktor um dann von dort anzugreifen. Üblicherweise haben Planeten mit großer Produktion natürlich einen schlechten Kampffaktor und sind somit schwer zu verteidigen. Die Reise von Planet zu Planet dauert je nach Entfernung zwischen einer und 20 Runden. Gegnerische Flotten im Hyperaum sind nicht sichtbar.

Möglicherweise werden ich das ganze um verschiedene Schiffstypen (Bomber, Fregatten, Schlachtschiffe) und Gebäude (z.B. Schiffswerften, planetare Verteidigung, ...) erweitern. Auch wäre vielleicht die Einführung von Ressourcen ganz interessant. Beispielsweise könnten Antriebe und Waffen Wasserstoff für die Kernfusion benötigen. Wasserstoff findet man dann in Sternen oder Gasriesen. Die Qualität/Reinheit des Wasserstoffs bestimmt dann den Kampffaktor und vielleicht auch die Geschwindigkeit. Genauso braucht man vielleicht Metalle für den Schiffsbau. Metalle findet man natürlich nur auf Gesteinsplaneten. Das kann man beliebig weiter treiben...Transportschiffe für die Ressourcen, Bergbaugebäude.... Erstmal muss aber das Basisspiel implementiert werden. ;)

Umsetzung
Die Idee von 'Ultimate Konquest' ist des nun dieses Spielprinzip als Browsergame unter Verwendung von WebGL umzusetzen. Die Planeten werden natürlich 3D und die Steuerung wird ähnlich wie in Homeworld. Man kann also die Kamera frei rotieren/zoomen/verschieben (siehe Demo). Ich bin mir noch nicht sicher ob sich die Planeten bewegen werden. Wäre zwar sicher (grafisch) nett, aber es würde das Spiel extrem komplex machen, wenn sich die Entfernungen der Planeten ständig verändern.

Da JavaScript natürlich keine Option für dein derart komplexes Projekt ist, setze ich auf GoogleWebToolkit. Dabei handelt es sich um einen Compiler der Java-Quellcode in JavaScript umsetzen kann. Der Vorteil ist klar: Es gibt nun vernünftige Klassen mit Vererbung und natürlich eine Typprüfung sowie Codeoptimierung vom Compiler. Außerdem kann ein Teil des Codes für die Serverimplementierung wiederverwendet werden, sofern es sich dort ebenfalls um Java handelt.

Das Projekt besteht aus zwei Teilen: Dem wiederverwendbaren WebGL-Toolkit-Modul (WGT) und dem Spiel selbst.

Features von WGT
WGT enthält den WebGL-Wrapper für GWT, einen RessourcenManager, eine Mathebibliothek und allerlei weitere nützliche Dinge. Umfang aktuell ca. 4000 Zeilen.
  • Ressourcenmanager
    • lädt Shader, Meshes und Szenendaten aus einer oder mehreren Bibliotheken im JSON-Format.
    • lädt Texturen aus beliebigen Bilddateien (alles was der Browser in ein Image-Objekt laden kann...)
    • "höhere" Ressourcen bringen Shader, Meshes und Texturen zusammen. Beispielsweise gibt es schon eine Sky-Klasse welche die Skysphere in der Demo realisiert.
    • kümmert sich um Abhängigkeiten
      (HTTP-Requests sind immer asynchron und langsam, was die Sache etwas kompliziert macht, wenn das Laden halbwegs schnell gehen soll ;) )
    • teilt der Anwendung mit wann sie einen Ladebalken zu zeigen hat.
  • Inputmanager
    • kümmert sich um die Abfrage von Mauscursor, Mauswheel, Mausbuttons und Tastatur
    • Daten können bequem in der Hauptschleife abgefragt werden, kein hantieren mit Eventhandlern
  • Mathebibliothek
    • Klassen für Matrizen (2x2, 3x3, 4x4) und Vektoren (2i, 2d, 3i, 3d, 4i, 4d) inklusive der wichtigsten Operationen
    • ein Matrixstack
  • WebGL Wrapper
    • kümmert sich um den WebGL-Context und stellt alle Methoden und Konstanten zur Verfügung.
    • diverse Overlayklassen (z.B. TextureObject, BufferObject, ...) sorgen für Typsicherheit
  • Szenenmanager
    • Es gibt nur ein Interface für den Szenenmanager. Allerdings werden das mehrfache rendern der selben Kameraperspektive ohne neue Frustum-Detection und auch mehrere Kameras unterstützt.

Features des Spiels
Bisher ist noch nicht viel implementiert, nur eine kleine Techdemo mit rotierenden Planeten. Der Orbit der Planeten lässt sich über die Keplerschen Orbital-Elemente spezifizieren. Damit sind realistische elliptische Orbits möglich. Allerdings hängt jedes Objekt immer nur von seinem direkten Vorgänger ab. Die Geschwindigkeit der Objekte wird durch eine dreifache Newtoniteration approximiert, was ausreichend genau erscheint.
Damit es nicht ganz so langweilig aussieht habe ich einen Glow-Effekt implementiert. Da Firefox im Augenblick einen Bug in der FBO-Implementierung hat, basiert der Effekt auf wildem kopieren mit glCopyTexSubImage2D. Der Effekt lässt sich in den Optionen abschalten, insbesondere Nutzer des Softwarerenderers dürfte das freuen.
Zur besseren Orientierung werden einige Hilfslinien eingezeichnet. Wenn man mit der Maus über einem Planeten bleibt wird die Position der nächsten 10 Runden dargestellt, sowie eine Verbindung zum Vorgänger gezeichnet. Hier gibt es zwei verschiedene Modi, der Unterschied zeigt sich beispielsweise beim Mond der Erde.
Bei den Tool-Fenstern handelt es sich nicht um ein OpenGL-Rendering sondern einfache HTML-Elemente. Das ganze basiert auf der GWT-Klasse DialogBox. Die Transparenz der Fenster ist ein CSS3-Effekt.

Demo
Screenshots:
Bild Bild Bild Bild
(klicken zum vergrößern)

Video:

Live-Demo:
Benötigt aktuellen Nightly-Build von Firefox oder Dev-Channel-Version von Goolge Chrome mit aktiviertem WebGL. Die Gesamtgröße beträgt 8.6 MB, davon sind 6.4 MB Texturen.


Steuerung:
  • Verschieben des Blickzentrums: W,S,A,D,Q,E oder Planet anklicken
  • Rotieren der Kamera: rechte Maustaste gedrückt halten und Maus bewegen.
    Wenn die Browser-Einstellungen die Deaktivierung des Kontextmenüs nicht zulassen kann alternativ auch Strg gedrückt werden.
  • Zoomen: Mauswheel
  • Fenster verschieben: Fenstertitel ziehen
  • ...weiteres siehe Hilfemenü

_________________
Yeah! :mrgreen:


Zuletzt geändert von Coolcat am Sa Mär 26, 2011 13:29, insgesamt 5-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ultimate Conquest
BeitragVerfasst: Fr Nov 27, 2009 17:22 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Habe (hoffentlich) einige Shaderprobleme mit ATI Grafikkarten behoben. Dazu wurde die library.json ausgetauscht.
Wenn du Probleme feststellst: Browser-Cache löschen und nochmal versuchen.

_________________
Yeah! :mrgreen:


Zuletzt geändert von Coolcat am Sa Mär 26, 2011 13:25, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ultimate Conquest
BeitragVerfasst: So Nov 29, 2009 12:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Die neue Version sollte nun auch mit Google Chrome funktionieren:
http://martin-weusten.de/files/uc/uc091 ... quest.html

Wäre schön wenn das mal jemand auf'm Mac mit Safari probieren könnte.

_________________
Yeah! :mrgreen:


Zuletzt geändert von Coolcat am Sa Mär 26, 2011 13:25, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ultimate Conquest
BeitragVerfasst: Mo Dez 14, 2009 23:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Eine neue Version: 091214
  • realistische elliptische Orbits durch Anwendung keplerscher Orbitalelemente.
  • es wird ein rundenbasiertes Spiel, daher bewegen sich die Planeten wenn man auf "End Round" drückt.
  • eine GUI durch Nutzung von GWT. Die Toolfenster kann man verschieben, wenn man den Titel zieht.
  • mehr Planeten
  • man kann jetzt Planeten fokusieren, einfach anklicken
  • insbesondere intern hat sich einiges getan. Beispielsweise gibt es jetzt eine Frustum-Detection, es wird also nur das gerendert was auch sichtbar ist.
  • neue Screenshots
  • habe sicher noch was vergessen ;)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ultimate Conquest
BeitragVerfasst: Di Dez 15, 2009 11:28 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Video:

Das Video wird im Augenblick noch von Youtube encodiert, die Qualität wird hoffentlich besser...

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ultimate Conquest
BeitragVerfasst: Sa Dez 26, 2009 17:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
WGT module 0.1-091226
WGT ist OpenSource-Teil von Ultimate Conquest, im wesentlichen die Library im Hintergrund. Der Quellcode einer Beispielanwendung, UML-Diagramme und JavaDoc-Doku liegen bei.


_________________
Yeah! :mrgreen:


Zuletzt geändert von Coolcat am Sa Mär 26, 2011 13:21, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ultimate Conquest
BeitragVerfasst: Sa Dez 26, 2009 17:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Neue Features in UC:
  • Upgrade auf GWT 2.0.0
  • Canvas2D-Wrapper zum Rendering von Text
  • Glow-Effekt hat eine eigene Klasse bekommen und ist nun Teil von WGT. Außerdem werden jetzt FBOs und ein besser Shader genutzt.
  • allgemeines Aufräumen und dokumentieren.

Das ganze war mir kein neues Release-Wert, da die neuen Features im WGT-Beispiel (siehe oben) gezeigt werden.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ultimate Conquest
BeitragVerfasst: Mo Jan 18, 2010 14:44 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Neues bezüglich WGT:

(Die Änderungen wurden noch nicht in die WGT-Demo übernommen, sind aber über das Repository verfügbar)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ultimate Conquest
BeitragVerfasst: Sa Jan 30, 2010 19:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Screenshots
Wie man sehen kann gibt es nun wunderschöne realistische (!) weiche Schatten. Derartige Schatten wären mit herkömmlichen Techniken nicht in dieser Qualität/Performance zu erreichen, den die Lichtquelle wird hier zumindest für das Schattenvolumen wirklich als Kugel und nicht nur als Punkt behandelt. Das ganze ist ein Shader-Effekt und wird in einem einzigen Pass gerendert. Dieser Ansatz funktioniert aber (natürlich) nicht im allgemeinen, sondern nur in diesem speziellen Fall da alle Objekte in der Szene Kugeln sind. Beschrieben wird der Ansatz in diesem Thread und demnächst auch in der Shadersammlung.
Bild Bild Bild
(klicken zum vergrößern)

_________________
Yeah! :mrgreen:


Zuletzt geändert von Coolcat am Sa Mär 26, 2011 13:24, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ultimate Conquest
BeitragVerfasst: So Jan 31, 2010 17:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Der Kegelvolumen-Schatten-Shader findet sich jetzt mit ausführlicher Erklärung in der Shadersammlung.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Ultimate Conquest
BeitragVerfasst: Sa Mär 26, 2011 13:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Alle Screenshots, Downloads und Demos sind auf den neuen Webspace umgezogen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Sonstiges » Projekte


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.017s | 17 Queries | GZIP : On ]