Kreisbahn im 3D Raum berechnen (Kamera und Entity)
Verfasst: 26.05.2013 16:17
Hallo,
ich habe folgendes vor. Mit der 3D Engine von Purebasic will ich ein Entity direkt vor der Kamera immer anzeigen. Durch bewegen der Maus (Rechts-Links und Rauf-Runter) wird die Kamera geschwenkt (rotiert), dabei soll das Entity immer an der gleichen Stelle vor der Kamera angezeigt werden. Das versuche ich über eine Kreisbahnberechnung zu lösen, hier der Code:
Alle Variablen sind Floats. Wenn ich die Maus nur rechts oder links oder oben oder unten bewege funktioniert das auch wunderbar. Wenn ich aber nach links und unten schwenke funktioniert das nicht mehr. Ich bin ratlos und würde mich über Hilfe freuen.
Ich habe auch schon mit der Kameraposition und dem Richtungsvektor (CameraDirectionX()) rumprobiert, evtl. ließe sich das darüber lösen, aber ich habe bisher nur rumprobiert.
Danke schonmal für alle Hinweise.
ich habe folgendes vor. Mit der 3D Engine von Purebasic will ich ein Entity direkt vor der Kamera immer anzeigen. Durch bewegen der Maus (Rechts-Links und Rauf-Runter) wird die Kamera geschwenkt (rotiert), dabei soll das Entity immer an der gleichen Stelle vor der Kamera angezeigt werden. Das versuche ich über eine Kreisbahnberechnung zu lösen, hier der Code:
Code: Alles auswählen
cpradiusz = Player\pos\z - Player\cam\z ;=4000
cpradiusy = Player\pos\y - Player\cam\y ;=0
cpradiusx = Player\pos\x - Player\cam\x ;=0
; Player\camangle\x + y + z sind Winkelangaben 0-359 Grad; x = Rauf oder Runter, y = Links oder Rechts
RotateCamera(#Cam_Main, Player\camangle\x, Player\camangle\y, 0, #PB_Absolute)
Player\pos\x = CameraX(#Cam_Main) + (cpradiusz * Sin(Radian(Player\camangle\y)))
Player\pos\y = CameraY(#Cam_Main) + (cpradiusz * Sin(Radian(Player\camangle\x)))
player\pos\z = CameraZ(#Cam_Main) + (cpradiusz * Cos(Radian(Player\camangle\x)) * Cos(Radian(Player\camangle\y)))
Ich habe auch schon mit der Kameraposition und dem Richtungsvektor (CameraDirectionX()) rumprobiert, evtl. ließe sich das darüber lösen, aber ich habe bisher nur rumprobiert.
Danke schonmal für alle Hinweise.