2013-11-08 2 views
1

Я пытаюсь отобразить текстуры в свою игру, но изображение не точно отображено. Я использовал картинку в формате .bmpрасположение отображения текстуры неточно

вот мой код:

GLuint LoadTexture(const char * filename, int width, int height){ 
    GLuint texture; 
    unsigned char * data; 
    FILE * file; 

    file = fopen(filename, "rb"); 
    if (file == NULL) return 0; 
    data = (unsigned char *)malloc(width * height * 3); 
    fread(data, width * height * 3, 1, file); 
    fclose(file); 
    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); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

    //to the edge of our shape. 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data); 
    free(data); 
    return texture; 
} 

here is the images

ответ

3

Существует всегда раздел «заголовок» из BMP-файла, который составляет 14 байт, так `s лучше начать читать с 15-го байта и далее. У меня была такая же проблема, как и многие луны назад.

Итак ... использовать вызов функции, как это раньше вашего fread:

fseek (file, 15, SEEK_SET); 
+0

Заголовок не должен быть проигнорирован. Ширина и высота должны быть красными от файла, а затем угадываться вызывающей стороной. +1 для 'moons' tho :-D – keltar

+0

Не следует игнорировать, но для хранения данных изображения, да! В наши дни это меньше похоже на «луны» и больше похоже на «тысячелетия», –

Смежные вопросы