Главная страница
Навигация по странице:

  • include

  • Руководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика


    Скачать 0.66 Mb.
    НазваниеРуководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика
    Дата21.10.2022
    Размер0.66 Mb.
    Формат файлаdocx
    Имя файла221937-83556.docx
    ТипРуководство
    #747097
    страница26 из 30
    1   ...   22   23   24   25   26   27   28   29   30
    int) uInt32Number ( buf + 20)

    n_used_colors = (int )uInt32Number (buf + 32)

    // читаем только полноцветные файлы if (n_bits = BMP_COLOR_BLTS_24)

    Б. 3. Загрузка BMP файла

    183

    { _

    int rgb_size ; unsigned char* rgb ; int y;

    unsigned char* line; int rest_4 ;

    if (bitmap_pos ! =

    BMP_SIZE_FILEHEADER + BMP_SIZE_INFOHEADER)

    {

    fclose(f ); return 0;

    }

    if (fseek(f, bitmap_pos , SEEK_SET))

    {

    fclose(f ); return 0;

    }

    rgb_size = 3 * x_res; rest_4 = rgb_size % 4; if (rest_4 > 0)

    rgb_size += 4 rest_4;

    out_img—>width = x_res ; out_img—>height = y_res;

    out_img—>data =

    (unsigned char *) malloc (x_res * y_res * 3);

    if (out_img->data = NULL) return 0;

    rgb = (unsigned char *) malloc ( rgb_size ) ;

    // заполняем данные из файла

    for (у = 0; у < y_res; y++)

    {

    s i z e _ t numb = 0; int x = 0;

    numb = fread(rgb, rgb_size i f (numb ! = 1)

    {

    fclose ( f ); free (rgb ); return 0;

    }

    numb = 0;

    line = out_img—>data + x_

    for (x = 0; x < x_res; x+-

    {

    line [2] = rgb [numb++]; line[l] = rgb [numb++]; line[0]= rgb[numb++]; line += 3; } }

    fclose(f ); free(rgb );

    } else

    return 0;

    return 1;

    }

    typedef unsigned typedef unsigned typedef unsigned

    char BYTE; short WORD; int DWORD;

    typedef struct tagBITMAPFILEHEADER

    Б. 3. Загрузка BMP файла

    185



    {

    WORD

    bfType;

    DWORD

    bfSize;

    WORD

    bfReservedl;

    WORD

    bfReserved2;

    DWORD

    bfOffBits ;

    } BETMAPFILEHEADER;

    typedef

    struct tagBITMAPINFOHEADER {

    DWORD

    biSize ;

    long

    biWidth;

    long

    biHeight ;

    WORD

    biPlanes;

    WORD

    biBitCount ;

    DWORD

    biCompression ;

    DWORD

    biSizelmage ;

    long

    biXPelsPerMeter ;

    long

    biYPelsPerMeter ;

    DWORD

    biClrUsed;

    DWORD

    biClrlmportant ;

    } BETMAPrNFOHEADER;

    static void IntTo2Bytes (int val , BYTE buf[2])

    {

    buf [0] = (BYTE) val;

    buf[l] = (BYTE) (val » 8); }

    static void IntTo4Bytes (int val, BYTE buf [4])

    {

    buf [0] = (BYTE) val;

    buf[l] = (BYTE) (val » 8);

    buf [2] = (BYTE) (val » 16);

    buf[3] = (BYTE)(val » 24);
    }

    186

    Приложение Б. Демонстрационные программы

    Б.4. Пример 3: Текстурирование и анимация

    Результатом выполнения этой программы является построе­ние тетраэдра с вращающимися вокруг него кольцами, на кото­рые нанесена текстура.

    При компиляции программы в Microsoft Visual СИ—Ь файл «texture.bmp» надо поместить в каталог проекта или указать полный путь к нему. Если путь не указан, то при запуске ис­полняемого файла из операционной системы файл с текстурой должен находиться в том же каталоге. Для загрузки изображе­ния текстуры программа использует функцию LoadBMP, приве­денную в предыдущем пункте.

    Программа Б.5. Пример текстурирования и анимации.

    ^include T^include . h> #include T^include "loadbmp.h"

    #define TETR_LIST 1

    GLfloat light_col[] = {1,1,1};

    1   ...   22   23   24   25   26   27   28   29   30


    написать администратору сайта