Strona główna
Witaj, nieznajomy!

Kamera (CLEO/SCM)

Umiejętne manipulowanie kamerą podczas tworzenia cutscenek to podstawa. W tym tutorialu postaram się Wam przybliżyć sposoby zarządzania kamerą. Na wstępie chciałbym zaznaczyć, że przy każdym opcodzie jest link do jego szczegółowego opisu w naszej bazie opcodów. Tam znajdziecie szczegółowe opisy parametrów każdej z funkcji.

Ustawienie kamery

Podczas tworzenia cutscenek zazwyczaj jest potrzeba ustawienia kamery w konkretnym miejscu. Do tego wystarczy jeden opcode, który jako parametry przyjmuje współrzedne XYZ oraz rotację XYZ.

Kod:
015F: set_camera_position 664.9277 -479.6112 16.1668 rotation 0.0 0.0 0.0

Szczegółowy opis opcode'u 015F.


Oprócz ustawienia kamery w danych współrzędnych, można ją też "przyczepić" do pojazdu lub aktora:

Kod:
0679: put_camera_on_car 161@ with_offset 0.0 -2.0 $Z_CAMERA rotation 0.0 0.0 204@ tilt 0.0 mode 2

Szczegółowy opis opcode'u 0679.

Kod:
067C: put_camera_on_actor $PLAYER_ACTOR with_offset 0.0 2.0 -2.0 rotation 0.0 0.0 0.0 tilt 0.0 mode 2

Szczegółowy opis opcode'u 067C.


Fokus kamery

Domyślnie, kamera skupia się na punkcie, który jest wyznaczony przez obrót kamery. Samodzielne obliczanie obrotu jest uciążliwe i mało dynamiczne. Z pomocą przychodzą funkcje, które umożliwiają ustawienie fokusa kamery na konkretny punkt, pojazd lub aktora.

Fokus na konkretny punkt:
Kod:
0160: set_camera_point_at 665.8948 -479.5685 16.4175 mode 2

Szczegółowy opis opcode'u 0160.

Fokus na pojazd:
Kod:
0158: camera_on_car 34@ 18 2

Szczegółowy opis opcode'u 0158.

Fokus na aktora:
Kod:
0159: camera_on_ped 215@ 15 2

Szczegółowy opis opcode'u 0159.


Płynne przejścia kamery

W celu płynnego przemieszczenia kamery z jednego punktu do drugiego można użyć poniższego opcode'u:
Kod:
0936: set_camera 2358.656 -1246.348 28.7884 position_to 2358.656 -1246.348 28.7884 time 7000 drop_mode 1
0160: set_camera_point_at 665.8948 -479.5685 16.4175 mode 1

Szczegółowy opis opcode'u 0936.

Należy zauważyć, że jeśli chcemy przenieść kamerę zachowując fokus na konkretny punkt, trzeba ponownie użyć opcode'u 0160 (set_camera_on_point) z trybem ustawionym na 1 (mode 1).


Przybliżanie/Oddalanie

Nieraz chcemy przedstawić coś w większym powiększeniu, więc zamiast ręcznie ustawiać nowe współrzędne kamery, można skorzystać z opcode'u do przybliżania/oddalania obrazu:
Kod:
0922: set_camera_zoom_in_factor 70.0 out_factor 100.0 timelimit 10000 mode 1

Szczegółowy opis opcode'u 0922.


Przywracanie kamery

Po zakończeniu cutscenki należy ustawić kamerę z powrotem na domyślną (za graczem). Można ją przywrócić płynnym przejściem z naszej kamery do domyślnej:
Kod:
015A: restore_camera


lub natychmiastowo, bez płynnego przejścia:
Kod:
02EB: restore_camera_with_jumpcut



Funkcje sprawdzające zakończenie przejścia

Kiedy korzystamy z płynnych przejść, czasem chcemy wykonać kolejne operacje dopiero po zakończeniu ruchu kamery. Warto na końcu swojego skryptu dodać dwie procedury, które później można wykorzystać w dowolnej części kodu:
Kod:
:CameraPositionManipulated
wait 
0
if
  
0933: camera_position_manipulated
jf 
@CameraPositionManipulated
return

:CameraTargetPointManipulated
wait 
0
if
  
0934: camera_target_point_manipulated
jf 
@CameraTargetPointManipulated
return


W kodzie wystarczy odwołać się do tych procedur przy pomocy instrukcji gosub. Przykład:
Kod:
0936: set_camera 2358.656 -1246.348 28.7884 position_to 2358.656 -1246.348 28.7884 time 7000 drop_mode 1
gosub 
@CameraPositionManipulated

0160: set_camera_point_at 665.8948 -479.5685 16.4175 mode 1
gosub 
@CameraTargetPointManipulated


Jest to bardziej efektywny sposób, niż stosowanie instrukcji wait. Nazwy procedur można oczywiście zmienić na dowolne inne.


Inne funkcje związane z kamerą

Pozostałe funkcje związane z kamerą, które nie znalazły się w tym tutorialu, można znaleźć w naszej bazie opcodów w kategorii "Kamera":

Przejdź do bazy opcodów
Dodane przez: MakG
Created & Powered by MakG
Wszelkie prawa zastrzeżone