2011-07-12 7 views
9

Aktualnie programuję mały silnik 3D i zastanawiałem się, dlaczego powinienem użyć współrzędnych przestrzeni oczu w module cieniowania fragmentów. Aby to zrobić, muszę umieścić moją matrycę kamery w mundurze, aby przekształcić pozycje światła we współrzędnych oczka i macierz camera_normal, aby umieścić kierunki światła we współrzędnych oka. Dlaczego wszyscy używają tych współrzędnych? Nie widzę żadnej przewagi, więc jeśli mógłbyś pomóc mi zrozumieć ten wybór, byłbym wdzięczny. Dzięki :)dlaczego powinniśmy używać współrzędnych przestrzeni oczu podczas etapu fragmentacji w potoku OpenGL?

Odpowiedz

7

Istnieje kilka powodów służy oko-space:

  1. Jest to wygodne. Jest to dobrze zdefiniowana przestrzeń, która istnieje, i którą oblicza się na drodze do transformacji pozycji.
  2. Ma taką samą skalę jak przestrzeń światowa, ale nie ma problemów z przestrzenią światową. Przestrzeń oczu jest zawsze (względnie) bliska zeru (ponieważ oko jest na poziomie 0), więc jest to rozsądna przestrzeń dla posiadania jawnej macierzy przekształceń. Skala jest ważna, ponieważ możesz podać odległości (takie jak warunki tłumienia światła), które są obliczane w przestrzeni świata. Odległości nie zmieniają się w przestrzeni oczu.
  3. Musisz mimo wszystko przekształcić go w przestrzeń liniową. Robienie oświetlenia, szczególnie przy attentuacji, w nieliniowej przestrzeni, takiej jak przestrzenie post-projekcyjne, jest ... trudne. Musiałbyś więc dostarczyć normalne i pozycje w jakiejś liniowej przestrzeni, więc równie dobrze może być przestrzenią oczu.
  4. Wymaga to najmniejszej liczby transformacji. Przestrzeń oczu to przestrzeń tuż przed transformacją projekcji. Jeśli musisz odwrócić przekształcenie do przestrzeni liniowej (na przykład odroczone renderowanie), przestrzeń oczna to taka, która wymaga najmniejszej liczby operacji.
4

Nie musisz dostarczać matrycy kamery do modułu cieniującego i wykonywać tam transformację położenia światła i kierunku. W rzeczywistości jest to raczej nieefektywne, ponieważ robimy te same operacje na tych samych numerach raz za razem dla każdego wierzchołka.

Po prostu przekształć pozycję światła i kierunek strony procesora i dostarczaj łatwo przekształcalnych parametrów światła do modułu cieniującego. Jednak obliczenia oświetlenia są jeszcze bardziej zwięzłe w przestrzeni oka, szczególnie jeśli chodzi o normalne mapowanie. Ale i tak musisz przekształcić wszystko w przestrzeń widzenia, ponieważ normalne nie są transformowane przez transformację perspektywy (chociaż pozycje wierzchołków mogą zostać bezpośrednio przekształcone w przestrzeń klipu).

Powiązane problemy