workshop08

Top  Zurück  Weiter

Workshop 08: Position, Winkel und Maßstab

Wenn Sie die Code-Schreiberei nicht besonders mögen, werden Sie sich freuen, dass wir in diesem Workshop nützliche Dinge lernen, ganz ohne eine einzige Skriptzeile zu schreiben. Danach wissen wir einiges über Position, Winkel und Maßstab der Objekte in einer 3D-Welt. Es gibt nur einen Wermutstropfen: Wenn Sie nur lite-C besitzen (welches keinen Level-Editor enthält), können Sie die Übungen dieses Workshops nicht selbst durchführen. Trotzdem sollten Sie weiterlesen, um das Koordinatensystem kennenzulernen.

Wenn Sie Gamestudio/A7 Extra Edition oder besser besitzen, starten Sie den WED Level-Editor und öffnen Sie das Level work08.wmp im \workshop08-Ordner:

w08_01

Sie sehen einen schicken Raum. Ich wette, er sieht noch besser aus, wenn wir den Level starten. Also los, kompilieren (Build) und starten (Run)Sie ihn:

w08_02

Ich würde sagen das sieht gar nicht übel aus. Kann ich bitte mehr davon sehen?

Wenn wir keinen Code zum Verändern der Kameraposition schreiben, wird die Engine die Kamera (unser "Fenster in die 3D-Welt") jedesmal beim Starten eines Levels am Ursprung, nämlich bei x = 0, y = 0 und z = 0 plazieren. Lassen Sie das Level weiterlaufen und drücken Sie[F11] - sie sehen jede Menge Zahlen und Buchstaben auf dem Bildschirm. Wir werden allerdings nur ein paar davon besprechen:

w08_1

Die erste Spalte zeigt die Bildschirmauflösung (800 x 600 Pixel) an, die mächtige Framerate (447 Frames pro Sekunde!), die ich auf einem normalen PC kriege, sowie die Anzahl der pro Sekunde gerenderten Polygone (199,000 polygons). Die Werte zu x, y, z, pan, tilt und roll zeigen Position und Winkel der Kamera. Drücken Sie zum Befreien der Kamera auf die Taste 0 und bewegen Sie sie dann mithilfe von Pfeiltasten und Maus. Ich habe die Kamera etwas bewegt und hier ist, was ich geliefert bekam:

w08_2

Diese Kameraposition gefällt mir besser, denn ich sehe einen größeren Ausschnitt vom Level. In den Spalten "xyz" und "ang" haben sich fünf von sechs Werten geändert. Es ist klar, dass die Kamera ihre xyz-Position und zwei ihrer Winkel geändert hat.

Wie können wir für ein bestimmtes Objekt eine bestimmte Position festlegen? Werfen Sie einen Blick auf den folgenden Screenshot:

w08_05

Indem wir seine Position im Top- (XY) Fenster verändern, können wir x und y für jedes Objekt festlegen und die Höhe (z) des Objekts ändern wir durch eine Positionsverschiebung in der Back- (XZ) oder Side- (YZ) Ansicht.Wenn Sie es lieber mathematischer mögen, gibt es noch eine weitere Methode zur Positionsverschiebung:

Klicken Sie in WED rechts auf einen Block im Level, öffnen Sie das Eigenschaftsfenster "Properties", gehen dort auf "Position" und Sie haben das folgende Bild:

w08_06

Die erste Reihe zeigt die x- (-375), y- (-54) und z- (-259.996)-Koordinaten des Blocks. Ändern Sie einen dieser Werte und Sie sehen, dass der markierte Block (in der Abbildung oben das rote Rechteck) seine Position verändert. Auf diese Art können Sie in WED jedem Objekt eine bestimmte Position im Level zuweisen.

Die zweite Reihe im Objekt-Eigenschaftsfenster - "Rotate" steht für den Winkel des betreffenden, markierten Objekts. Was hat es mit diesen drei Winkeln auf sich? Sie nennen sich pan, tilt und roll und sind sogenannte Euler-Winkel. Falls Sie keine Ahnung haben, was das ist, hier eine Abbildung, die Licht in dieses Dunkel bringen sollte:

w08_08

Eigentlich sollte ich Sie nicht mit so einem großen Flugzeug in einem so kleinen Raum herumspielen lassen, aber Anakin Skywalker hat es gemacht, warum sollten wir das dann nicht auch tun. Klicken Sie rechts in WED's "Top"-Ansichtsfenster, gehen Sie auf "Add Model" und suchen Sie sich mig.mdl aus:

w08_10

Ich habe Ihnen ja gesagt, es ist ein rosses Flugzeug in einem kleinen Raum. Keine Bange, Sie müssen nicht damit fliegen, versuchen Sie nur, es wie in der Abbildung, möglichst in der Mitte des Raumes zu plazieren. Nun beklicken Sie das Flugzeug mit der rechten Maustaste, gehen über Properties auf / Position und spielen dort zum Ändern seiner Winkel ein bißchen mit den drei Rotate-Werten herum. Sie werden feststellen, dass der Level-Editor einem Modell beim Einfügen in unser Level, einen Anfangs-"pan"-Winkel von 90 Grad zuweist. Sorgen Sie dafür, dass Sie verstehen, wie pan, tilt und roll funktionieren, denn diese Werte werden wir in den weiterführenden Workshops oft brauchen.

Die letzte Reihe von Werten in unseren Objekt-Eigenschaften (Object Properties), ist Scale (die Größe) des Objekts. Klicken Sie mit rechts auf das Flugzeug-Modell und ändern Sie seine Größe, d. h. Sie 'skalieren' es. Zum Vergrößern nehmen Sie Werte höher als 1, zum Verkleinern niedrigere als 1.

w08_11

Zurück zu unserem Testlevel: Starten Sie Lite-C und öffnen Sie den Ordner workshop08. Die Datei script08.c, die dafür sorgt, dass das Level läuft, hat nur wenige Code-Zeilen:

////////////////////////////////////////////////////////////////////////////////////
function main()
{
  screen_size.x = 800;
screen_size.y = 600;
level_load ("work08.wmb"); }

Drücken Sie [0] und Sie können sich mithilfe der Cursortasten im Raum bewegen. Was sagen Sie da? Ich habe versprochen, dass wir keine einzige Codezeile schreiben? Also gut, hören wir hier auf.

Weiter: Entities