2012-06-19 18 views
5

Tworzę GUI w OpenGL (dokładniej lwjgl). Próbowałem ciężko znaleźć różne sposoby robienia tego, ale trudno mi znaleźć dokładnie to, czego chcę. Nie chcę używać żadnych zewnętrznych bibliotek (tylko te wbudowane w OpenGL, nawet starające się trzymać z daleka od GLUT) i chciałbym, aby działały na wszystkim, co obsługuje OpenGL (np. Frame Buffer Objects nie działają na starszych karty graficzne).OpenGL rysuje obiekt częściowy w przewijanym panelu

Tworzę GUI 3D z przewijalnym panelem jako komponentem. Problem polega na tym, że nie wiem, jak narysować częściowy komponent GUI, nie wykonując wielu obliczeń, aby renderować tylko jego część. Składam komponenty z prymitywów OpenGL, a nie z tekstur. Miałem nadzieję, że jest prosty sposób, aby to zrobić, jak korzystać z wielu rzutni. Naprawdę nie rozumiem nawet, jakie są widoki.

W skrócie: Potrzebuję przewijanego panelu jako komponentu pokrywającego się z innymi komponentami GUI (ponieważ będzie to menu rozwijane) i nie pozwól, aby którykolwiek komponent w moim panelu rysował poza moim panelem.

Odpowiedz

6

Jeśli chcesz tylko zapobiec rysowaniu pikseli poza prostokątnym obszarem (i myślę, że o to pytasz), to właśnie to, czego szukasz, to glScissor.

W lwjgl można znaleźć funkcję w org.lwjgl.opengl.GL11.

+1

Możesz również skorzystać z GL_GLIP_PLANE, będą one pozwalały ci klipować w obszarze modelu (w przypadku, gdy twoje współrzędne GUI nie są zgodne z pikselami rzutni). – Kromster

+0

Dzięki, właśnie tego szukałem – axelrod360

1

Jeśli chcesz przewinąć większą scenę w ustalonym obszarze na ekranie, najprostszą metodą jest modyfikowanie macierzy projekcji dla pozycji przewijania i przerysowywanie sceny. Jeśli używasz gluPerspective do ustawienia macierzy projekcji, musisz przekonwertować ją na bezpośrednie połączenie z glFrustum; jeśli używasz glorotto, jest to znacznie prostsze.

Należy pamiętać, że "przewijanie" widoku perspektywicznego nie ma właściwego sposobu robienia rzeczy - zależy to od tego, jaki efekt chcesz uzyskać i jaki rodzaj zniekształcenia chcesz osiągnąć przy krawędziach całego okna widoczności .