Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Mechaniks
0 / 0 / 0
Регистрация: 26.06.2013
Сообщений: 7
30.08.2013, 16:18     Загрузка текстур в OpenGL #1
Здравствуйте.
Начал осваивать наложение текстур в 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.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2013, 16:18     Загрузка текстур в OpenGL
Посмотрите здесь:

C++ Ошибка с OpenGL
Массив текстур через библиотеку SFML C++
OpenGl C++
Библиотека OpenGL C++
Opengl и C++ C++
opengl with devcpp C++
C++ Удаление текстур OpenGL
SDL : Неадекватная загрузка текстур C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 00:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru