Geschrieben von danzig am 26.06.2004, 04:21

Hier eine kleine Einführung in die 3D-Funktionen von BlitzBasic.
Auch wenn ich persönlich kein grosser Fan der 3D-Funktion von BB bin, so wollen ein paar von euch sicherlich mehr darüber wissen.
Nach und nach werden Teile dazu kommen...

== ANFANG VON TEIL 1 ====================

Als erstes schalten wir in einen Grafikmodus, einen 3D-Grafikmodus wohlgemerkt. Eine Auflösung von 640x480 reicht uns erstmal...
Code:

Graphics3D 640,480

Der Befehl Graphics3D <screenx>, <screeny> legt den 3D-Modus und die Auflösung von <x> auf <y> fest.

Zusätzlich folgen noch ein paar wichtige Variablen

Code:

x#=2
y#=7
z#=-5

Das #-Zeichen bedeutet, diese Variablen sind als floating point (Fliesskomma) festgelegt. Das benötigt man, wenn man z.B. langsame, aber sanfte Kamerabewegungen einbauen will.

Dann brauchen wir eine Kamera, sonst sieht man ja nix...

Code:

cam1=CreateCamera()

CreateCamera() legt nun die Variable "cam1" als Handle für die Kamera fest. Nun benutzen wir nur noch cam1 um die Kamere zu steuern.
Als nächstes folgt ein Terrain, also eine flache Ebene, auf der sich alles abspielen soll. Dessen Grösse legen wir mal auf 128x128 Felder fest.

Code:

terrain=CreateTerrain(128)

CreateTerrain() kreiiert eine quadratische, flache Ebene aus Polygonen, die wir z.B. als Boden verwenden können...
Nur ohne Textur sieht das Terrain doch sehr langweilig aus. Deshalb belegen wir es mit einer von uns gemalten 256x256 Pixel grossen .BMP-Datei names "Floor.bmp". Ich selbst habe damals eine Stück Wiese gemalt (Dunkelgrüner Hintergrund, hellgrüne Spraydose =) ). Die BMP-Datei sollte erst mal im gleichen Verzeichnis wie der Source-Code liegen.

Code:

texFloor=LoadTexture("floor.bmp")
EntityTexture terrain, texFloor

LoadTexture(name$) lädt eine Texturdatei in den Speicher und EntityTexture handle, texture legt die Textur auf das Objekt.
Jetzt wird das Licht angeknipst.

Code:

light=CreateLight(1)

CreateLight() legt die Variable "light" als Handle für ein Licht fest.
Nun haben wir zwar alles erschaffen, aber noch nicht positioniert, also ist es nicht sichbar. Deshalb weisen wir jetzt jedem Objekt seinen Platz zu:

Code:

PositionEntity cam1, x#, y#, z#
PositionEntity light,10,10,0

PositionEntity handle,x,y,z setzt das Handle, (also ein Objekt) an einen von uns angegebenen Platz im Raum.
Die Kamera ist nun ein Stück über dem Terrain angebracht, das automatisch auf 0,0,0 plaziert wird. Nun möchten wir die Kamera etwas nach unten neigen, um besser auf das Terrain sehen zu können.

Code:

RotateEntity cam1,40,0,0

Mit RotateEnity handle, pitch, yaw, roll können wir ein Objekt an der Stelle, wo es sich befindet, drehen. Mit "pitch" drehen wir es vertikal, mit "yaw" horizontal und mit "roll" um die z-Achse.

Das ganze Programm ist jetzt so noch nicht lauffähig. Das heisst, es sind erst mal die nötigsten Anweisungen gegeben, aber BB brauch einen Befehl, um das Ganze auf den Bildschirm zu rendern.
Das machen wir mit:
Code:

RenderWorld

Dieser Befehl setzt alle Entities, also Lichter, Objekte, Kamera auf den Bildschirm.
Wichtig: RenderWorld sollte immer als LETZTES ausgeführt werden, also nachdem alle Objekte postioniert und texturiert sind.

Da aber das Programm sofort beendet wird und wir nicht allzu viel sehen, setzen wir noch ein:
Code:

WaitKey()

an das Ende unseres Codes.

Seht euch das Ergebnis an!

Bewertung Anzahl
5
100,0 %
1 Bewertungen