PB 4.3 und B3D Engine ( Für Anfänger und interesierte )
- 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:
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
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
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
- 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:
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
@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
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
- 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:
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
InitB3DDaten.pbi
Péroject3DLoop.pbi
Project2DLoop.pbi
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
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
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
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
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.
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
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
- 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:
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
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
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
- 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:
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
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
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
- 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:
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
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
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
- 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:
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
Project3DLoop.pbi
Klein aber fein .......
http://www.optima-code.ch/PB/capter-007.zip
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
;
;
;
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.
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
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
- 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:
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.
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
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
- 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:
Hallo ...
Capter 8
InitB3DDaten.pbi
Project3DLoop.pbi
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
http://www.optima-code.ch/PB/capter-008.zip
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)
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)
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
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
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
- 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:
Hallo ...
Capter 9
Will man Rotation eines Objectes mit Angelpunkt vom Pivot
unabhängig verändern. Das machen wir dan so:
InitB3DDaten.pbi
Project3DLoop-pbi
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.
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)
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
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