Jestem na etapie tworzenia gry, w którym muszę stworzyć interfejs lub GUI. Nigdy nie dotarłem do tej części, więc nie wiem, jak to się robi. Próbowałem renderować prosty quad w stałej pozycji na ekranie, ale jest problem. Aby mój aparat działał z ortografią, używam tego:
public void lookThrough()
{
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(position.x, position.x + Display.getDisplayMode().getWidth()/zoom, position.y + Display.getDisplayMode().getHeight()/zoom, position.y, -1, 1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
}
Nie rozumiem, jak mógłbym zrobić coś naprawionego na ekranie za pomocą tej metody? Jakiś sposób na to? Dzięki :)
([0...1], [0...1], 0, 1)
bez projekcji, matrycy widoku lub świata, zawsze wylądują one w przestrzeni ekranu.Odpowiedzi:
To jest ze starego silnika gry opartego na OpenGL, który próbowałem napisać około siedem lat temu, napisanego w C ++, więc nie mam go przy sobie, gdy próbuję wyjaśnić, w jaki sposób radziłem sobie z operacjami w świecie 3D i renderowaniem 2D GUI. Użyłem czterech podstawowych metod w mojej klasie renderera OpenGL (OGLRender), z których są to:
render2D () dla aktualnego rysunku 2D GUI.
A potem w głównej pętli wątku po prostu wywołałbym metody w następującej kolejności:
Tak więc to, co robię, to najpierw rysuję scenę świata 3D, a następnie rysuję GUI w ten sposób, że GUI jest zawsze na szczycie światowej sceny. Metoda ready3D () przygotowuje projekcję świata 3D do rysowania sceny światowej, a metoda ready2D () przygotowuje scenę 2D orto do rysowania GUI.
m_Setup.width
im_Setup.height
to tylko wymiary ekranu portu widokowego.Szczególną cechą metody ready2D () jest to, że
gluOrtho2D()
funkcja jest wywoływana z argumentami, które informują ją, gdy rysujemy prymitywy GUI, rysujemy je we współrzędnych ekranu określonych dla Windows, Mac i innych układów współrzędnych ekranu. Tak jak górny lewy to (0,0) w formacie (X, Y), podczas gdy dolny prawy to(ViewportWidth-1, ViewportHeight-1)
. IglTranslatef()
służy do skorygowania per-pixel dokładnego pozycjonowania. Tak więc, gdy narysujemy linię od (0,0) do (0,9), wówczas linia będzie rysować od lewego górnego rogu i prosto w dół o łącznej długości dziesięciu pikseli i szerokości jednego piksela.Ogólnie rzecz biorąc, najprawdopodobniej interesuje Cię tylko to, co robi metoda ready2D () . Podałem przykłady kodu źródłowego innych metod, aby dać ci wyobrażenie o tym, jak większość gier robi scenę świata 3D i kolejność rysowania w GUI.
źródło