Die Grundformen, Bewegung,  Texturen

Hallo bei meinem ersten Tutorial für BlitzBasic3D. Ich wollte nämlich auch mal so ein Tutorial schreiben.
Da ich Ellen lange Einleitungen in Tutorials hasse, werde ich auch gleich anfangen. Für dieses Tutorial sind
gewisse Grundkenntnisse BlitzBasic2d nötig!!!

Erstellen eines Zylinders

Fangen wir mit einem ganz einfachen Programm an das einen Zylinder erstellt.
 

Graphics3D 640, 480

SetBuffer BackBuffer()

Global camera=CreateCamera()

Global cylinder=CreateCylinder(30)

PositionEntity cylinder, 0, 0, 5

While Not KeyHit(1)

        UpdateWorld

        RenderWorld

        Flip

Wend

 

 

 

 

 

So einfach ist das kommen wir nun zur Erläuterung der einzelnen Befehlen:

"Graphics3d": Sagt nichts weiter das man jetzt den 3D Modus nutzen will.

"Setbuffer Backbuffer()": Hat genau die selbe Bedeutung wie in BlitzBasic2D.

"camera=CreateCamera()": Erstellt eine Camera damit wir überhaupt was sehen.
Das muss man sich so forstellen das ist wie beim Menschen das Auge.

"cylinder=CreateCylinder(30)": Erzeugt einen Zylinder und die 30 in den Klammern
gibt an wie viele Polygonen(Segmente) der Zylinder haben soll.

"PositionEntity cylinder, 0, 0, 5": BlitzBasic setzt alle was man erstellt auf
die Koordinaten 0, 0, 0 (in einem dreidimensionalen Koordinatensystem x, y, z)
das heißt das der Zylinder direkt auf der Camera sitzt. Und wenn er da ist
können wir ihn ja nicht sehen. Deswegen müssen wir ihn von der Camera wegbewegen.
Und dafür ist der befehl nun gut. Die hinteren Zahlen stehen für die Koordinaten,
wir bewegen ihn also um 5 Einheiten auf der ZAchse nach vorne. Wenn die zahl
Negativ wird bewegen wir ihn nach hinten. Experementirt mit diesem Befehl
noch ein bisschen.

"While Not KeyHit(1)": Öffnet die Hauptschleife.

"UpdateWorld": Fragt die Kollision ab und aktualisiert das Bild.

"RenderWorld": Rendert das ganze Geschehnis.

"Flip": Damit wird der Buffer geflippt.

"Wend": Schließt die Hauptschleife.

Wenn ihr wollt könnt ihr noch den Befehl "WireFrame(1)" hinzufügen (vor UpdateWorld)
dieser Befehl wird euch das Drahtgitter des Zylinders anzeigen.

Hier der Beweis es ist 3D.

Bewegung

Ist das nicht langweilig so ein darumstehender Zylinder, wenn er sich doch wenigstens drehen
würde nichts leichter als das.
 

Graphics3D 640, 480

SetBuffer BackBuffer()

Global camera=CreateCamera()

Global cylinder=CreateCylinder(30)

PositionEntity cylinder, 0, 0, 5

While Not KeyHit(1)

        TurnEntity cylinder, 1, 1, 1

        WireFrame(1)

        UpdateWorld

        RenderWorld

        Flip

Wend

"TurnEntity cylinder, 1, 1, 1": Sagt nichts anderes als das der Zylinder sich um alle
 Achsen drehen soll. Auch wenn hier die Zahlen Negativ werden ändert sich auch hier die
 Drehrichtung. Wenn man einen höheren wert als eins einsetzt dreht er sich schneller.

Wie wär's wenn wir den Zylinder mit den Pfeiltasten hin und her bewegen könnten?
Hier der Quellcod:
 

Graphics3D 640, 480

SetBuffer BackBuffer()

Global camera=CreateCamera()

Global cylinder=CreateCylinder(30)

PositionEntity cylinder, 0, 0, 5

EntityColor cylinder, 0, 0, 255

While Not KeyHit(1)

        If KeyDown(205) Then MoveEntity cylinder, 0.2, 0, 0

        If KeyDown(203) Then MoveEntity cylinder, -0.2, 0, 0

        If KeyDown(200) Then MoveEntity cylinder, 0, 0.2, 0

        If KeyDown(208) Then MoveEntity cylinder, 0, -0.2, 0

        WireFrame(0)

        UpdateWorld

        RenderWorld

Flip

Wend

 

"MoveEntity cylinder, 0.2, 0, 0": Mit PositionEntity konnte man Gegenstände bis her nur Positionieren
aber mit MoveEntity kann man Gegenstände bewegen. Auch hier wieder negative zahle verändern auch
hier die Bewegungsrichtung.

Das sieht jetzt ja alles noch ganz doof aus und deswegen werden wir den Zylinder erst mal ein bisschen einfärben.
Das macht man mit "EntityColor cylinder, 0, 0, 255" das braucht ihr dann nur einfach unter
"PositionEntity cylinder, 0, 0, 5" setzen. Die drei Zahlen Werte stehen für den jeweiligen Farbanteil (rot, grün, blau) 255 ist der höchste einsetzbare Wert.

Wie ihr vielleicht mitbekommen habt ist das blau sehr dunkel geworden.
Das liegt daran das die Hintergrundbeleuchtung nur gering leuchtet.
Das kann man mit Hilfe dieses Befehles ändern "AmbientLight 255, 255, 255"
Setzt ihn einfach unter Setbuffer Backbuffer(). Jetzt haben wir das blau was wir kennen oder?

 

 

 

 

 

 

 

Texturen

Jetzt könnte unser Zylinder doch auch mal eine schöne Textur gebrauchen. Für den der`s nicht weis eine
Textur ist ein Bild was über das Drahtgitter eines Körpers gezogen wird.

Graphics3D 640, 480

SetBuffer BackBuffer()

Global camera=CreateCamera()

Global cylinder=CreateCylinder(30)

PositionEntity cylinder, 0, 0, 5

Global stein=LoadTexture( "stein.bmp" )

EntityTexture cylinder, stein

While Not KeyHit(1)

        TurnEntity cylinder, 1, 1, 1

        WireFrame(0)

        UpdateWorld

        RenderWorld

        Flip

Wend

 

"stein=LoadTexture( "Stein.bmp )": Dieser Befehl lädt die Textur in diesem Fall Stein.bmp.

"EntityTexture cylinder, stein": Damit sagt man BlitzBasic das die Textur stein auf den Körper
cylinder übertragen werden soll.

 Fürs erste sieht das dann erst mal so aus.

Wenn euch die Steine zu groß oder zu klein sind kann man die Textur auch skalieren (zerren).
Das macht man mit "ScaleTexture textur, x, y". Wenn man für x=1 und y=1 einsetzt dann ist das
die 100%ige Größe der Textur zwischen 1 und 0 wird sie kleiner und alles über 1 macht sie größer.

Es gibt noch etliche Sachen die man mit Texturen machen kann aber das soll fürs erste reichen.
 

Die Grundformen

Jetzt haben wir schon so viel mit unserem Zylinder gemacht aber es gibt ja nicht nur den Zylinder sondern auch
noch andere so genante Grundformen. Dazu gehören - der Zylinder (cylinder)
                                                                                - der Würfel       (cube )
                                                                                - die Kugel      (sphere )
                                                                                - der Kegel       ( cone )


Erstellt werden sie alle gleich:
CreateCylinder(30)
CreateCube() (Warum wohl keine Zahl könnt ihr euch sicher selber denken)
CreateSphere(30)
CreateCone(30)

Wenn einem die Größe des Körpers nicht passt dann kann man sie mit "ScaleEntity Variable, x, y, z" ändern.
Dazu ein kleines Beispiel:

Graphics3D 640, 480

SetBuffer BackBuffer()

Global camera=CreateCamera()

Global cylinder=CreateCylinder(30)

PositionEntity cylinder, -4, 0, 10

ScaleEntity cylinder, 0.5, 2, 1

Global sphere=CreateSphere(30)

PositionEntity sphere, 3, 0, 10

ScaleEntity sphere, 5, 2, 1

While Not KeyHit(1)

        WireFrame(1)

        UpdateWorld

        RenderWorld

        Flip

Wend

                                        Jetzt sind sie schön verzerrt

Ich hoffe doch das euch der erste Teil meines Tutorials Gefallen hat und das ihr euch mal meinen Zweiten
Teil anschaut "Licht und Effekte" wenn ihr Verbesserungsvorschläge habt die dann bitte an "MattisInfo@gmx.de"

 <Zurück zur Übersicht                                                                                                                                                                       Weiter >