3D-Space-Game-008.bb
;------------------------------------------------------- ; ; 3D Space Game Tutorial ; ; (C) by Turgut Frank Temucin alias TFT ; ; Alle Rechte verbleiben beim Autor. Die Veröffentlich- ; ung außerhalb des BlitzForums ist nur mit Genehmigung ; gestattet. Der Source-Code ist Freeware und darf für den ; privaten Gebrauch frei verwendet werden. ; ;------------------------------------------------------- ; File: 3D-Space-Game-008 ; Date: 26.07.03 ;------------------------------------------------------- ; BB3D: 1.83 ;------------------------------------------------------- ; Mein dank an: Markus und HotBit ;------------------------------------------------------- ; ; Das Erstellen der SkyBox ist in BB kein Problem. Ich ; denke, daß ihr euch auch schon eine schöne Weltraum- ; Textur besorgt habt. Legt diese in das Verzeichnis ; in dem auch dieser Code liegt, und benennt es "all.jpg" ; ; ------------------------------------------------------ ; ; Als erstes werden ein paar Konstanten definiert. Diese ; sind unveränderbar und immer Global. Const screen_x=640 Const screen_y=480 Const screen_m=2 ; Bildschirm Modus ; 2=Fenster 1=Fullscreen Const screen_t=16; 16 Bit oder 32 Bit Bildschirm ; Dann wird der Bildschirm geöffnet ; Graphics3D screen_x,screen_y,screen_t,screen_m ; Den Bildschirm öffnen SetBuffer BackBuffer() ; das DoubleBuffering aktivieren ; Ein Objekt, welches mit DOGA L1 erstellt wurde, wird geladen Global schiff=LoadMesh("schiff.x") ; Schiff-Object laden PositionEntity schiff,0,0,0 ; Position beliebig ; Danach die Kamera- und Licht- Einstellungen ; Global Cammera=CreateCamera(schiff) ; Ohne Kamera sieht man nichts ; und es wird an das Schiff angebunden CameraRange cammera,1,500000 ; Sichtweite der Kamera anpassen MoveEntity cammera,0,0,-4 ; Da die Kamera mitten im Schiff liegt, ; wird sie etwas nach hinten verschoben. CameraZoom cammera,2 ; Fischaugen korrigieren Global licht=CreateLight(1) ; Für das richtige Ambiente muß eine ordentliche ; Lichtquelle her. RotateEntity licht,0,90,0 ; Das Licht kommt von rechts ; Jetzt wird ein Objekt erzeugt und positioniert ; Global ball=CreateSphere(12) ; Eine Kugel erstellen Global tex=LoadTexture("welt.jpg") ; Die Welt-Textur laden EntityTexture ball,tex ; und dem Objekt zuweisen ScaleEntity ball,1000,1000,1000 ; Den Planet vergrößern PositionEntity ball,0,0,4003 ; Und vor die Kamera stellen ;******** ; ; Die Skybox für mehr Ambiente erzeugen ; Das ist ganz einfach. Ein Objekt wie der Ball ; wird erzeugt, und mit dem Befehl FlipMesh die ; Ansichtsseite von aussen nach innen umgekehrt. ; Die Textur drüber und schon haben wir es. Wer ; das schon probiert hat, kennt die Tücken. Die ; Kamera- Reichweite muß mal wieder erweitert ; werden, und die Zeichen- Reihenfolge muss definiert ; sein. Damit man nicht aus der SkyBox rausfliegen ; kann, muß diese an die Position des Schiffes ; anbinden. Als Parent funktioniert es nicht, ; da dort auch die Drehungen mit übertragen werden. ; Daher brauchen wir in der Funktion "bewege_schiff" ; einige Zeilen, die das erledigen. Global skay=CreateSphere(12) ; Eine Kugel erstellen Global skay_tex=LoadTexture("all.jpg") ; Die All- Textur laden EntityTexture skay,skay_tex ; und dem Objekt zuweisen ScaleEntity skay,100000,100000,100000 ; Den Weltraum vergrößern FlipMesh skay ; Von innen sichtbar EntityOrder skay,1 ; Immer als erstes darstellen ;******** ; Nun kommt der Main Loop ; Repeat TurnEntity ball,0,.1,0 ; Das Objekt wird bewegt/gedreht bewege_schiff() ; Funktions-aufruf für die Schiffs-bewegung RenderWorld ; Bild berechnen und zeichnen Flip 1 ; Seite wechseln Until KeyHit(1) ; Abrechen, wenn ESC gedrückt ; Und zum Schluß das Ende ; End ; Alles beenden Function bewege_schiff() Local MSF#=10 If KeyDown(200) ; Taste Pfeil auf TurnEntity schiff,.4,0,0 Else If KeyDown(208) ; Taste Pfeil ab TurnEntity schiff,-.4,0,0 Else If KeyDown(205) ; Taste rechts TurnEntity schiff,0,-.4,0 Else If KeyDown(203) ; Taste links TurnEntity schiff,0,.4,0 EndIf If KeyDown(17) ; Taste W MoveEntity schiff,0,0,MSF Else If KeyDown(31) ; Taste S MoveEntity schiff,0,0,-MSF EndIf If KeyDown(30) ; Taste A TurnEntity schiff,0,0,.2 Else If KeyDown(32) ; Taste D TurnEntity schiff,0,0,-.2 EndIf ;****** ; ; Damit die SkyBox immer die richtige Entfernung ; zum Schiff hat. ; PositionEntity skay,EntityX(schiff),EntityY(schiff),EntityZ(schiff) ;****** End Function ; ------------------------------------------------------ ; ; Ein wenig noch die Geschwindigkeit angepaßt. Und das ; Ergebnis kann sich schon sehen lassen. Die SkyBox ; als Kugel auszulegen, ist nicht das non plus ultra. ; Aber für den ersten Versuch reicht es. Es gibt sogar ; ein Tool, das Weltraum- hintergründe erzeugen kann. Ver- ; sucht mal, Alternativen für die SkyBox einzuarbeiten. ; An dieser Stelle könnte das Tool LightUnwrap hilf- ; reich sein. Es ist möglich, schöne Hintergründe mit ; wenig Aufwand zu erstellen. DOGA liefert die Formen ; und LightUnwrap die Texturierung. Texturen gibt es ; im Internet genug. ; ; -> Weiter mit 3D-Space-Game-009.bb
Created on 20.08.2005 Zurueck