2012-09-20 14 views
11

Ho cercato dappertutto una soluzione semplice per aggiungere sprite al mio gioco open lander luna semplice OpenGL GLUT in C++ e sembra che io debba usare bmp perché sono più facili da caricare e li usano come trame su un rettangolo.Come caricare un bmp su GLUT per usarlo come una trama?

Come posso caricare esattamente i bmp come trame?

risposta

30

Guarda la mia semplice funzione di implementazione per caricare la trama.

GLuint LoadTexture(const char * filename) 
{ 

    GLuint texture; 

    int width, height; 

    unsigned char * data; 

    FILE * file; 

    file = fopen(filename, "rb"); 

    if (file == NULL) return 0; 
    width = 1024; 
    height = 512; 
    data = (unsigned char *)malloc(width * height * 3); 
    //int size = fseek(file,); 
    fread(data, width * height * 3, 1, file); 
    fclose(file); 

for(int i = 0; i < width * height ; ++i) 
{ 
    int index = i*3; 
    unsigned char B,R; 
    B = data[index]; 
    R = data[index+2]; 

    data[index] = R; 
    data[index+2] = B; 

} 


glGenTextures(1, &texture); 
glBindTexture(GL_TEXTURE_2D, texture); 
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_MODULATE); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST); 


glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,GL_REPEAT); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,GL_REPEAT); 
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height,GL_RGB, GL_UNSIGNED_BYTE, data); 
free(data); 

return texture; 
} 

La funzione sopra riportata restituisce i dati di trama. Memorizzare i dati delle texture in variabili

GLuint texture 
texture= LoadTexture("your_image_name.bmp"); 

Ora è possibile associare il texure utilizzando glBindTexture

glBindTexture (GL_TEXTURE_2D, texture); 
+7

+1 per modo di implementare te stesso. – Cosine

+1

questo è thread-unsafe – AbiusX

+0

questo è un sacco di divertimento, mai considerato di scrivere il mio ... –

4

cassa my il TextureLoader (TextureLoader.h + TextureLoader.cpp) da OpenGL_3_2_Utils:

https://github.com/mortennobel/OpenGL_3_2_Utils

I due file non dipende da altri file e dovrebbe funzionare anche senza soluzione di continuità su qualsiasi versione di OpenGL (e qualsiasi piattaforma). L'utilizzo di esempio può essere trovato nel commento del file.

+0

Brillante, grazie :) –

+1

Come posso aggiungere il file glew.h manca? Inserito una domanda al riguardo http://stackoverflow.com/questions/12518757/installing-glew-and-using-it-with-xcode –

+0

SO ha una politica di spam che richiede la divulgazione quando si menzionano strumenti o applicazioni che si sviluppano. Devi dire in realtà che sono tuoi. –