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

Загрузка текстур в 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 главе "Классы и наследование". На форуме неоднократно выкладывался код консольной змейки. Мне хотелось написать самому, но я решил еще воспользоваться полученными знаниями и написать код с помощью классов. Естественно я подсматривал некоторые моменты по реализации. Возможность скомпилировать программу на Ubuntu подсмотрел в интернете. + Добавил "паузу". + Добавил...
C++ Игра в консоли http://www.cyberforum.ru/cpp-beginners/thread945894.html
Суть программы - управление точкой, нажатием клавиш: w, a, s, d. Координаты верхнего левого угла (0; 0). Точка бегает по верхней полосе(x) влево и вправо, так же по левой(y) вверх и низ. А вот если идти вниз, предположим на y = 7 и затем вправо x = 5, то уже положение точки отображается не правильно. В чем ошибка? Вот собственно код: #include <iostream> #include <stdlib.h> #include <conio.h>...
C++ как сделать неизвестное количество вложенных циклов в программу будет вводиться n-ное число, это самое число циклов со счетчиком, т. е. for (t=1; t<=v; ++t) for (t=1; t<=v; ++t) for (t=1; t<=v; ++t) и так пока не дойдет до for (t=1; t<=v; ++t) так как число будет вводиться с клавиатуры в программу я не могу предугадать сколько надо написать вложенных циклов, есть ли такая функция в c++ чтоб делать n вложенных циклов? подробнее

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

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

30.08.2013, 16:18. Просмотров 661. Ответов 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.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru