[java, OpenGL] dalszy obiekt wyświetlaja się przed bliższym

Witam,

mam dziwny problem, otóż sytuacja ma się tak ja na obrazku:

problem111.png

Czyli niezbyt dobrze…

Ktoś może mi wyjaśnić dlaczego obiekt który jest dalej wyświetla się przed tym co jest bliżej?

Z góry dzięki!

PS:

Być może błąd jest w ustawieniach wyświetlania:

public static boolean startOpenGL(){

        GL11.glMatrixMode(GL11.GL_PROJECTION); //Określam który ze stosów macierzy ma być modyfikowany

        GL11.glLoadIdentity(); //wyzerowanie danych

        GLU.gluPerspective(45.0f,((float)DISPLAY_WIDTH)/((float)DISPLAY_HEIGHT),0.1f,100.0f); // ustawienia perspektywy

        GL11.glMatrixMode(GL11.GL_MODELVIEW); //Określam który ze stosów macierzy ma być modyfikowany

        GL11.glLoadIdentity(); //wyzerowanie danych

        GL11.glEnable(GL11.GL_TEXTURE_2D); //włączam tekstury

        GL11.glShadeModel(GL11.GL_SMOOTH); //możliwe cieniowanie

        GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //ustawienie koloru na czarny

        GL11.glClearDepth(1.0f); //odległość po której obiekty są niszczone

        GL11.glDepthFunc(GL11.GL_LEQUAL); //wyświetla tylko obiekty których oddalenie jest mniejsze lub równe wyznaczonemu

        GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST); //tryb wyświetlania. 1 wskazuje jakość kolorów, współrzędne tekstury itp. 2 ustawia tryb na najbardziej wydajny


        return true;

  }

Prosta odpowiedź - może jest bliżej kamery? :wink: Z takim kodem niewiele jesteśmy w stanie ci poradzić, daj coś więcej np. rendering tych trzech obiektów.

edit.

Aha no i włączyłeś testowanie głębi?

brak włączenia testowania głębi:

glEnable(GL_DEPTH_TEST)

I sprawdź czy gdzieś przy rysowaniu nie masz:

GL11.glClearDepth(1.0f);

Ano, mam. A dlaczego to jest źle?

Nie jest '^^ Musisz włączyć przez glEnable coś co nazywa się GL_DEPTH_TEST:

public static boolean startOpenGL(){

        GL11.glMatrixMode(GL11.GL_PROJECTION); //Określam który ze stosów macierzy ma być modyfikowany

        GL11.glLoadIdentity(); //wyzerowanie danych

        GLU.gluPerspective(45.0f,((float)DISPLAY_WIDTH)/((float)DISPLAY_HEIGHT),0.1f,100.0f); // ustawienia perspektywy

        GL11.glMatrixMode(GL11.GL_MODELVIEW); //Określam który ze stosów macierzy ma być modyfikowany

        GL11.glLoadIdentity(); //wyzerowanie danych

        GL11.glEnable(GL11.GL_TEXTURE_2D); //włączam tekstury

        GL11.glShadeModel(GL11.GL_SMOOTH); //możliwe cieniowanie // yyy że jak?

        GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //ustawienie koloru na czarny // kolor czego? -> koloru czyszczenia ekranu ;)

        GL11.glEnable(G11.GL_DEPTH_TEST); // <- tego brakło

        GL11.glClearDepth(1.0f); //odległość po której obiekty są niszczone // totalna bzdura

        GL11.glDepthFunc(GL11.GL_LEQUAL); //wyświetla tylko obiekty których oddalenie jest mniejsze lub równe wyznaczonemu // bzdura choć nie całkiem

        GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST); //tryb wyświetlania. 1 wskazuje jakość kolorów, współrzędne tekstury itp. 2 ustawia tryb na najbardziej wydajny // nie najbardziej wydajny tylko naładniejszy -.-


        return true;

  }

Dopisałem ci trochę do komentarzy - na przyszłość czytaj tutoriale ze zrozumieniem, albo w ogóle zabierz się do OpenGL od strony C/C++ (do tego będzie więcej tutków) a potem ogarniaj JOGL-a.