Autor Wątek: Zarządzanie obiektami sceny  (Przeczytany 1760 razy)

Offline LizarD

  • Użytkownik

# Kwiecień 18, 2011, 11:59:36
Witam!

Nie mam pomysłu zadządzać obiektami sceny. Sprawa wygląda tak: Mam model manager w którym przechowuję siatki modeli mam klasę object w której przechowuję adres do siatki i dodatkowe parametry ( pozycję obrót itp) No i klasę z sceną w której są umieszczane obiekty. Tylko teraz jest pewnien problem W scenie powinien byc jakiś podział na przestrzeń quadtree czy coś i tam powinny być wskaźniki do obiektów które są w sektorze, do tej pory mniej więcej mam zarys w głowie jak to powinno być ale dalej jest pewnien problem, scena ma być rysowana mniej więcej tak: gScene->Draw(); i żeby urzyć jakiś efekt post-process czy shadow maping musze mieć go wcześniej jakoś wpisay żeby klasa która rysuje obiekty wiedziała o co chodzi to jest jane i oczywiste tylko jak piszę sobie frameworka to chciał bym mieć mozliwość dodawania efektów bez grzebania się w całym jego kodzi tylko najlepiej w fukncjach onInit onDraw itp.
Mam nadzieje że wiecie o co chodzi...

Offline Mr. Spam

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

Offline Oti

  • Użytkownik

# Kwiecień 18, 2011, 15:39:45
Dodaj sobie system poleceń renderingu. Prosta struktura zawierająca informację o poleceniu renderingu, tzn. jaki mesh, jaki materiał, macierz świata, dodatkowe flagi(alphablending, oświetlenie, jakiś specyficzny shader, jaki postprocess) i renderuj wg nich, nie wg obiektów.

Offline LizarD

  • Użytkownik

# Kwiecień 20, 2011, 19:51:43
Jedynie co to nie wiem jak w argumentach tej funkcji przedstawić zmiene które ma ustawiać shader...

Offline Will

  • Użytkownik

# Kwiecień 20, 2011, 20:33:37
Jakiej funkcji?
Masz strukturę np:
struct RenderCommand
{
..
uint32 matID;
..
}

przy samym renderowaniu ustawiasz setMaterial(rendercommands[index].matID) a parametry dla shadera pobierane są z danego materiału.

Całość takiej struktury mogłaby wyglądać tak:

struct RenderCommand
{
   uint32          VertexBuffer;
   uint32          VertexDecl;
   uint32          numTri;
   uint32          numVerts;
   uint32          matID;
   uint32          transformID;
   PrimType     PrimitiveType;
   BlendType    BlendType;
};

Parametry dotyczące macierzy transformacji możesz przekazywać tak samo: setTransform(rendercommand[index].transformID). Proste i dobre rozwiązanie.


Offline LizarD

  • Użytkownik

# Maj 12, 2011, 22:24:16
Taką strukturę to ja mam już napisaną przekazuję ją do funkcji renderującej, mi chodziło o przekazywanie parametrów do shadera tzn rysuję obiekty różnymi efektami które potrzebują różnych parametrów i jak to napisać w owej funkcji rysującej

Offline FoToN

  • Użytkownik

# Maj 13, 2011, 16:05:23
Material->Bind();
A klasa materiału już sama się troszczy o odpowiednie przekazywanie parametrów do shadera'a :)