2010-11-20 14 views
7

Ponieważ warstwowe renderowanie za pomocą shadera geometrii w OpenGL wydaje się nieco podejrzane w przypadku niektórych sterowników/sprzętu, chciałbym zastąpić tę funkcję moim własnym rozwiązaniem. To przy użyciu dużej tekstury jako rendertarget, na przykład o rozdzielczości 300². Następnie wykonaj symulację renderowania warstwowego, renderując do 100 ½ fragmentów tekstury. Z tej rezolucji doprowadziłoby to 9 płytek/warstw, jak pokazano w poniższej makieta:Renderowanie na część tekstury

Tiles

pytanie brzmi; jak to zrobić z OpenGL? Podobno za pomocą shadera geometrii, który renderuje scenę do różnych płytek w jednym przejściu.?

Odpowiedz

2

Nie ma prostego sposobu na zrobienie tego. Możesz użyć modułu cieniującego geometrii do zhakowania go razem, ale najprawdopodobniej będzie to powolne, ponieważ musisz wykonać wiele instancji geometrii, a następnie użyć shaderów geometrii do cieniowania wierzchołków, ponieważ vertex shader jest poza grą.

Podstawowe podejście do problemu:

  • Leave vertex shader puste i po prostu wrócić wierzchołki niezmienionych
  • w geometrii cieniującego stworzenia 8 nowych przypadków każdego trójkąta (razem trzeba będzie 9 trójkąty)
  • Na każdym z trójkąty uruchamiają funkcję, która wyświetli trójkąt. Zgodnie z twoim zrzutem ekranu, będziesz potrzebował 9 różnych macierzy widoku, które zostaną przesłane do modułu cieniującego geometrii.
  • Teraz ułóż trójkąty tak, aby każdy z nich był renderowany na innej części obrazu. Zwróć uwagę, że po rzutowaniu współrzędne są w zakresie [-1; 1], więc musisz podzielić współrzędne każdego trójkąta przez 3, a następnie przesunąć odpowiednie trójkąty przez mnożenie 1/3.
  • Jeśli obliczysz cieniowanie phong na piksel, będziesz musiał wysłać położenie kamery do modułu cieniującego z każdym wierzchołkiem, ponieważ moduł cieniujący nie ma pojęcia o podzielonym ekranie i masz 9 różnych pozycji kamery.
  • +0

    Dzięki za dobrą odpowiedź. Może powinienem poczekać, aż twórca GPU zdobędzie ich sterownik (ATI). Więc obsługują renderowanie warstw do 'texture2Darray' zamiast tego. –

    +0

    Tak, zdecydowanie. Pytanie brzmi, czy ATI kiedykolwiek sprawi, że ich sterowniki będą działać poprawnie ... –

    Powiązane problemy