Autor Wątek: Java - JOGL  (Przeczytany 4155 razy)

Offline T.a.s.z

  • Użytkownik

# Styczeń 29, 2008, 15:16:44
Hej chciał bym poruszyć mały wątek ;P istnieje mozliwosc założenia mini działu/poddziału gdzie osoby piszące tylko w javie by znalazły pomoc? :P :D Jak by nie patrzeć w linkowisku w OpenGL oprócz C++ mamy JOGLa i jest gro osób zainteresowanych tą technologia. :) Osobiście mam też co nieco do zapytania ^^ :D

Tutaj daje pare linków do po JOGLowania :)

http://pepijn.fab4.be/software/nehe-java-ports/
http://jerome.jouvie.free.fr/index.php
http://www.java-tips.org/other-api-tips/jogl/
« Ostatnia zmiana: Styczeń 29, 2008, 15:28:33 wysłana przez T.a.s.z »

Offline Mr. Spam

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

Offline kamykadze

  • Użytkownik

# Styczeń 29, 2008, 18:41:56
Raczej szans nie ma. Forum jest zdominowane przez C++, tematy związane z Javą pojawiają się rzadko, ponad połowa z nich to pewnie JME.

Jeśli masz problem z JOGL'em lub ciekawe spostrzeżenia, utwórz tu po prostu nowy temat, może ktoś Ci pomoże / ktoś z Tobą podyskutuje.

Offline T.a.s.z

  • Użytkownik

# Luty 01, 2008, 00:56:21
Ok to mam pierwsze pytanie. Problem polega na niemożności wyświetlania tekstur... Na początku były błędy ale juz jest ok, mimo to nie zostaja nałożone żadne tektury ;/

w init{
      gl.glEnable(GL.GL_TEXTURE_2D);   // zgloszenie tekstury 2D
      gl.glBindTexture(GL.GL_TEXTURE_2D, 0); // nadanie nr teksturze dwu wymiarowej
  //    gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, 1);

     gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.GL_REPEAT);
     gl.glTexParameteri (GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_REPEAT);
     gl.glTexParameteri (GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);
     gl.glTexParameteri (GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
     gl.glTexEnvf(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_DECAL); // teoretycznie powinno to byc jesli nie ma cieni i swiatla
      byte[] tab = {};
      int w2 = 0;
      int h2 = 0;
 try{ BufferedImage input = ImageIO.read(new File("C:/tekstura1.BMP")); 
    w2 = input.getWidth();
    h2 = input.getHeight();
    int zeta = 0;
    tab = new byte[h2*w2];
       
    for(int j = 0; j < h2; j++)
        for(int i = 0; i < w2; i++)
        {
        tab[zeta] =  (byte) input.getRGB(i, j);
        zeta++;
        }
   
     }catch(Exception exc){ System.err.print(exc); }
     gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, 3, w2, h2, 0, GL.GL_R, GL.GL_UNSIGNED_BYTE, ByteBuffer.wrap(tab)); // Zamiast GL.GL_RGB  ustawiłem GL.GL_R bo otrzymywałem błąd iż mam za mało danych w tablicy (tzn o 3 razy czyli niby brak G i B :P, mimo to powinno wyswietlic wszystko w skali czerwieni :P )
następnie wywolanie tego na kwadraciku w funkcji display:
       gl.glBindTexture (GL.GL_TEXTURE_2D, 0);  //nr tekstury nakladanej
gl.glBegin(GL.GL_QUADS);
                         gl.glTexCoord2f (0.0f, 0.0f);
gl.glVertex3f(-1.0f, 1.0f, 0.0f);
                         gl.glTexCoord2f (1.0f, 0.0f);
gl.glVertex3f(1.0f, 1.0f, 0.0f); 
                         gl.glTexCoord2f (1.0f, 1.0f);
gl.glVertex3f(1.0f, -1.0f, 0.0f);
                         gl.glTexCoord2f (0.0f, 1.0f);
gl.glVertex3f(-1.0f, -1.0f, 0.0f);
gl.glEnd();

================ EDIT =========================

ok wiem gdzie był bląd... ładowałem teksture 1D. Ale dalej to nie rozwiazuje mego problemu. Próbuje załadować kolorowy plik BMP/GIF (bez różnicy bo czyta to i to) i wyrzuca mi błąd braku w tablicy danych..... jeżeli tu:
    gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, 3, w2, h2, 0, GL.GL_R, GL.GL_UNSIGNED_BYTE, ByteBuffer.wrap(tab));
h2 i w2 zapisze w postaci w2/3 i h2/3 to dziala lecz nie ma kolorow ..... co robić ?
« Ostatnia zmiana: Luty 01, 2008, 03:45:14 wysłana przez T.a.s.z »

Offline Xion

  • Moderator
    • xion.log

# Luty 01, 2008, 10:33:21
Nic dziwnego, skoro format piksela to tylko GL_R :) Chyba GL_RGB lub GL_RGBA powinno być, co nie? :)

Offline T.a.s.z

  • Użytkownik

# Luty 01, 2008, 14:43:41
Nom mialem ustawione na GL.GL_R, to nie działało :P Zmienilem na GL.GL_RGB i zmniejszylem w gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, 3, w2, h2, 0, GL.GL_RGB, GL.GL_UNSIGNED_BYTE, ByteBuffer.wrap(tab)); <--- w2 i h2 trzy krotnie. Poczym zadziałało :D :D mam piekny dessen na kwadraciku :D Niestety kolorowe tekstury nie działają ;(

Offline Kamil

  • Użytkownik
    • Homepage

# Luty 24, 2008, 02:03:08
Tak z ciekawosci, czemu wybrales jogl a nie na przyklad lwjgl?

Offline Anton Chigurh

  • Użytkownik

# Luty 24, 2008, 10:34:51
"gl.glBindTexture(GL.GL_TEXTURE_2D, 0);"

czy tekstury są na pewno  numerowane od 0?
U mnie pierwsze wywołanie glGenTextures zawsze zwraca 1, również w Tao. Możliwe, że w JOGL jest jakieś dziwne przejście na indeksowanie tekstur od 0, ale w przeciwnym wypadku, to wygląda na to, że pochopnie podstawiasz tam 0.

Polecam wykorzystywanie przy glBind tylko i wyłącznie liczb zwróconych przez glGenTextures, bo do statcznych wartości to ja nie wiem czy można mieć 100% zaufania.

Offline voytech

  • Użytkownik

# Luty 24, 2008, 22:58:47
W dokumentacji glBindTexture napisane jest:

Texture names are unsigned integers. The value zero is
reserved to represent the default texture for each texture
target...


Jakkolwiek to rozumieć, to jakby nie było numer zero jest zarezerwowany :). Na wszelki wypadek numer wygenerować przy użyciu glGenTextures, albo spróbować zamiast zero dać jedynkę