Kamera: Winkelkontrolle
Übersicht

kol16Betreff: Kamera: Winkelkontrolle |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Blitz-Community.
Habe im Forum gesucht, aber keine ähnliche Fragestellung gefunden. Das Programm ist eine Art Railshooter. Die Kamera befindet sich hinter einem Ball und hat mehrere Zustände (links vom Ball / darüber / darunter / etc.), es soll jedoch vermieden werden, dass die Kamera in irgend einer Weise vor den Ball kommt. Beim Wechsel der Zustände (sehr anfängermäßig programmiert, gebe ich zu, aber ich habe noch nie vergleichbares gemacht) passiert es manchmal, dass die Kamera ausrutscht und total frei herumschwingt bis sie sich wieder gefangen hat. Schlimm ist auch, dass ich beim Reset nicht auf 0 sondern auf zwischen -1 und 1 resetten muss, sonst geht der Winkel ins negative und dann stimmt der ganze mechanismus nicht mehr und die kamera pendelt herum. Dann ist jedoch der Horizont auch im normalzustand Schief ![]() ![]() ![]() Hier eine heruntergebrochene Demonstration meiner Lösung. Manchmal dauert es ein bisschen, bis sich ein Problem auftut. Vielen Dank für die Mühe, kol16 Code: [AUSKLAPPEN] SeedRnd MilliSecs()
Graphics3D 800, 600, 0, 2 SetBuffer BackBuffer() Global Thresholdtimer Global Threshold = 0 Global cammode = 5 Global Camtext$ Global light = CreateLight(1) LightColor light, 0, 255, 255 Global Ball = CreateSphere(32) Global Pivot = CreatePivot() Global Cam = CreateCamera() PositionEntity Cam,0, 0, -20 EntityParent Cam, Pivot Global plane = CreatePlane() EntityAlpha plane, 0.5 PositionEntity plane, 0, -2, 0 CreateMirror(plane) ;______ HAUPTSCHLEIFE ;____________________ While Not KeyHit(1) Cls camctrl() RenderWorld() Text 10, 10, Camtext$ + "(" + (7-threshold) + ")" Flip Wend End Function CamCtrl() If MilliSecs()-Thresholdtimer > 800 Then Threshold = Threshold + 1 Thresholdtimer = MilliSecs() EndIf If Threshold > 7 Then cammode = Rand(1,6): Threshold = 0 If cammode = 1 Then Camtext = "Von Rechts" If EntityYaw#(pivot) < 89 Then TurnEntity Pivot, 0, 0.3, 0 reset(1) reset(3) ElseIf cammode = 2 Camtext = "Von Links" If EntityYaw#(pivot) > - 89 Then TurnEntity Pivot, 0, -0.3, 0 reset(1) reset(3) ElseIf cammode = 3 Camtext = "Von Oben" If EntityPitch#(pivot, 1) < 89 Then TurnEntity Pivot, 0.3 , 0, 0 reset(2) reset(3) ElseIf cammode = 4 Camtext = "Von Unten" If EntityPitch#(pivot) > -89 Then TurnEntity Pivot, -0.3 , 0, 0 reset(2) reset(3) ElseIf cammode = 5 Camtext = "Von Hinten" reset(1) reset(2) reset(3) ElseIf cammode = 6 TurnEntity Pivot, 0 , 0, 0.3 Camtext = "Von Hinten + Roll" reset(1) reset(2) EndIf End Function Function reset(angle) If angle = 1 Then If EntityPitch#(pivot) < -1 Then TurnEntity Pivot, 0.3, 0, 0 ElseIf EntityPitch#(pivot) > 1 Then TurnEntity Pivot, -0.3, 0, 0 EndIf EndIf If angle = 2 Then If EntityYaw#(pivot) < -1 Then TurnEntity Pivot, 0, 0.3, 0 ElseIf EntityYaw#(pivot) > 1 Then TurnEntity Pivot, 0, -0.3, 0 EndIf EndIf If angle = 3 Then If EntityRoll#(pivot) < 1 Then TurnEntity Pivot, 0, 0, 0.3 ElseIf EntityRoll#(pivot) > 1 Then TurnEntity Pivot, 0, 0, -0.3 EndIf EndIf End Function |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich bin mir nicht ganz sicher, ob ich verstanden habe, was Du erreichen willst. Deshalb plaudere ich jetzt einfach mal drauf los:
Soll Deine RESET-Routine, die Werte wieder auf 0 fahren? Das erreichst Du so nicht, besser wäre die Schrittweite und die Grenzwerte gleich zu setzen, oder? Code: [AUSKLAPPEN] If EntityPitch#(pivot) < -0.3 Then
TurnEntity Pivot, 0.3, 0, 0 ElseIf EntityPitch#(pivot) > 0.3 Then TurnEntity Pivot, -0.3, 0, 0 Else TurnEntity Pivot, -EntityPitch(Pivot),0,0 EndIf Außerdem würde ich ein weiteres ELSE einführen wollen, dass den Wert genau auf 0 zurücksetzt. Ohne diese Änderungen bleiben nach einiger Zeit alle Winkel im RESET-Zustand irgendwo zwischen -0.7 und 0.7, was dann bei komplexen Bewegungen mehrerer Achsen zu scheinbar sonderbaren Bewegungen führt. Gerade der Roll hat es immer in sich. Du bist aber schon sicher, dass Du diese Drehung der Kamera wirklich willst? Es ist ja, als ob man den Fotoapparat schief hält. Danach gehen auch alle Yaw und Pitch-Bewegungen in "unerwartete" Richtungen. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group