ich habe zwei Fragen bezüglich der Rotation im 3D-Raum
Mein erstes Problem ist das ich eine simple Flugzeugsteuerung haben möchte, nur spielt da die Engine nicht mit...
eigentlich müsste es ja ganz einfach sein:
x-Achse ändern für hoch runter
y-Achse um das Flugzeug nach Links und Rechts zu drehen
z-Achse für eine Rolle
nur leider funktioniert dass nicht da die x und z Achse mal um 180° steigen und wieder sinken...
wahrscheinlich muss ich die Rotation mit einer Matrix oder so was berechnen nur leider habe ich keine Ahnung auf diesem Gebiet...
mein zweites Problem:
Ich möchte ein Mesh passend zu einem anderen Mesh hin/mitdrehen wie in diesem Code nur im 3-Dimensionalen z.B. um ein Objekt aus verschiedenen zusammenbauen zu können.
wahrscheinlich benötige ich dort auch Matrizen wie bei meiner ersten Frage
Code: Alles auswählen
InitSprite()
InitKeyboard()
OpenWindow(0,0,0,800,600,"test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),0,0,800,600,0,0,0)
player_x=400
player_y=300
player_ro=0
Macro GX(w)
Cos((w-90)/180*#PI)
EndMacro
Macro GY(w)
Sin((w-90)/180*#PI)
EndMacro
Repeat
FlipBuffers()
ClearScreen(0)
ExamineKeyboard()
If KeyboardPushed(#PB_Key_A)
player_ro-5
If player_ro<0:player_ro+360:EndIf
EndIf
If KeyboardPushed(#PB_Key_D)
player_ro+5
If player_ro>360:player_ro-360:EndIf
EndIf
If KeyboardPushed(#PB_Key_W)
player_x+GX(player_ro)*3
player_y+GY(player_ro)*3
EndIf
If KeyboardPushed(#PB_Key_S)
player_x-GX(player_ro)*3
player_y-GY(player_ro)*3
EndIf
If StartDrawing(ScreenOutput())
; player
Circle(player_x, player_y, 10, #Red)
; in welche richtung man schaut
bufx= GX(player_ro)*10
bufy= GY(player_ro)*10
Circle(player_x+bufx, player_y+bufy, 5, #Blue)
; linker arm
bufx= GX(player_ro-90)*24
bufy= GY(player_ro-90)*24
Circle(player_x+bufx, player_y+bufy, 5, #Green)
; linker arm2
bufx+GX(player_ro)*16
bufy+GY(player_ro)*16
Circle(player_x+bufx, player_y+bufy, 5, #Green)
; rechter arm
bufx= GX(player_ro+90)*24
bufy= GY(player_ro+90)*24
Circle(player_x+bufx, player_y+bufy, 5, #Green)
; rechter arm2
bufx+GX(player_ro)*16
bufy+GY(player_ro)*16
Circle(player_x+bufx, player_y+bufy, 5, #Green)
DrawText(5, 5, "rotation: "+Str(player_ro))
StopDrawing()
EndIf
Until WindowEvent()=#PB_Event_CloseWindow Or KeyboardReleased(#PB_Key_Escape)
Endmfg
kevin