PDA

Visualizza la versione completa : [C] Caricare immagini con OpenGL?


syddharta
04-10-2006, 16:15
Ciao a tutti,

avrei bisogno di caricare delle immagini da visualizzare in una finestra, possibilmente usando la libreria Opengl.
L'immagine non mi serve come texture, ma semplicemente devo visualizzarla.

Ho copiato il codice di un esempio dal libro "OpenGL SuperBible", ma mi da errore:

GLubyte *pImage = NULL;
GLint iWidth, iHeight, iComponents;
GLenum eFormat;

glClear(GL_COLOR_BUFFER_BIT);

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

pImage = gltLoadTGA("gatto.tga", &iWidth, &iHeight, &iComponents, &eFormat);

glRasterPos2i(0, 0);

if(pImage!=NULL)
glDrawPixels(iWidth, iHeight, eFormat, GL_UNSIGNED_BYTE, pImage);

free(pImage);

glutSwapBuffers();

L'errore è: '=' : cannot convert from 'signed char *' to 'unsigned char *' riferito alla riga di pImage = gltLoadTGA.....


Grazie mille

MItaly
04-10-2006, 17:08
Aggiungi un cast esplicito alla linea in questione, ( (unsigned char *) "gatto.tga") oppure memorizza "gatto.tga" in un array di unsigned char.

syddharta
04-10-2006, 17:15
ti ringrazio per l'intervento, ma ho già provato a fare il cast o ad usare un vettore di unsigned char...ma non cambia niente :dhò:

oregon
04-10-2006, 17:16
Non vorrei sbagliare ma il messaggio si riferisce al tipo di dati puntati da pImage.

Prova a scrivere

GLByte *pImage = NULL;

syddharta
04-10-2006, 17:24
ho provato come dice oregon (grazie), però scrivendo GLbyte *pImage = NULL; (con la b minuscola) e non mi da più errori in fase di compilazione.

Però in fase di linking me ne da 1:

unresolved external symbol "signed char * __cdecl gltLoadTGA(char const *,int *,int *,int *,unsigned int *)" (?gltLoadTGA@@YAPACPBDPAH11PAI@Z)

che credo abbia comunque a che fare con l'errore precedente...

oregon
04-10-2006, 17:28
No ... il primo errore e' risolto.

Questo messaggio indica solamente che non hai indicato al linker la libreria GLUT.

Indicalo nelle opzioni del linker per il tuo compilatore ...

syddharta
04-10-2006, 17:41
ho inserito la libreria nel linker (uso Visual Studio C++ 6), ma l'errore rimane...

l'errore si riferisce ancora al "signed char*" di quella funzione....

oregon
04-10-2006, 17:43
Originariamente inviato da syddharta
ho inserito la libreria nel linker (uso Visual Studio C++ 6), ma l'errore rimane...


Dove e cosa hai inserito?


Originariamente inviato da syddharta
l'errore si riferisce ancora al "signed char*" di quella funzione....

No ... ti viene evidenziato il modello della funzione (e che questa restituisce un signed char *) ma l'errore e'

unresolved external symbol

che vuol dire semplicemente che la compilazione e' andata a buon fine ma il linker non trova la libreria in cui e' definita la funzione chiamata.

Hai commesso un errore nell'inclusione della libreria.

syddharta
04-10-2006, 18:01
in Project->Settings->Link ho aggiunto le librerie "glut32.lib glui32.lib opengl32.lib"
ma con o senza di queste l'errore mi rimane.

Una libreria da includere potrebbe essere la LoadTGA.c, ma includendo (come sopra) mi dice "invalid o corrupt file".

oregon
04-10-2006, 18:14
La LoadTGA.c *non* e' una libreria ma un sorgente c (e quindi non puoi inserirla tra le librerie linkate).

Se la funzione e' definita in quel file, devi aggiungere tale file tra i sorgenti perche' deve essere compilato in modo che il linker trovi il codice oggetto della gltLoadTGA.

Loading