PB 4.3 und B3D Engine ( Für Anfänger und interesierte )

Hier kannst du häufig gestellte Fragen/Antworten und Tutorials lesen und schreiben.
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo ....

Das Video ist halt ein AVI ..... ich spiele es mit WINAMP ab. FRAPS kann
leider kein anderes Vormat in der geschwindigkeit speichern..

Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo ...

@xperience2003

da muss ich dir leider widersprechen. B3D ist ein Code Monster. Und es ist
bei weitem nicht so flexible. Sicherlich kann man damit ganz fiele sachen
machen. (Habe selber bis vor kurzem B3D befohrzugt.) Aber die Engine
in verbindung mit den möglichkeiten von PB .... sind nahezu unendlich.
Ich werde in diesem Tut versuchen besonders die möglichkeiten ... und
weniger die schwächen herforzuheben. Ansonsten gild natürlichdas was
für alle gild. JEDER BENUTZT DAS WAS ER ALS DAS BESTE EMPFINDET.

Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo...

Capter 6

nun ... zum Video nu der Sorce und der Loadlink. Wir gehen diesmal
etwas weiter ........ WASD Steuerung mit Mouse unterstützung.

Wer sich das Verzeichniss genauer ansieht wird sich fileicht wundern
wo das Framework geblieben.

Im Hauptverzeichniss befinden sich nu haubtsächlich die Project
bezogenen Includs und Daten. Das Verzeichniss FW enthält das
FrameWork, die Exe und die Includes für den CodeView.

ZumCompilieren bitte Das Framework verwenden.
Bei späteren codes mit zusätzlichen Daten werden diese sonst nicht
gefunden.

InitProjectDaten.pbi

Code: Alles auswählen

;
; Capter 6
;

; Hir werden alle Variablen Definiert, das erleichtert sie Fehlersuche
; und es gibt einen festen platz. So das nicht lange nach definitionen
; gesucht werden muss

Define MX   ; MouseX
Define MY   ; MouseY
Define MDX  ; MouseDeltaX
Define MDY  ; MouseDeltaY
Define MDT=60  ; Mouse abfrage intervall in Tick
Define MDC  ; Mouse Intervallcounter
Define MBR  ; Mouse Botton Right
Define MBL  ; Mouse Bottom Left
Define MBF  ; Mouse Botton First

Define TKT=60 ; Tasten abfrage intervall in Tick
Define TKC  ; Tasten Intervallcounter

Define TextT=60 ; Text änderungs Intervall in Tick
Define TextC ; Text Intervallcounter

Define CamMoveZ.f
Define CamMoveX.f

Define CamRX.f
Define CamRY.f
Define CamRZ.f

; Player Data

Define MaxSpeedZ.f=5.0
Define MaxSpeedX.f=2.0
Define Thrust.f=0.1

Define TickDammy    ; Enthällt den GetTickCount()
Define Alpha.f=1.0
Define AlphaCounter
Define AlphaFPS

InitB3DDaten.pbi

Code: Alles auswählen

;
; Capter 6
;

Global Light=bbcreatelight(3)
bbmoveentity(Light,0,100,-100)

Dim cubs(2000)
Define i1

; Es wird ein Object als Reference erzeugt
; Und dann versteckt.(HideEntity)

Define cube=bbcreatecube()
bbhideentity(cube)

For i1 = 0 To 2000

  ; Und dann nur noch copiert angewendet
  ; das ist etwas schneller.
  
  cubs(i1)=bbcopyentity(cube)
  ;
  ; Alle Entity werden positioniert
  
  bbmoveentity(cubs(i1),150-Random(300),150-Random(300),150-Random(300)+300)
  
  ;
  ; Und damit nicht alle im Gleichtackt stehn.
  ; Werden sie zufällig rotiert
  ;
  bbrotateentity(cubs(i1),Random(90),Random(90),Random(90))
  
Next 
Péroject3DLoop.pbi

Code: Alles auswählen

;
  ; Capter 6
  
  ; Um die Betriebssystem Funktion GetTickCount() nicht zu offt
  ; Aufrufen zu müssen. Speichern wir sie hir zwischen.
  
  Tickdammy=GetTickCount_()
  
  ; Um zu verhindern das sich bewegungen nicht immer gleich pro Frame
  ; berechen. Müssen wir bei allen Berechnungen diesem rechnung tragen.
  ; Dies wird duch Multiplizierne eines Alpha wertes erreicht. Den wir
  ; hir einmal pro 500 ms neu berechnen. Die ist nicht perfeckt.
  ; Aber für unsere Zwecke reicht es.
  ; 
  
  If AlphaCounter=0
    AlphaCounter=Tickdammy+500
  ElseIf AlphaCounter<TickDammy
    AlphaCounter=Tickdammy+500
    Alpha.f=50.0/AlphaFPS
    AlphaFPS=0
  Else
    AlphaFPS + 1
  EndIf  
 
 ; Die Abfrage der Tastatur ist nicht jeden Frame nötig.
 ; Daher gibt es einen Timer der die Abfrage FPS unabhängig
 ; Durchfürt. Das gleiche machen wir Spater auch bei der Mouse
 ; Abfrage
  
 If TKC<TickDammy
    TKC=TickDammy+TKT
    If CamMoveX.f<0
      CamMoveX.f + Thrust.f/2
      If CamMoveX.f>0
        CamMoveX.f=0
      EndIf
    EndIf
    If CamMoveX.f>0
      CamMoveX.f - Thrust.f/2
      If CamMoveX.f<0
        CamMoveX.f=0
      EndIf
    EndIf
    If CamMoveZ.f<0
      CamMoveZ.f + Thrust.f/2
      If CamMoveZ.f>0
        CamMoveZ.f=0
      EndIf
    EndIf
    If CamMoveZ.f>0
      CamMoveZ.f - Thrust.f/2
      If CamMoveZ.f<0
        CamMoveZ.f=0
      EndIf
    EndIf
    If bbkeydown(#Key_S)
      If CamMoveZ.f>-MaxSpeedZ.f
        CamMoveZ.f - Thrust.f
      EndIf  
    ElseIf bbkeydown(#Key_W)
      If CamMoveZ.f<MaxSpeedZ.f
        CamMoveZ.f + Thrust.f
      EndIf
    ElseIf bbkeydown(#Key_A)
      If CamMovex.f>-MaxSpeedX.f
        CamMovex.f - Thrust.f
      EndIf
    ElseIf bbkeydown(#Key_D)
      If CamMovex.f<MaxSpeedX.f
        CamMovex.f + Thrust.f
      EndIf
    EndIf 
  EndIf
  
  ; Die Mouse bewegt die Camera
  
  MBR=bbmousedown(#MOUSE_RIGHTBUTTON)
  If MDC<TickDammy
    MDC=TickDammy+MDT
    If MBR And MBF
      MDX=(ScreenX/2)-bbMouseX()
      MDY=(ScreenY/2)-bbMouseY()
      bbmovemouse(ScreenX/2, ScreenY/2)
    ElseIf MBR And MBF=0 
      bbmovemouse(ScreenX/2, ScreenY/2)
      MDC=TickDammy-1 
      MBF=1
    Else
      MDX=0
      MDY=0
      MBF=0
    EndIf
  EndIf
  
  CamRX=(MDY/20)*alpha.f*-1 
  CamRy=(MDX/20)*alpha.f 
    
  bbmoveentity(cam,CamMoveX,0,CamMoveZ)
  bbturnentity(cam,CamRX,CamRY,0)
  
  ; Hir werden alle Objecte Bewegt.
  
  For i1 = 0 To 2000
    bbturnentity(cubs(i1),0.1,0.1,0)
  Next 
  
Project2DLoop.pbi

Code: Alles auswählen

;
; Capter 6
;

If CodeWin=0

  TextYCount=30
  TextYPix=15
  
  bbcolor($FF,$FF,$FF)
  bbtext(10,TextYCount,"Alpha = "+StrF(Alpha,3))          :TextYCount+TextYPix
  bbtext(10,TextYCount,"MDX   = "+StrF(MDX,3))            :TextYCount+TextYPix
  bbtext(10,TextYCount,"MDY   = "+StrF(MDY,3))            :TextYCount+TextYPix
  bbtext(10,TextYCount,"CamMoveX   = "+StrF(CamMoveX,3))  :TextYCount+TextYPix
  bbtext(10,TextYCount,"CamMoveZ   = "+StrF(CamMoveZ,3))  :TextYCount+TextYPix
  bbcolor($FF,$0,0)
  bbtext(10,TextYCount,"Use WASD for Move and Left MB to Rotate Cam")  :TextYCount+TextYPix

EndIf

; Dies ist ein wenig Monitoring. Damit wir sehen welche Variablen welche Werte annehmen.

Dieser Capter bringt nicht wirklich etwas neues. Aber die WASD
Steuerung macht lust auf mehr. Wie schon gesagt. Mit wenigen
handgriffen lassen sich die standart Problem beim programieren
von Spielen einfach lösen. Ich werde nicht jeden einzelnen Befehl
kommentieren. Wer mer über den Befehlsumfang wissen möcht.
Kann die Offizielle Englische hilfe zu rate ziehen. Wer es lieber auf
Deutsch mag. Die BlitzBasic Community hat eine Actuelle Deutsche
Hilfe am start.

http://www.optima-code.ch/PB/capter-006.zip
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo...

für diejenigen die fragen zum Code oder der Funktion einzelner Code
Segmente haben. Hir einfach peer Mail die Fragen stellen. PM möchte ich
eigentlich nicht, da ich die Antworten auf relevante Fragen sowiso hir Posten
würde.

Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo ....

wider einen vorgeschmack aufs nächste Capter gefällig .... OK
Sternen Flug....... so simple und einfach ...... in 3 Minuten.

http://www.optima-code.ch/PB/v2.avi

Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo ....

was mich am meisten stört ist, das B3D keine Gatget Handler für den
Close Botton anbietet. Und beim beänden des Programmes über den Botton
gibts immer den unschönen Programm lost Requester. Da könnte man
glatt auf die Idee kommen den bbSetB3Dhwnd() befehl zu verwenden. Aber
leider gibt das schlussendlich nur frustration. Da es zwar Funktioniert.
Aber auch nicht fiel pracktischer ist. Die PB eigenen Tastatur und Mouse
Befehle funktionieren nur mit WindowEvent() und verursachen LAGs. Und die
B3D eigenen Befehle funktionieren nicht. Weil der Windows Fokus fehlt.

Mein Appell an die Profies hir. Ums Gut zu machen, müste man einen
CallBack an das B3D Screen Fenster anhängen. Wer sowas in der Tasche
hat .... bitte Posten.

Es gibt da eine CloseHandler.DLL ..... mit den Funktionen
InstallCloseHandler(Taste,FensterName)
DeInstallColseHandler()

Wenn das jemand kennt. Würde eine Beschreibung für PB fileicht
reichen.

Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo ..

Capter 7

So einen Sternen Flug effect ist mit der B3D Engine einfach zu realiseiren.
Dazu benötigen wir lediglich 2000 Kopierte Quader, die wir etwas in Flug-
Richtung in die länge ziehen. Und dann werden sie Zufällig vor der Kamera
plaziert. Dann bewegen sich alle in richtung Kammera und werden neu
positioniert wenn sie sich hinter der Kammera befinden. Dabei schiben wir
diese lediglich auf der Z Achse wider ins Sichtfeld.

InitB3DDaten.pbi

Code: Alles auswählen

;
; Capter 007
;

; Mit cubs lassen sich tolle sachen machen ....
;
; sie sind herforagend dafür geeignet. Einen Sternen flug darzustellen.
; Wir könnten auch Sprites oder Spheren verwenden.Aber das machen wir
; zu einem Späteren Zeitpunkt.


Define Cube=bbcreatecube()
bbhideentity(cube)

Dim cubs(2000)

Define i1
For i1 = 0 To 2000
  cubs(i1)=bbcopyentity(Cube)
  
  ; 
  ; hir werden die Cubs in Z Richtung verlängert.
  ; Um den Stareffect noch zu verbessern.
  
  bbscaleentity(cubs(i1),0.1,0.1,1)
  
  ;
  ; Ausserdem müssen wir dem Entitymitteilen, das es sich nicht
  ; vom Licht beeinflussen lassen soll.
  
  bbentityfx(cubs(i1),1)
  
  bbmoveentity(cubs(i1),150-Random(300),150-Random(300),150-Random(300)+150)

Next 
;
; 
; 
Project3DLoop.pbi

Code: Alles auswählen

;
; Capter 7
;

; Hir wird nun einer der Klassischten Effekte nachgebildet die wol
; Jeder kennt. Ein Sternen flug animation.

For i1 = 0 To 2000
  
  ; Wir bewegen dazu die Cubs in die richtung der Camera.
  ; 
  bbmoveentity(cubs(i1),0,0,-1)
  
  ; und prüfen anschliessend ob der Stern schon ausser sichtweite ist,
  ; indem wir die Z Position kontrolieren.
  
  If bbentityZ(cubs(i1))<1.0
    
    ; befindet sich der Steren Cube schweif fast hinter der Camera
    ; So wird er nur in der Z Achse verschoben.
    
    bbpositionentity(cubs(i1),bbentityx(cubs(i1)),bbentityy(cubs(i1)),300)
  EndIf
  
  ;
  ; Da wir ja noch den Code View im hintergrund haben, Werden hir die Cubs
  ; In ihrer Farbe Invertiert.
  
  If CodeWin=0
    bbentitycolor(cubs(i1),$ff,$ff,$ff)
  Else
    bbentitycolor(cubs(i1),$0,$0,$0)
  EndIf
  
Next
;
; Dadurch entsteht dieser Animations effect.

Klein aber fein .......

http://www.optima-code.ch/PB/capter-007.zip
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hall....

wie wir B3D Objecte erzeugen,positionieren,verschieben,rotieren und
scalieren haben wir jetzt hinreichend durch.

Objecte wie der Quader den wir mit bbCreateCube() erzeugt haben,
bestehen zum einen aus dem Mesh das die Form des Objectes vorgibt,
sowie den Farb und Texture Daten. Es gibt Mesh bezogenen Befehle und
Object bezogene befehle. Ein Objecte wie die Camera oder der Cube
werden allgemein als Entity bezeichnet. Meshs werden auch offt Gitter
Objecte genannt. B3D verwendet die begriffe : GitterObject=Mesh und
Object=Entity. Es gibt Befehle zum verschieben,scalieren und rotieren die
einmal als Entity und einmal als Mesh Variante zur verfügung stehen. Für
weiterreichende Infos schaut euch bitte die BB Hilfe an.

Es gibt weitere Object Typen ausser Camera und Object (Mesh). Ein sehr
interesantes ist das Pivot. Es ist ein Object das nur aus einer
positionsangabe mit Rotations Informationen besteht. Also beim erzeugen
mit bbCreatePivot() erstmal nicht sichtbar. Pivote ist Französisch und
heist Drehpunkt. Jedes Object hat seine eigenen Drehung in XYZ. Es
kann also um sich selber rotieren. Im gegensatzt zu Ogre wird in B3D
immer gleich die Achse eines Objectes gedreht. Das bedeutet das eine
Rotation um die Z Achse eines Objectes .... immer eine Rotation um die Z
achse bleibt. Egal wie die Achsen für Y und Z stehen. Möchte man jetzt
aber ein Object nicht um die eigene Achse, sondern einer Position im
Raum drehen. Wie die Planeten um die Sonne. Dann benutzt man in B3D
die Pivots. Bei B3D können Objecte an andere angehängt werden. Dazu
mus nur der Handler des erzeugten Objectes als Pivot an das neu
erzeugte Object angehängt werden.

P1=bbCreatePivot()
C1=bbCreateCube(P1)

So wird sich natürlich nicht fiel anders bewegen als sonst. Da das Pivot
und der Cube den gleichen Koordinaten ursprung haben. Eine Rotation
mit p1 wird sich daher genauso verhalten wie mit c1. Erst wenn wir den
Cube relativ zum Pivot punkt verschieben. Werden wir eine änderung
feststellen. Dazu können wir bbMoveEntity() und bbTurnEntity() sowie
auch bbPositionEntity() anwenden. Natürlich kann man auch ein Entity als
Pivot angeben. Das ist manchmal nützlich. Da bestimmte befehle wie
ScaleEntity nicht mit Pivot funktionieren. Ist halt kein Mesh vorhanden
das Scaliert werden könnte.

Um Die handhabung von Pivots zu verdeutlichen. Werden wir im
nächstem Capter ein kleines Sonnensystem mit Planeten und Monden
erzeugen.
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo ...

Capter 8

InitB3DDaten.pbi

Code: Alles auswählen


;
; Capter 8
;

; eines der grösten Schwierigkeiten beim Arbeiten mit Pivots
; besteht darin. Die bewegungs abhängigkeiten zu reallisieren.
; Wird ein Pivot gedreht oder verschoben. So werden diese an
; die Angehängten Objecte weitergereicht. Ein angehängtes
; Object kann das Pivot an dem es hängt nicht beeinflussen.

bbcamerazoom(cam,1.5)

; Ein Coordinaten Kreutz, damit wir sehen können wie
; die Achsen stehen

Define XYZ_achsenkreutz=bbcreatecube()
bbscalemesh(XYZ_achsenkreutz,0.1,0.1,2)
bbentitycolor(XYZ_achsenkreutz,$ff,0,0)
i=bbcreatecube(XYZ_achsenkreutz)
bbscalemesh(i,2,0.1,0.1)
bbentitycolor(i,$0,$ff,0)
i=bbcreatecube(XYZ_achsenkreutz)
bbscalemesh(i,0.1,2,0.1)
bbentitycolor(i,$0,$0,$ff)
bbhideentity(XYZ_achsenkreutz)

; ------------------------------

; Der Zentrale dre und angle punkt.

Define sonne=bbcreatesphere(16)
i=bbcopyentity(XYZ_achsenkreutz,sonne)

bbentityfx(sonne,1)
bbpositionentity(sonne,0,0,260)
bbscaleentity(sonne,10,10,10,1)
bbentitycolor(sonne,$ff,$ff,$0)
bbturnentity(sonne,15,0,0)

Define light=bbcreatelight(2,sonne)

; Der Planet wird erzeugt, und mit einem Angle Punkt
; an die Sonne gehefftet.

Define PlanetPivot=bbcreatepivot(sonne)
Define Planet=bbcreatesphere(16,PlanetPivot)
i=bbcopyentity(XYZ_achsenkreutz,Planet)

bbscaleentity(Planet,0.5,0.5,0.5)
bbmoveentity(Planet,0,0,10)

; Dann kommt der Mond an den Planeten ... der an der Sonne hängt

Define MondPivot=bbcreatepivot(Planet)
Define Mond=bbcreatesphere(16,MondPivot)
i=bbcopyentity(XYZ_achsenkreutz,Mond)

bbscaleentity(mond,0.2,0.2,0.2)
bbmoveentity(mond,0,0,3)

Project3DLoop.pbi

Code: Alles auswählen


;
; Capter 8
;
; Um besser zu sehen wie das mit den abhängigkeiten
; funktioniert, können wir die Rotation der Objecte
; selber dazuschalten. Ich habe die dazugehörigen
; Drehungen entgegen derer der Pivots eingestell.
; Dann kann man sehen wie die Rotationen sich Optisch
; gegenseitig aufheben. Oder verdoppeln.
; 
; F5 = Object Rotation entgegen der Pivot Rotation
; F6 = Object Rotation mit der Pivot Rotation

If bbKeydown(#KEY_F5)
  bbturnentity(Sonne,0,-0.2,0)
  bbturnentity(Planet,0,2,0)
ElseIf bbKeydown(#KEY_F6)
  bbturnentity(Sonne,0,0.2,0)
  bbturnentity(Planet,0,-2,0)
EndIf

bbturnentity(PlanetPivot,0,0.2,0)
bbturnentity(MondPivot,0,-2,0)

Spätestens hir wird auffallen , das sich im FrameWork etwas
geändert hat. Die WASD Steuerung wurde ins FrameWork aufgenommen
und eine Rotation um die Z Achse der Camera hinzugefügt. Daher
QWEASD Steuerung :-)

Project2DLoop.pbi

Code: Alles auswählen


;
; Capter 8
;

If CodeWin=0

  bbtext(10,30," F5 = Rotate Object +")
  bbtext(10,45," F6 = Rotate Object -")
  bbtext(10,60," Use QWEASD to move camera" )
  bbtext(10,75," Use mouse and RMB rotate camera" )

EndIf

http://www.optima-code.ch/PB/capter-008.zip
Zuletzt geändert von tft am 18.01.2009 20:01, insgesamt 1-mal geändert.
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Benutzeravatar
tft
Beiträge: 605
Registriert: 08.09.2004 20:18
Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
Wohnort: Dachsen
Kontaktdaten:

Beitrag von tft »

Hallo ...

Capter 9

Will man Rotation eines Objectes mit Angelpunkt vom Pivot
unabhängig verändern. Das machen wir dan so:

InitB3DDaten.pbi

Code: Alles auswählen

;
; Capter 9
;

; offt ist es aber wichtig.... den drehpunkt zwar an einem
; Object festzumachen. Aber die Rotation des Objectes soll
; das angehängte object nicht beeinflussen. Dann muss man
; das Pivot manuell an die position des Objectes anpassen.

; Dabei stellt sich dann natürlich heraus. Das die Scalierungen
; nicht mer passen. Daher werden wir 2 verschiedene Scalierungen
; vorbereiten.

bbcamerazoom(cam,1.5)

Define XYZ_achsenkreutz=bbcreatecube()
bbscalemesh(XYZ_achsenkreutz,0.1,0.1,2)
bbentitycolor(XYZ_achsenkreutz,$ff,0,0)
i=bbcreatecube(XYZ_achsenkreutz)
bbscalemesh(i,2,0.1,0.1)
bbentitycolor(i,$0,$ff,0)
i=bbcreatecube(XYZ_achsenkreutz)
bbscalemesh(i,0.1,2,0.1)
bbentitycolor(i,$0,$0,$ff)
bbhideentity(XYZ_achsenkreutz)

Define sonne=bbcreatesphere(16)
i=bbcopyentity(XYZ_achsenkreutz,sonne)

bbentityfx(sonne,1)
bbpositionentity(sonne,0,0,260)
bbscaleentity(sonne,10,10,10,1)
bbentitycolor(sonne,$ff,$ff,$0)
bbturnentity(sonne,15,0,0)

Define light=bbcreatelight(2,sonne)

; dazu lassen wir die Bindung an die Sonne weg

Define PlanetPivot=bbcreatepivot()
Define Planet=bbcreatesphere(16,PlanetPivot)
i=bbcopyentity(XYZ_achsenkreutz,Planet)

;bbscaleentity(Planet,0.5,0.5,0.5)
;bbmoveentity(Planet,0,0,10)
bbscaleentity(Planet,5,5,5)
bbmoveentity(Planet,0,0,100)

; sowie die Bindung an den Planeten

Define MondPivot=bbcreatepivot()
Define Mond=bbcreatesphere(16,MondPivot)
i=bbcopyentity(XYZ_achsenkreutz,Mond)

;bbscaleentity(mond,0.2,0.2,0.2)
;bbmoveentity(mond,0,0,3)
bbscaleentity(mond,2,2,2)
bbmoveentity(mond,0,0,30)


Project3DLoop-pbi

Code: Alles auswählen

;
; Capter 9
;
; Dafür müssen wir an dieser Stelle die Objecte Manuell nachfüren.
;

If bbKeydown(#KEY_F5)
  bbturnentity(Sonne,0,-0.2,0)
  bbturnentity(Planet,0,2,0)
ElseIf bbKeydown(#KEY_F6)
  bbturnentity(Sonne,0,0.2,0)
  bbturnentity(Planet,0,-2,0)
EndIf

bbpositionentity(PlanetPivot,bbentityx(Sonne,1),bbentityy(Sonne,1),bbentityz(Sonne,1))
bbpositionentity(MondPivot,bbentityx(Planet,1),bbentityy(Planet,1),bbentityz(Planet,1))

bbturnentity(PlanetPivot,0,0.2,0)
bbturnentity(MondPivot,0,-2,0)


Im nächsten Capter werden wir uns mal den Befehl bbEntityOrder()
genauer ansehen. Dies ist ein sehr mächtiger befehl. Damit lassen
sich im gegensatz zu Ogre die Reihenfolgen festlegen in dehnen die
Objecte gerendert werden sollen. Damit lassen sich tolle Effecte machen.
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak :-)
Antworten