Autor Wątek: Menedzer kamery  (Przeczytany 811 razy)

Offline TDM

  • Użytkownik

# Marzec 20, 2011, 14:40:47
Witam!

Mam pytanie odnośnie zarządzania kamerą. Czy w waszej praktyce wystąpiła kiedyś konieczność posiadania kilku "kamer" i przełączania się pomiędzy nimi ? Nie mówię tu o FreeCam i tej normalnej używanej w grze?
Zastanawiam się nad napisaniem klasy menadzera kamer, i nie wiem czy to w ogóle ma jakiś sens...

Pozdrawiam.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Oti

  • Użytkownik

# Marzec 20, 2011, 14:53:55
Hm.. Kilka kamer może się przydać. Np. kiedy chcemy w miarę wygodnie(od strony kodu) zaimplementować możliwość zmieniania widoku przez gracza(jak w samochodówkach-kokpit, zderzak, zza samochodu, etc.), albo różne ficzery do silnika potrzebujące zmieniania macierzy projekcji i widoku, jak np. shadow mapping, czy cube mapping. Menedżer kamer to IMO za dużo. Ja właśnie implementuję w swoim silniku różne rodzaje kamer i robię to tak, że mam jedną bazową, abstrakcyjną klasę CAMERA, po której polimorficznie dziedziczą poszczególne rodzaje inny kamer (statyczna, FPP, TPP, etc.):
class FPPCAMERA : public CAMERA
{
public:
void Operate();
FPPCAMERA();
};
Metoda Operate jest do sterowania kamerą, a w konstruktorze klasa 'przekazuje się' do managera zasobów:
FPPCAMERA::FPPCAMERA()
{
(..)
core::ResourceManager.cameras.push_back(this);
(..)
}
, który przy zwalnianiu najprościej deletuje wszystkie wskaźniki z kontenera cameras.

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Marzec 20, 2011, 17:25:59
Ja nie jestem pewny i sam nigdy żadnego "managera kamer" nie napisałem, ale to wydaje się mieć sens. Moim zdaniem to co robi silnk 3D można trochę porównać do programów graficznych typu 3ds Max albo Maya, a tam na scenie w przestrzeni 3D zawieszone są różne rodzaje obiektów - siatki, efekty cząsteczkowe, krzywe - a także kamery. Jedną z nich można ustawić jako bieżąca i obraz z niej jest renderowany. Posiadanie równocześnie wielu kamer nabiera jeszcze więcej sensu, jeśli określimy, że w kamerze znajdują się parametry takie jak kąt widzenia albo jeśli kamera ma bieżący stan, np. pozycja i prędkość kiedy przesuwa się po krzywej.

Offline .

  • Użytkownik

# Marzec 20, 2011, 20:02:29
Każdy obiekt w przestrzeni 3D posiada zwykle pozycję i wektory (xyz) [macierz 4x4]. Oznacza to, że mamy już "prawie" kamerę. Jeśli dodatkowo będziemy mogli przypisać (lub podłączyć) do niego podstawowe parametry kamery, takie jak reprezentacja frustuma (wyrażona za pomocą macierzy 4x4), to już mamy kamerę :). Dzięki temu moglibyśmy "podglądać" każdy obiekt sceny, czy to lecącą kulę, leżący kamień, czy pojazd. W mojej opinii rozbudowany "manager kamer" jest potrzebny w większej produkcji :).