|
BaseGraph Pascal (BGP) Zielsetzung die IDE(e) For English users: The BaseGraph Pascal
IDE supports English and German as language, the BaseGraph
forum is intended for English speakers as well, and probably parts
of this page will be translated to English somewhen, however, meanwhile
this information page is German only. Sorry for the inconvenience, to the English BGP introduction
Für Font Texturen, die in BaseGraph Pascal oder eigenen
Anwendungen verwendet werden können, dürfte sich der Textur
Font Generator als nützlich erweisen. Es wird ein Textur Font
Bitmap erstellt, sowie Positionsinformationen für sämtliche
Zeichen des Fonts (4 Floats = links, oben, rechts, unten). Der ASCII Code
eines Characters kann als LookUp in die Positionstabelle verwendet werden,
unabhängig davon, ob der Font nur einen eingeschränkten Zeichensatz
zur Verfügung stellt oder nicht. Eine etwas erweiterte binäre
Version wird in der nächsten Carad Version inkludiert sein - dies
dürfte allerdings noch etwas dauern, und dieser Download enthält
den kompletten Source..
|
||||||
| Zur Differenzierung von BaseGraph, Carad und
BaseGraph Pascal
BaseGraph soll keine "Engine" in dem Sinn sein, wie es allgemein verstanden wird, sondern vielmehr einen grundlegenden SzeneGraphen mit Culling und Kollision implementieren (BaseGraph = Basic SceneGraph), mit dem man es leichter hat, eine konkrete Engine zu implementieren. Im Projektbereich finden sich mehrere Demonstrationen, die zeigen, was mit BaseGraph möglich ist. BaseGraph bietet im Grundmodul (bg.xxx) eine ausgereifte, hierarchische Objekt- und Shaderverwaltung, im erweiterten Modul (bgo.xxx) daraus abgeleitete Objekte, die man immer wieder brauchen kann (etwa Vertex- und Skinanimationen), die für BaseGraph Programme aber gar nicht mehr essentiell sind (ganz ausgefallene Projekte, wie etwa die Lifesimulation auf Basis von MetaBalls (die allerdings so cool geworden sind, dass ich sie in bgo integrieren werde), können die bgo Bibliothek auch ganz verwerfen und dennoch Nutzen aus BaseGraph ziehen) Die BaseGraph Bibliotheken sind Freeware Carad Carad ist ein Content Creation Programm für BaseGraph, mit dem großen
Vorteil, dass jedes in Carad generierte Projekt vollständig als direkt
kompilierbarer Source vorliegt (in C++, C oder Delphi). Carad ist Shareware, darf für nicht-kommerzielle Produkte aber ohne Bezahlung von Lizenzgebühren verwendet werden
BGP erfüllt zweierlei Funktionen. Einerseits ist es eine eigene
Programmiersprache mit ausgereifter IDE, mit der entweder in Carad erstellte
Szenen anprogrammiert werden können, aber auch völlig eigenständige,
auf OpenGL und BaseGraph basierende Programme möglich sind. Die Idee, die dahintersteht, ist die, dass man ohne großen Aufwand herzeigbare kleine Spiele, und Programme schreiben kann (durchaus auch ernsthafte), ohne dass man dafür aber alleine für die Initialisierung mehrere hundert oder gar tausend Zeilen Code braucht - so ähnlich, wie früher die Programmierung von kleinen Sachen in GW-Basic oder Turbo Pascal. BaseGraph Pascal wird wiederum Freeware sein Wer Interesse hat, zur Entwicklung einer "neuen" Programmiersprache beizutragen, möge sich in das frisch eingerichtete BaseGraph Forum eintragen, das auch eine Diskussionsplattform für BGP zur Verfügung stellt. |
||||||
Die Entwicklung von BaseGraph Pascal
|
||||||
1.3.2004 Ich versuche Innerfuse Pascal als Sprache in Carad zu integrieren - die Anpassung dieses extrem nützlichen Paketes an OpenGL und BaseGraph war es dann auch, die meine Freizeit in den letzten Tagen ziemlich vollständig beansprucht hat, sodass ein Projekt, ein Octree Builder mit PVS Informationen (BaseLevel Baker) ein wenig auf Eis gelegt wurde, bei Gelegenheit aber in eine Oberfläche gepackt und veröffentlicht wird, da er an sich fertig gestellt ist.. Hier ist nun die erste Frucht dieser Bemühungen - die BGP IDE, eine
integrierte Entwicklungsumgebung einer Delphi kompatiblen Sprache (die
Programme können mit wenigen Änderungen tatsächlich in
Delphi kompiliert werden), die eigens auf OpenGL und BaseGraph ausgelegt
ist.
Die wichtigsten Unterschiede zu Delphi sind: Am Langwierigsten war die etwas öde Portierung von OpenGL in einen Wrapper, der mit Innerfuse Pascal Sprachelementen auskommen kann - interessant hingegen die Entwicklung einer IDE mittels SynEdit (mit Debugmöglichkeiten mittels Einzelschritt und Konsole) sowie der Verwaltung von kompletten Projekten mit beliebig vielen "Bibliotheken".
|
||||||
2.3.2004
Die Neuerung ist ein Funktionen/Klasseninspektor, der zumindest bis auf
Weiteres für die "Onlinehilfe" zuständig ist - dies
sollte es sehr vereinfachen BGP zu programmieren (zumindest ich finde
es ziemlich nützlich ), da sämtliche öffentlichen Funktionen,
Konstanten und Deklarationen mit wenigen Mausklicks erreichbar sind.
|
||||||
2.3.2004 Nach einem Tipp von Kok selbst, ist es mir gelungen, das in BGP zu integrieren,
was einer IDE in meinen Augen erst den letzten Schliff gibt: ein Watchfenster!
|
||||||
6.3.2004 Wie geplant, habe ich die ganze ODE (!) als Physikengine in BGP eingebaut... war relativ schwierig, da Delphi ODE ziemlich für GLScene ausgelegt ist, und ich keine Lust hatte jede Menge neue Namen für bereits vorhandene Datentypen zu inkludieren. Schlussendlich habe ich eine eigene Importbibliothek geschrieben, und
die ODE Funktionen wieder in Klassen gekapselt, die leichter verwaltbar
sind - dies ist ja nicht weiter schwierig ist, ODE Objekte sind an sich
ja Klassen, die mittels einer C-API veröffentlicht werden, ähnlich
OpenGL (der Vorteil dieser Vorgehensweise ist enorm: nur so kann man sicher
gehen, dass eine Bibliothek wirklich Betriebssystem- und Programmiersprachenübergreifend
genutzt werden kann). Na ja, jedenfalls ist es geschafft - und das Ganze funktioniert direkt
gut, und ist auch in der Komplexität gut überschaubar, zumal
es für ODE ja auch eine ausführliche Dokumentation gibt.
BGP stellt bereits die Variablen "World" und "Space" zur Verfügung, die für die Einbindung der Physikengine notwendig sind. Zur Zeit haben alle Objekte das selbe Verhalten beim Aufeinandertreffen (hoher Reibungswiderstand und "Abprallen"), in einem der nächsten Releases wird es dann aber möglich sein, für jeden Körper Reibungskoeffzienten und eine Auswahl von verschiedenen Verhaltensweisen beim Zusammenprall mit anderen Objekten zu vergeben. Das Demo ist auch vom technischen Aspekt her interessant - da immer weitere
Objekte hinzugefügt werden, sieht man, dass die Leistung von ODE
nicht so sehr von der Anzahl der Objekte, sondern von der Anzahl der Kontakte
abhängt. Wenn es sehr viele Kontakte gibt (so etwa ab 50 Würfel
auf einem Haufen), wird das Ganze instabil und "explodiert",
worauf wieder für eine Weile Ruhe ist, bis die Anzahl der Kontakte
die "kritische Masse" wiederum überschreitet. Die Motivation BaseGraph Pascal zu schreiben, war auch, ein Werkzeug zu haben, mit dem auf einfache Weise ohne irgendwelche externen Hilfsmittel (also auch ohne Carad, auch wenn es die Möglichkeit geben wird in Carad erstellte Ressourcen in ein Programm zu linken und zu verwenden) eigenständige Programme zu schreiben, habe ich ebenfalls sämtliche in Carad verfügbaren Primitive in BaseGraph als Klassen exportiert (und wer Carad kennt, weiß, dass dies ziemlich viele sind...), sodass es auch möglich ist (wie im ODE Demo) einfacheren Content einer Anwendung direkt und dynamisch im BaseGraph Code zu erzeugen. Da sämtliche Klassen im Inspektor aufgelistet sind, sollte deren
Verwendung keine exorbitanten Probleme aufwerden...
|
||||||
8.3.2004 Das verregnete Wochenende hat sich recht positiv auf BaseGraph Pascal ausgewirkt, sodass Anwendung und Oberfläche um einiges leistungsstärker geworden sind. Die wichtigste Änderung ist die Unterstützung von ereignisgesteuerten
Anwendungen - auch wenn es immer noch möglich ist, das ganze Programm
aus einer Schleife zu steuern, ist dauerndes Pollen irgendwelcher States
nicht gerade das Paradigma der modernen Programmierung, und so kann man
nun für die meisten Ereignisse dementsprechende Routinen zur Verfügung
stellen, was im Endeffekt ja auch schneller ist. Die Umsetzung sieht folgendermaßen aus, dass Routinen mit bestimmten
Namen, so sie im Programm vorhanden sind, vor der Ausführung desselben
"abgeholt" und den Ereignissen des "echten" Delphiprogrammes
zugeordnet werden. (OnFormClick wäre etwa der Name für das OnClick
Ereignis des OpenGL Fensters). Die zweite Änderung ist eine Umorganisation des Inspektors, der um einiges "intelligenter" geworden ist, und Klassenhierarchien korrekt darstellt, sowie bei den Klassenmethoden auch "geerbte" Routinen darstellt (grau markiert), damit man nicht die Elternklassen auch noch durchsehen muss, um zu erfahren, ob eine bestimmte Methode unterstützt wird oder nicht. Natürlich gibt es auch ein neues Demo (ODECallback), das die neuen
Fähigkeiten beispielhaft aufzeigt: das Programm ist erstmalig echt
interaktiv (mit WSAD und Cursorsteuerung) und man kann die Objekte mit
Mausklicks "anschubsen", was recht witzig ist.
|
||||||
10.3.2004 Mit der neuen Version von BaseGraph Pascal kann man nun auch Executables
erstellen, wobei die geringste Programmgröße bei ca. 300 Kb
liegt. Wählt man den Menüpunkt Datei > ODE DLL integrieren, hat man die Möglichkeit völlig "self contained" .exe Dateien zu erstellen, die ganz ohne externe Abhängigkeiten auskommen. Zu diesem Zweck habe ich die Delphi ODE Importbibliotheken von statischem auf dynamisches Laden umgeschrieben - bei Auswahl dieser Option wird einfach die DLL gepackt, an die .exe gehängt und beim Start ins temporäre Windowsverzeichnis entpackt und von dort geladen. Ich habe zwar (aus Gewohnheit) per Compilerschalter die Möglichkeit eingebaut, BaseGraph Pascal ohne ODE Funktionalität zu erstellein und OpenGL Funktionalität bis zur Version 1.1 zurückzuschrauben, womit sich einige -zig KB sparen lassen würden - wenn man aber bedenkt dass das beigefügte something_is_strange Demo mit sämtlichen Texturen und gelinkter ODE DLL nicht einmal ein MB benötigt (ohne irgend ein externes File zu benötigen), werde ich mir nicht die Mühe machen, entsprechend eingeschränkte Versionen online zu stellen. Ebenfalls online ist eine Betaversion des neuen Carad, mit der sich auch Datendateien für BaseGraph Pascal erstellen lassen, sodass man sich einen Großteil der Programmierung sparen kann, bzw sehr einfach z.B. Objekte aus 3DS Max in ein BaseGraph Pascal Projekt bekommt. An der Funktionalität der Sprache selbst hat sich nicht besonders viel getan, da ich mit dem Linker recht beschäftigt war - immerhin gibt es jetzt die Möglichkeit, zur Laufzeit in beliebige Bildschirmauflösungen zu wechseln, wie es auch im something_is_strange Demo vorgeführt wird.
|
||||||
12.3.2004 Und wieder ist es Zeit für ein größeres Update - die Arbeit an einer "eigenen" IDE macht wirklich Freude, da man so mal die Möglichkeit hat, alles zu verwirklichen, was einem praktisch erscheint. Die wichtigste Änderung ist die Einführung einer Sound-API
über DirectX (respektive DirectMusic), mit der sich Wave Files und
Midis sehr einfach abspielen lassen, wobei (fast) beliebig viele 3D-positionierbare
Audiostreams gleichzeitig möglich sind.
Des weiteren gibt es einen Ressourceneditor, auf den ich direkt stolz
bin, ist es damit doch völlig transparent möglich, entweder
auf externe Dateien, oder auf in das Executable gelinkte Daten zuzugreifen.
Anstelle von
fügt man einfach die Datei als Ressource hinzu, benennt diese irgendwie
(der Dateiname wird automatisch vorgeschlagen, meist kann man es dabei
belassen) und lädt einfach und schon greift die entsprechende Routine im Executable auf Daten zu,
die in Wirklichkeit in gepackter Form an der .exe Datei hängen, während
zum Zeitpunkt der Bearbeitung innerhalb der IDE auf die tatsächlichen
Dateien auf der Festplatte zugegriffen wird.
|
||||||
15.3.2004 Nachdem die bisherigen Demos zu BGP eher Funktionstests waren, habe ich mich heute nachmittag hingesetzt und versucht trotz meiner künstlerischen Inkompetenz mal etwas Eindrucksvolleres zusammenzuschnippseln: Hier also das Orion - Demo, das ich wahrscheinlich zu einem echten Spiel ausbauen werde (so eine Art Spaceinvaders 3D), aber durch Verwendung von Detailtexturen und Environmentmaps schon jetzt nicht schlecht aussieht. Die Demo ist zu Testzwecken auch als (diesmal sogar teilweise kommentierter)
Source beim neuesten BaseGraph Pascal Download dabei, wird dort aber irgendwann
wieder verschwinden, da sie fast mehr Platz braucht, als die BGP Distribution
selbst. Steuerung erfolgt über WSAD und den Cursortasten + PgUp, PgDown(mit Cursor kann gezoomt werden), geschossen wird mit SpaceBar, wobei der Schuss um so schneller fliegt, je länger vorher auf Space gedrückt wurde.
|
||||||
BaseGraph Pascal hat sich in recht kurzer Zeit sehr weit entwickelt, was vor allem damit zusammenhängt, dass sämtliche "Ingredienzien" bereits vorhanden waren, und nur noch zu einem größeren Ganzen kombiniert werden mussten. BaseGraph Pascal hätte in dieser Form nicht zustande kommen können ohne folgende Hilfsmittel, die (außer Delphi) allesamt der Öffentlichkeit als Open Source zur Verfügung stehen, wofür ich mich bei den jeweiligen Herstellern bedanken möchte:
Die Arbeit mit BaseGraph Pascal geht leicht und intuitiv von der Hand
- für mich. Um BaseGraph Pascal laufend zu verbessern, neue Features
zu implementieren, Fehler zu bereinigen, kurz eine der besten Programmierumgebungen
für kleine bis mittelkomplexe 3D Szenarien oder Spiele zu schaffen,
benötige ich jedoch vor allem Feedback. |