Форум программистов, компьютерный форум, киберфорум
Наши страницы

Загрузка текстур в OpenGL - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Среда программирования http://www.cyberforum.ru/cpp-beginners/thread945945.html
Какая среда программирования бесплатная, т.е. не взломанная, а чисто бесплатная...
C++ Не могу разобрать задачу Когда вы вступите в Благотворительный Орден Программистов ( БОП ) , к вам могут обращаться на заседаниях БОП по вашему настоящему имени, по должности либо секретному имени БОП. Напишите программу,... http://www.cyberforum.ru/cpp-beginners/thread945921.html
задачка на вложенные циклы C++
Здравствуйте. Помогите новичку если не сложно. Не могу осилить одну задачу. Напишите программу, использующую вложенные циклы, которая запросит у пользователя значение количества строк для...
ConsoleSnake OOP C++
...остановился я на 13 главе "Классы и наследование". На форуме неоднократно выкладывался код консольной змейки. Мне хотелось написать самому, но я решил еще воспользоваться полученными знаниями и...
C++ Игра в консоли http://www.cyberforum.ru/cpp-beginners/thread945894.html
Суть программы - управление точкой, нажатием клавиш: w, a, s, d. Координаты верхнего левого угла (0; 0). Точка бегает по верхней полосе(x) влево и вправо, так же по левой(y) вверх и низ. А вот если...
C++ как сделать неизвестное количество вложенных циклов в программу будет вводиться n-ное число, это самое число циклов со счетчиком, т. е. for (t=1; t<=v; ++t) for (t=1; t<=v; ++t) for (t=1; t<=v; ++t) и так пока не дойдет до for (t=1;... подробнее

Показать сообщение отдельно
Mechaniks
0 / 0 / 0
Регистрация: 26.06.2013
Сообщений: 7

Загрузка текстур в OpenGL - C++

30.08.2013, 16:18. Просмотров 794. Ответов 0
Метки (Все метки)

Здравствуйте.
Начал осваивать наложение текстур в OpenGL, по книге OpenGL SuperBible. Там рассматривается загрузка текстуры формата .tga. Поскольку .jpg распространенное расширение захотелось написать загрузку именно для этого формата.
Вчера написал в ArchLinux загрузку и она прошла успешно. Сегодня приспичило это дело в винде скомпилить. Скачал библиотеку, собрал ее для mingw (jpeg v8). Скомпилировал, запускаю... и тут на тебе - никакой текстуры нету. Лишь куб, окрашенный в белый цвет (как и задавал). Погуглил, вроде код подобный, даже пробовал писать как кто-то писал. Ради этого даже посмотрел как в DOOM 3 написали загрузку. В общем везде по мануалу. В Думе правда использовалась библиотека 6 версии, но я думаю, может это и не суть.
Немного полазив, обнаружил, что в Arch используется некая библиотека jpeg-turbo. Может быть проблема в этом? Сильно пожалуйста не пинайте, может я и вправду мало чего знаю и сразу замахнулся на писанину собственного загрузчика, но уж очень захотелось. Можно было бы воспользоваться Qt, но опять же это лишние килобайты, хоть они мне сейчас и неважны. Привожу код конструктора класса, в котором происходит загрузка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
JPEGLoad::JPEGLoad(const char *str) {
    int row_stride;
    FILE *pFile;
 
    pFile = fopen(str, "rb");
    if (pFile == NULL){
        fprintf(stderr, "Can't open the file %s!", str);
        exit(1);
    }
    cinfo.err = jpeg_std_error(&jerror);
 
    jpeg_create_decompress(&cinfo);
    jpeg_stdio_src(&cinfo, pFile);
 
    jpeg_read_header(&cinfo, TRUE);
    jpeg_start_decompress(&cinfo);
 
    bits = new unsigned char[cinfo.output_width * cinfo.output_height * cinfo.output_components];
    unsigned char * pBits = bits;
    if (!bits){
        fprintf(stderr, "Error allocate memory!");
        exit(1);
    }
    Width = cinfo.output_width;
    Height = cinfo.output_height;
 
    row_stride = cinfo.output_width * cinfo.output_components;
    while (cinfo.output_scanline < cinfo.output_height)
    {
        jpeg_read_scanlines(&cinfo,((JSAMPROW *) &pBits), 1);
        pBits += row_stride;
    }
 
    jpeg_finish_decompress(&cinfo);
    jpeg_destroy_decompress(&cinfo);
    fclose(pFile);
}
Пожалуйста, не обращайте внимания на ужасный код, я все знаю, что так нелепо писать, ибо я просто накидал по сути этот код быстренько. Для возврата из картинки байтов кодов использую метод:
C++
1
2
3
4
unsigned char * JPEGLoad::GetBits() const
{
    return bits;
}
ну и потом загоняю в OpenGL
C++
1
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, jpegTexture.GetWidth(), jpegTexture.GetHeight(), 0, GL_RGB, GL_UNSIGNED_BYTE, jpegTexture.GetBits());
пожалуйста помогите новичку.

С наилучшими пожеланиями, Mechaniks.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru