[ _alokiN_ @ 09.02.2005. 17:18 ] @
Hteo bih da koristim slike u JPG formatu kao texture u openGLu. OK, nemam bas nesto iskustva sa openGLom ali znam od prilike kako to ide. Problem je u ucitavanju JPGa: JPG ima zaglavlje u kome stoje dimenzije itd i samu sliku, ali nikako da nadjem kako da citam i interpretiram zaglavlje. Valjda to moze da se uradi uz pomoc jpeglib.h i libjpeg ali mi gcc daje parse error u jpeglib.h ??? Sad pitanje je sta ja tu propustam i da li to mozda moze drugacije da se odradi?
[ biotech @ 09.02.2005. 17:24 ] @
www.gametutorials.com
nehe.gamedev.net
[ _alokiN_ @ 09.02.2005. 17:54 ] @


Svi tutoriali vezani za texture se placaju :((

Citat:
nehe.gamedev.net


Ovde postoji jedan tutorial, ali koristi glaux.h koji je deprecated - umesto njega se koristi glut. Ostatak datog koda mi ne koristi - to uglavnom znam - ono sto bih ja hteo da uradim on radi funkcijom glaux-a (auxDIBImageLoad(Filename)). Hvala u svakom slucaju, ali bi mi vise odgovaralo nesto svezije...
[ bkaradzic @ 09.02.2005. 18:08 ] @
http://openil.sourceforge.net/
http://freeimage.sourceforge.net/
[ _alokiN_ @ 09.02.2005. 18:26 ] @
OK, hvala, uz pomoc ovih biblioteka mogu da uradim sve sto mi treba.. Medjutim, da li moze neko ipak da mi kaze kako bih to uradio koristeci samo neke "osnovne" biblioteke (gl i glut)? Koliko sam do sada ukapirao, glut ne podrzava takve operacije, ali moze da se uradi skroz rucno ( samo read()/fread() ):

1. trebalo bi rucno da se procita celo zaglavlje, od koga mi je najvaznije da skinem dimenzije slike koje bih posle koristio za rezervisanje memorije za samu sliku,

2. da procitam samu sliku koju posle koristim

Problem je u tome sto ne znam specifikacije samog zaglavlja, tako da ne znam kako da ga interpretiram...

U krajnjem slucaju, odradicu pomocu openil-a ili freeimage-a, ali bi bilo bolje na nekom nizem nivou.

E, da, zna li neko cemu sluzi jpeglib??
[ yooyo @ 09.02.2005. 19:15 ] @
Citat:

E, da, zna li neko cemu sluzi jpeglib??


Bas za ono sto ti treba. jpeglib se nalazi u svim "image loading" bibliotekama.
Oficijelni jpeg source mozes skinuti sa http://www.ijg.org. Kada skines jpegsr6.zip potrazi file djpeg.c u kome je primer ucitavanja jpg slike.

yooyo

[ shiggy @ 10.02.2005. 19:12 ] @
http://www.matf.bg.ac.yu/r4rg/vjezbe/opengl.tar.gz

ovde imash par primera za OpenGL jedan od njih je vezan za teksture koji koristi pnglib ,skoro identican jpeglib-u.

poz
[ _alokiN_ @ 10.02.2005. 22:07 ] @
Hvala na odgovorima snalazim se sa ovim jpeglib-om, a i ovaj kod sa pnglib je bas pregledan...
[ biotech @ 11.02.2005. 00:27 ] @
da upravo sam video da na gametutorials.com se placaju tutoriajali-to je stvarno necuveno...nekad nije bilo tako.probacu da iskopam stare tutoriale sa ovog sajta imam ih negde...
[ _alokiN_ @ 11.02.2005. 10:19 ] @
Ajde, pa ako ih nadjes okaci ih ovde ili stavi nekakv link... Tutoriala nikad dosta :))
[ _alokiN_ @ 11.02.2005. 11:00 ] @
Imam jos jedan problem sa jpeglib-om....

Kada citam sliku red po red:

Code:
(void) jpeg_read_scanlines(&cinfo, buffer, 1);


svaki red se stavlja u buffer koji je tipa JSAMPARRAY, sto je isto sto i unsigned char**. Ja sad treba da slozim sve te redove u jedan veliki buffer koji ce sadrzati celu sliku i koji cu posle koristiti sa glTexImage2D() U dokumentaciji za jpeglib pise samo:

Code:
/* Assume put_scanline_someplace wants a pointer and sample count. */
    put_scanline_someplace(buffer[0], row_stride);


Kopiram rucno svaki element skeniranog reda u moj buffer, ali se na kraju textura ne pojavljuje. Ono sto ne razumem je zasto je jedan red slike tipa unsigned char** a ne unsigned char*. Predpostavljam da je upravo u tome problem i da ne mogu jednostavno da kopiram podatke iz jednog u drugi... Sad, ako neko zna da mi kaze kako bi trebalo pravilno da kopiram taj buffer. Ili mozda mogu da koristim JSAMPARRAY direktno u glTexImage2D()?

Uh, nadam se da neko razume sta hocu da kazem.....
[ yooyo @ 11.02.2005. 17:03 ] @
Nadam se da je ovo od pomoci...

Code:

struct jpeg_decompress_struct dinfo;
int jpg_rdata(int fd, FILE* fd, byte *data) // data points to ALLOCATED MEMORY
{
    byte *c_data;
    ERR err;
    SRC src;
    int stride, jrc;

    fseek(fd, 0L, SEEK_SET);

    dinfo.err = jpeg_std_error((struct jpeg_error_mgr *)&err);
    dinfo.err->output_message = my_output_message;
    dinfo.err->error_exit = my_error_exit;
    if ( (jrc = setjmp(err.setjmp_buffer)) != 0 )
        {
        /* If we get here, the JPEG code has signaled an error.
         * We need to clean up the JPEG object and return.
         */
        jpeg_destroy_decompress(&dinfo);
        return jrc;
        }

    jpeg_create_decompress(&dinfo);

    /* Use a file descriptor based source manager */
    init_fd_src(&dinfo, fd, &src);

    /* Read file header, set default decompression parameters */
    (void) jpeg_read_header(&dinfo, TRUE);

    /* Start decompressor */
    (void) jpeg_start_decompress(&dinfo);
    /* We can ignore the return value since suspension is not possible
     * with the stdio data source.
     */

    stride = dinfo.output_width * dinfo.output_components;

    /* Process data */
    c_data = data + (dinfo.output_height - 1) * stride;
    /* Here we use the library's state variable dinfo.output_scanline as the
     * loop counter, so that we don't have to keep track ourselves.
     */
    while ( dinfo.output_scanline < dinfo.output_height )
        {
        /* jpeg_read_scanlines expects an array of pointers to scanlines.
         * Here the array is only one element long, but you could ask for
         * more than one scanline at a time if that's more convenient.
         */
        int num_scanlines;
        JSAMPROW sarray[1];  /* array of pointers to rows */
        sarray[0] = c_data;
        num_scanlines = jpeg_read_scanlines(&dinfo, sarray, 1);
        c_data -= num_scanlines * stride;
        }

    (void) jpeg_finish_decompress(&dinfo);
    /* We can ignore the return value since suspension is not possible
     * with the file descriptor data source.
     */

    /* This is an important step since it will release a good deal of memory. */
    jpeg_destroy_decompress(&dinfo);

    /* At this point you may want to check to see whether any corrupt-data
     * warnings occurred (test whether err.pub.num_warnings is nonzero).
     */
    return 1;
}


yooyo
[ _alokiN_ @ 12.02.2005. 12:49 ] @
Hvala, sve radi kako treba sada.
[ Goq @ 17.03.2005. 18:25 ] @
Pronasao sam 100% besplatan command-line program (100KB) za konverziju najrazlicitijih formata (JPG, BMP...). Ideja je da prilikom instalacije, sve jpg slike koje idu uz tvoj program, prebacis u BMP i bas te briga. Valjda se korisnici nece ljutiti zbog "brda" BMP fajlova :).

http://www.filelibrary.com/Contents/DOS/101/new.html
[ Goq @ 17.03.2005. 18:30 ] @
Nisam naveo da se zove jpeg6b.zip.
[ _alokiN_ @ 18.03.2005. 10:29 ] @
Hvala za savet, ali to sto sam radio je bio samo neki projekat za fakultet (tj broj korisnika = 0 :)), pa mi je vise cilj da ukapiram kako citati jpeg nego da to na kraju radi.