Wpis z mikrobloga

Mireczki, jest wśród was jakiś specjalista od programowania grafiki w OpenGL? Próbuję zaimplementować skuteczny frustum culling, ale niestety chyba źle obliczam granice stożka widzenia, bo widzę jak obiekty znikają na ekranie, tak jakby granica cullingu przebiegała nie tam gdzie trzeba. Może ktoś podpowiedzieć w jaki sposób wy to rozwiązaliście? Ja próbuję wyliczać równania poszczególnych płaszczyzn z przemnożenia macierzy model * projection, potem sprawdzam odległość obiektu otoczonego bounding sferą do każdej z płaszczyzn i na tej podstawie determinuję czy obiekt leży w stożku czy też nie. Myślałem jeszcze, że może sposób obliczania jest poprawny ale moment zły, bo nie uwzględniam przekształceń, które powinienem był uwzględnić - generalnie próbowałem robić to w metodzie OnTimer (MSDN) zaraz po glClear i tuż przed samym poleceniem renderingu. Testowałem też w metodzie OnDraw(MSDN), tuż po ustawieniu gluLookAt. Oba umiejscowienia liczenia widoczności i frustum dawały inne rezultaty, ale oba niepoprawne. Jakieś pomysły?

PS. Programowaliście coś w MFC? Użyłem tego jako API do obsługi okna dialogowego z całą aplikacją, może tutaj gdzieś pies pogrzebany?

#programowanie #opengl #cpp #mfc
  • 6
@sylwke3100: I tak i nie, zaszedłem raczej za daleko z programem żeby teraz przestawiać wszystko na frameworki, poza tym nie bardzo wiem który mógłby mi pomóc z tym zagadnieniem, chyba że coś możesz mi doradzić? :)
@Shilghter: aż wstyd się przyznać, ale zawsze w opengl miałem problem z współrzędnymi, i zazwyczaj robiłem tak, że rysowałem glBegin(QUADS) ... glEnd(); sobie ściany tego stożka wyliczone przeze mnie i patrzyłem, czy stoi w miejscu jak się obracam, i czy jest OK, a jak nie to metodą prób i błędów poprawiałem :)

Ogólnie to jakiś kod daj może?
@tell_me_more: Wrzuciłem absolutne minimum żeby zrozumieć co się tam właściwie dzieje, nie chciałem zasypywać kodem bo i tak tego trochę jest :)

Narazie wklejam na pastebin, może jak skończę to wrzucę cały projekt na GITa, ale to do przemyślenia jeszcze.

http://pastebin.com/0TW3dMVH

edit: myślę, że też zrobię podobnie postaram się narysować ten stożek jaki wychodzi z obliczeń i sprawdzę jak się zachowuje - póki co sprawdzałem wizualnie, plus ustawiałem aktualizację np. tylko
@Shilghter: hm, tak na pierwszy rzut oka, to skorzystaj z jakiejś biblioteki albo zrób sobie funkcje do mnożenia macierzy. Bo sprawdzanie ręcznie 20 linijek typu

clip[ 4] = model[ 4] * projection[ 0] + model[ 5] * projection[ 4] + model[ 6] * projection[ 8] + model[ 7] * projection[12];
czy gdzieś nie ma indeksu złego jest trochę słabe, i ja np. nie mam pewności, że tam nie ma błędu, choć