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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Mechaniks
0 / 0 / 0
Регистрация: 26.06.2013
Сообщений: 7
#1

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

30.08.2013, 16:18. Просмотров 710. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2013, 16:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Загрузка текстур в OpenGL (C++):

Удаление текстур OpenGL - C++
Ребята подскажите как удалить текстуру? Через метод glDeleteTextures, если да то какие параметры она принимает? И есть ли другой способ...

Неправильная отрисовка текстур в OpenGL - C++
Всем доброго дня, недавно начал изучать как работать с графикой и решил повторить пример из урока, а именно - вращающийся кубик. Но...

SDL : Неадекватная загрузка текстур - C++
Есть следующее приложение: Programm.h #include &lt;windows.h&gt; #include &lt;SDL.h&gt; #include &lt;iostream&gt; #include &lt;string&gt; #pragma once ...

Загрузка моделей из Blender'а в OpenGL - C++
Посоветуйте какие есть библиотеки для загрузки моделей из Blender'а в OpenGL .

Загрузка текстур в OpenGL - OpenGL
Здравствуйте. У меня вот такая проблема: Мне нужно загрузить текстуру. Раньше пользовался для этого функцией glTexImage2D, которой...

Загрузка текстур в программу. OpenGL - PascalABC.NET
В стандартном модуле OpenGL.pas для PascalABC.NET отсутствуют следующие процедуры для работы с текстурами: glGenTextures(); ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2013, 16:18
Привет! Вот еще темы с ответами:

Несовместимость текстур OpenGl - OpenGL
Сделал проект, использую текстуры с высокими расширениями, запустил на другом компе, и увидел, только полигоны без текстур, нашёл что нужно...

Размер текстур в OpenGL - OpenGL
Хотелось бы услышать комментарии по двум вопросам: 1) Текстуры со сторонами равными степени двойки Много раз натыкался на литературу...

Наложение текстур в OpenGL ES 2 - OpenGL
Здравствуйте. Пишу на OpenGL ES 2 под андроид. Никак не могу разобраться как наложить текстуру на полигон. В общем мне надо чтобы текстура...

Создать библиотеку текстур OpenGL - OpenGL
Всем привет, написал программу, которая загружала несколько текстур, а после накладывала их на выбранные обьекты. Препод дал новое задание,...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru