|
Projekte und Physik Seit der ersten Version von Mcad versuchten BaseGraph und der Sourcecodegenerator Carad eigentlich auf vielen Hochzeiten zugleich zu tanzen - soll heißen, bisher gab es die Möglichkeit C++, Ansi C und Delphi Projekte zu erstellen. Gleichzeitig bedeutete dies aber auch, dass die Wartung und Weiterentwicklung der Software recht mühselig (um nicht zu sagen langweilig) war, da jede Änderung in mehreren Versionen durchgeführt werden musste (leider gibt es keinen eleganten Weg Code von einer Programmiersprache in eine andere zu übersetzen - wenn es diesen gäbe, wären unterschiedliche Programmiersprachen ohnehin überflüssig). Spätestens seit der Einführung von BaseGraph Pascal zeigte
sich, dass eigentlich Pascal die Sprache der Wahl für BaseGraph war
- denn die BGRTL (die BaseGraph Runtime Library) war nun so umfangreich,
dass eine Portierung in mehreren Sprachen (zumindest für ein nicht
kommerzielles Projekt) wirklich nicht zielführend war. Nachdem nun die mühselige Aufgabe weggefallen ist, BaseGraph und
die Sourcecodeerzeugung für mehrere Programmiersprachen zu warten
(es wäre nicht schwierig, diesen Support wieder einzubauen - nur
eben recht mühselig, da die Übersetzung von Code aus einer Sprache
in eine andere eine eher langweilige Tätigkeit ist), konzentriert
sich Carad nun auf die Sourcecode Erstellung für Pascal Dialekte,
als da wären Free Pascal, Virtual Pascal und Delphi. 1) Windows API Projekte Dieser Projekttyp wird sowohl von Free Pascal, von Virtual Pascal und von Delphi ab Version 2 unterstützt. Es wird einfach ein Windows Fenster mit OpenGL Unterstützung erzeugt, das über normale Windows Nachrichten gesteuert wird. 2) VCL / LCL Projekte Dieser Projekttyp wird sowohl von Delphi ab Version 5 (der frühesten Delphi Version mit textbasierten Formularen) unterstützt, als auch von FreePascal, wenn Lazarus installiert ist. Es wird ein VCL / LCL Fenster mit einem Panel mit OpenGL Unterstützung erzeugt, das direkt im Formulardesigner weiterbearbeitet werden kann. Selbstredend ist dieser Projekttyp viel intuitiver zu handhaben, als ein Windows API Projekt, als sowohl Lazarus als auch Delphi mächtige visuelle Designer integriert haben, mit denen sich sehr schnell komplexe Formulare handhaben lassen. 3) BGP Framework Projekte Dieser Projekttyp wird sowohl von Delphi ab Version 5 (frühere Versionen funktionieren eventuell auch) unterstützt, als auch von FreePascal, wenn Lazarus installiert ist. Hier stehen sämtliche BaseGraph Pascal Funktionen zur Verfügung, auch für 3D Sound und optional für Physik. Mit diesem Projekttyp ist es sehr einfach sehr schnell beeindruckende Demos und Spiele zu programmieren, da von Eingabefunktionen und Soundunterstützung bis hin zur Kollisionserkennung und Physik mit ODE alles schon da ist. Als echtes FreePascal oder Delphi Projekt ist der Source allerdings leichter erweiterbar, als ein echtes BaseGraph Pascal Projekt, bei dem man sich ja mehr oder weniger auf das beschränken muss, was BaseGraph Pascal zur Verfügung stellt.
Hier sieht man einen Überblick über die Projekteinstellung in Carad, bei der Auswahl der Optionen werden Inkompatibilitäten automatisch ausgeblendet:
Nach diesen eher theoretischen Überlegungen, möchten wir nun ein kleines Programm erstellen, es soll einfach eine Kugel sein, die in einer Halfpipe herumrollt - sich die Möglichkeiten auszumalen, die sich ergeben wenn man 3DS (oder andere Modelle) verwendet, bleibt jedem selbst überlassen (zumal wenn in einer der nächsten Versionen auch Joints unterstützt werden, und physikalische Primitive auch interaktiv transformiert werden können, anstatt dass alle Parameter händisch gesetzt werden müssen...). Das Szenario ist relativ einfach, als erstes benötigen wir die Halfpipe, das soll einfach ein halbes Rohr sein - etwa mit folgenden Parametern erstellt
Das Ganze sollte dann ungefähr so aussehen
Über unsere "Halfpipe" drapieren wir noch gekonnt eine Kugel, die darin herumrollen soll - wir positionieren diese ungefähr so:
Jetzt müssen diesen Objekten noch geeignete physikalische Eigenschaften gegeben werden - Carad versucht im Rahmen des Möglichen (bzw. Sinnvollen) Objekte bereits mit Standardeigenschaften zu versehen - um unsere Kugel brauchen wir uns daher nicht mehr zu kümmern (Kugeln und Boxen werden automatisch mit den entsprechenden Physikprimitiven versehen). Anders sieht es bei unserer Halfpipe aus, diese wird physikalisch zur Zeit ebenfalls durch eine Kugel repräsentiert, da Carad dies automatisch mit allen Objekten macht, die es nicht eindeutig zuordnen kann. Wir möchten allerdings, dass die Halfpipe ein statisches Objekt
ist, das durch ein Trimesh repräsentiert wird, da dies die einzige
Möglichkeit ist beliebige (auch konkave) Objekte sinnvoll in ODE
Physik einzubinden.
Anschließend klicken wir auf den Knopf "Phys." neben dem Namen, das Fenster mit den physikalischen Eigenschaften des Objektes öffnet sich. Im Abschnitt Geom entfernen wir das automatisch erstellte Kugelprimitive, da dieses die Halfpipe nicht wirklich gut repräsentiert, statt dessen fügen wir das Trimesh Primitive hinzu. Das ist nur möglich, wenn das Objekt ein Trimesh besitzt, deswegen ist es wichtig, Objekte mit ebensolchen zu versehen, wenn man sie physikalisch exakt repräsentieren möchte - allerdings sind die anderen Primitive (Kugel, Capped Cylinder, Box) in der Regel schneller und sollten verwendet werden, wann immer möglich. Da die physikalische Repräsentation eines Objekt aus beliebig vielen Geometrien zusammengesetzt werden kann, sollte dies nicht allzu schwierig sein. Das Ergebnis sollte dann so aussehen . Anschließend stellen wir unter dem Tab "Body" sicher, dass der Punkt "static" aktiviert ist, da wir nicht wirklich wollen, da unsere Halfpipe fest verankert sein soll - d.h. sie bildet zwar ein Hinderniss für andere Objekte, sie selbst lässt sich aber nicht durch Kräfte beeinflussen. Damit das Ganze etwas schöner aussieht, können wir noch ein paar Farben vergeben, eine Lichtquelle erstellen und Schatten aktivieren - so sieht das Ganze gleich viel netter aus:
Wenn jetzt Animationen gestartet werden, z.B. mit Nachdem dieser Artikel die verschiedenen Projekttypen in Carad ein wenig beleuchten soll, wollen wir uns nun um diese kümmern. Dieses spezielle Programm soll Physik mit ODE verwenden - daher gibt es genau zwei Möglichkeiten, ein ausführbares Programm zu erzeugen 1) ein Skript mit dem integrierten BaseGraph Pascal und 2) ein Lazarus (FreePascal) oder Delphi Projekt mit dem BGP Framework. 1) Das Skript Sehen wir uns zunächst an, wie wir schnell ein BaseGraph Pascal Programm zusammenbekommen: Um die Erstellung der Szene müssen wir uns nicht mehr kümmern, dies wird ja interaktiv in Carad gemacht, und BaseGraph Pascal lädt solche Projekte als Daten, anstatt sie als Source abzuspeichern. Da die Physikunterstützung optional ist, gilt dies aber nicht für physikalische Eigenschaften, diese müssen im Programm vorliegen - allerdings müssen diese nicht händisch programmiert werden (wäre ja auch blödsinnig, da die Eigenschaften bereits bekannt sind) sondern können einfach in ein Skriptprogramm eingefügt werden. Öffnen wir also die BaseGraph Pascal IDE (das gelbe P), und dann gleich auf Bearbeiten > ODE Code einfügen. Carad erstellt automatisch eine Routine namens InitODEWorldAndObjects, welche die Objekte genau mit den Eigenschaften versieht, die im Physikeditor angegeben wurden. Weil es so schön ist, wenn der Computer einem die ganze Arbeit abnimmt, gehen wir dann gleich in die nächste freie Zeile unterhalb von dieser Routine und wählen Bearbeiten > Standardcode einfügen - ein Basisprogramm, das bereits lauffähig ist, wird eingefügt, wenn wir direkt nach dem begin die Routine InitODEWorldAndObjects aufrufen, ist die Physikunterstützung auch drinnen - und wir können das Skript sofort starten. Wer Lazarus oder Delphi (ab Version 5) installiert hat, wird eventuell lieber einen "echten" Compiler verwenden (auch wenn BaseGraph Pascal durchaus in der Lage ist, eigenständige Executables zu erzeugen - dank der integrierten Ressourcenverwaltung kann es für kleinere Projekte auch für geübte Programmierer die Sprache der Wahl sein - insbesondere als entsprechende Skripts direkt aus Carad gestartet werden können - sogar ganze Szenen, die dann interaktiv in Carad verändert werden, könnten mit dieser Sprache erzeugt werden) - die Vorgehensweise ist einfach: 2) Das Lazarus/Delphi Projekt Für die Physikunterstützung muss ein BGP Framework Projekt
erstellt werden (die anderen Projekte funktionieren natürlich auch,
nur bestehen dies dann aus der graphischen Szene alleine). Es genügt
hierzu den Menüpunkt Datei > Source erstellen > BGP Framework
Projekt > BGP Framework Projekt für Lazarus anzuwählen,
die Projekteigenschaften können noch geändert werden (etwa wenn
man die dglOpenGL Unit verwenden möchte, anstatt der bgOpenGL Unit,
die standardmäßig in BaseGraph Projekte eingebunden wird),
ein Projektname muss noch angegeben werden, das Speicherverzeichnis ausgewählt
- und das wars dann. Viel Spass beim Ausprobieren
|