Руководство по работе с графической библиотекой OpenGL. Руководство разработано с учетом опыта чтения курса Компьютерная графика
Скачать 0.66 Mb.
|
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
} 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 #define TETR_LIST 1 GLfloat light_col[] = {1,1,1}; |