Kameraflug
Übersicht

tmode00Betreff: Kameraflug |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo zusammen,
ich möchte euch auf diesem Wege ein kleines Script mit auf den Weg geben, mit dem Ihr einen Kameraflug in ein 3d-Spiel einbauen könnt. 1. Ein paar Konstanten deklarieren Code: [AUSKLAPPEN] Const record_mode = 0
Const max_frames = 6000 ;0 = Playmodus ;1 = Aufnahmemodus 2. Kamera erstellen: Code: [AUSKLAPPEN] ;camera
Global camera = CreateCamera() MoveEntity(camera,0,0,-3) 3. Das Tcamani - Type speichert einzelne Framedaten (also Kamera x,y,z und die Drehung) Code: [AUSKLAPPEN] Type Tcamani
Field x#,y#,z#,pitch#,yaw#,roll# End Type Global camani.Tcamani 4. Die Aufnahmefunktion Wichtig: Für eine Aufnahme muss vor dem Start der Aufnahmemodus record_mode auf 1 gestellt werden. Damit ist das Programm für diesen einen Start auf Aufnahme gestellt. Bitte im Ordner der Programm .bb - Datei bzw. Exe einen Unterordner Media erstellen. Code: [AUSKLAPPEN] Global record_frames Function record_cam() If (record_mode = 1) If (record_frames = 0) Then record_frames = 1 ElseIf (record_frames < max_frames) Then If (KeyDown(45)) Then record_frames = record_frames + 1 camani.Tcamani = New Tcamani camani\x# = EntityX(camera) camani\y# = EntityY(camera) camani\z# = EntityZ(camera) camani\pitch# = EntityPitch(camera) camani\yaw# = EntityYaw(camera) camani\roll# = EntityRoll(camera) EndIf EndIf ;save type If (KeyHit(47)) Then camfile = WriteFile(".\media\cam.ttl") For camani.Tcamani = Each Tcamani WriteString(camfile,Str(camani\x#)) WriteString(camfile,Str(camani\y#)) WriteString(camfile,Str(camani\z#)) WriteString(camfile,Str(camani\pitch)) WriteString(camfile,Str(camani\yaw)) WriteString(camfile,Str(camani\roll)) Next CloseFile(camfile) End EndIf EndIf End Function 5. Einlesen der cam.ttl (der im .\Media Ordner nach einer Aufnahme gespeicherten Kamerafahrtdatei) Code: [AUSKLAPPEN] Function read_cam_intro()
If (record_mode = 0) Then Local camfile = ReadFile(".\media\cam.ttl") While Not Eof(camfile) record_frames = record_frames + 1 camani.Tcamani = New Tcamani camani\x# = Float(ReadString(camfile)) camani\y# = Float(ReadString(camfile)) camani\z# = Float(ReadString(camfile)) camani\pitch = Float(ReadString(camfile)) camani\yaw = Float(ReadString(camfile)) camani\roll = Float(ReadString(camfile)) Wend CloseFile(camfile) EndIf End Function 6. Die Abspielfunktion Code: [AUSKLAPPEN] Global play_frames = 0;-1 schalten intro ab Function play_cam() If (record_mode = 0) Then If (play_frames = 0) Then camani.Tcamani = First Tcamani play_frames = 1 Else If (play_frames < max_frames-1) play_frames = play_frames + 1 camani = After camani Else play_frames = 0 Return EndIf EndIf PositionEntity(camera,camani\x# ,camani\y#,camani\z#) RotateEntity(camera,camani\pitch,camani\yaw,camani\roll) EndIf End Function 6. Generelles Kamera-Movement mit Pfeiltasten, Punkt, Komma, PgUp, PgDown, Pos1, Ende Code: [AUSKLAPPEN] Function movecam()
If KeyDown(200) Then MoveEntity camera,0,0,.07;nach z+ If KeyDown(208) Then MoveEntity camera,0,0,-.07;nach z- If KeyDown(201) Then TurnEntity camera,-.4,0,0;pgup If KeyDown(209) Then TurnEntity camera,.4,0,0;pgdown If KeyDown(203) Then TurnEntity camera,0,.4,0;links If KeyDown(205) Then TurnEntity camera,0,-.4,0;rechts If KeyDown(199) Then MoveEntity camera,0,.07,0;hoch If KeyDown(207) Then MoveEntity camera,0,-.07,0;runtedr If KeyDown(51) Then MoveEntity camera,-.07,0,0;X-links If KeyDown(52) Then MoveEntity camera,.07,0,0;X-rechts End Function 7. Programmstart -^ Alles obendrüber sind nur die notwendigen Funktionen Code: [AUSKLAPPEN] If (record_mode = 0) Then read_cam_intro()
While Not KeyHit(1) movecam() record_cam() play_cam() RenderWorld() UpdateWorld() Text 1,1,record_frames Flip Wend Wie gehe ich zum Aufnehmen vor? Nachdem das Script fertig ist kann die Aufnahme beginnen. Dazu einfach den Record_mode auf 1 setzen, die maximale Anzahl Frames (Standart 6000) setzen, starten. + Das Spiel startet + Kameratestflug mit den Pfeiltasten starten (zb. Ausrichten, von z:50 bis z:-50 fahren) + Wenn Flug ok wieder zur Ausgangsposition fahren + X drücken (Frames zählen oben links nach oben - solange X gedrückt nimmt es auf) + Gleichzeitig mit Pfeiltasten Strecke abfahren + X loslassen (CUT) Nun kann in Ruhe (Aufnahme pausiert, da X nicht mehr gedrückt) zur neuen Position gefahren werden (mit PgUp / Down Kamera drehen, auffahren mit Pos1, abfahren mit Ende -> (wie [wer es kennt] Conitec 3dGs Standartsteurung), Rest mit den Pfeiltasten. Wenn die neue Position erreicht (z.B. hoch über dem Spiel, Kamera schaut aus Vogelperspektive) kann nun wieder mit den Pfeiltasten ein Testlauf (z.B. nach unten Fliegen) gemacht werden. Dann wieder zurück, X gedrückt halten und wiederholen. Alle Scenen nun so aufnehmen bis oben 6000 (max_frames) steht und V zum speichern drücken. Anwendung schließt -> cam.ttl im ./media Ordner ist nun erstellt. Zum Abspielen: + Recordmode auf 0 setzen + Starten -> alle Szenen werden nach und nach abgespielt, direkt aneinander gereit. Dadurch entsteht eine Großartige Wirkung. Hier noch das komplette Script & eine Exe zum anschauen, wie es aussehen kann (minimales Beispiel): ![]() Viel Spaß und Liebe Grüße, Thomas S. |
||
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Cool!
Muss ich mir mal genaur anschauen, aber sicherlich praktisch ![]() mfg ozzi |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group