3D Rotation
Verfasst: 27.10.2012 02:19
Hi,
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
möchte mich jetzt schon mal Bedanken
mfg
kevin
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