Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562

Использование mipmap в Opengl

23.01.2019, 01:25. Показов 3375. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, короче я генерирую с cube map, mipmap текстуры все хорошо работает, меня вот что волнует я их сохранил как текстуры и вышло 36 шт знаю что есть форматы поддерживают mipmap но я потом это решу, так вот 36 текстур я их загружаю как cube map и все отлично работает таким образом:

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
//так храню путь к текстурам, их перечислять не буду их 36
vector<std::string> r;
 
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_CUBE_MAP, texture);
 
int width, height, nrChannels;
for (unsigned int i = 0; i < faces.size(); i++)
{
       //тут подгрузка текстуры
       unsigned char *data = stbi_load(r[i].c_str(), &width, &height, &nrChannels, 0);
    if (data)
    {
        glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
            stbi_image_free(data);
    }else
    {
                stbi_image_free(data);
                
    }
}
 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);

Вопрос легально ли так делать? а еще как их удалять?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.01.2019, 01:25
Ответы с готовыми решениями:

Как задействовать mipmap из текстуры?
Имеется текстура DDS (DXT1/BC1) 512 х 512 с 9-ю уровнями мипмапа. 0 - 512*512 1 - 256*... 2 - 128 3 - 64 4 - 32 5 - 16 6 - 8 ...

Как сделать fbo с mipmap-ами?
В общем, нужно что бы у fbo была текстура с уровнями. Само по себе это не проблема, но вот как сделать так что бы после очистки фбо и...

Использование OpenAl в Opengl
Здравствуйте, решил на досуге использовать OpenAL, конечно ничего не вышло)) хотел прикрутить stb_vorbis он может декодировать файлы ogg...

5
827 / 244 / 47
Регистрация: 24.01.2013
Сообщений: 750
23.01.2019, 14:28
Так где сам mipmap то?

Его хотя бы включить для начала надо -
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

а перед этим сгенери́ровать все mip-уровни - glGenerateMipmap(GL_TEXTURE_CUBE_MAP);
или загрузить их вручную для каждой стороны кубемапы -
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIV E_X + i, level, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
23.01.2019, 22:03  [ТС]
Цитата Сообщение от _Develop Посмотреть сообщение
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIV E_X + i, level, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
они уже сгенерированы, а level какой ставить?
0
827 / 244 / 47
Регистрация: 24.01.2013
Сообщений: 750
24.01.2019, 01:57
Цитата Сообщение от Antikl Посмотреть сообщение
они уже сгенерированы, а level какой ставить?
0 - для самой большой картинки, потом 1 - размеры в два раза меньше, 2 - еще меньше и т.д.
0
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
24.01.2019, 22:02  [ТС]
Цитата Сообщение от _Develop Посмотреть сообщение
0 - для самой большой картинки, потом 1 - размеры в два раза меньше, 2 - еще меньше и т.д.
Я так сделал где ошибка? я не догнал, тоисть все грузиться, только не работает текстура черная


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
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_CUBE_MAP, texture);
 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
 
int width, height, nrChannels;
for (unsigned int i = 0; i < faces.size(); i++)
{
    unsigned char *data = stbi_load(faces[i].c_str(), &width, &height, &nrChannels, 0);
             if(i >= 0 && i <= 5)
        {
                    
                glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, width, height, 0, GL_RGB,GL_UNSIGNED_BYTE, data);
            stbi_image_free(data);
        }else if(i >= 6 && i <= 11)
        {
                glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 1, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
            stbi_image_free(data);
        }else if(i >= 12 && i <= 17)
        {
            glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 2, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
            stbi_image_free(data);
        }else if(i >= 18 && i <= 23)
        {
            glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 3, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
            stbi_image_free(data);
        }else if(i >= 24 && i <= 29)
        {
            glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 4, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
                    stbi_image_free(data);
        }
}
0
827 / 244 / 47
Регистрация: 24.01.2013
Сообщений: 750
25.01.2019, 01:44
Во-первых, проверяй на ошибки - glGetError(), одну ошибку я сразу вижу, но может там еще что-то есть.
GL_TEXTURE_MAG_FILTER не может быть GL_LINEAR_MIPMAP_LINEAR, поставь GL_LINEAR, из-за этого может быть черная.

Во-вторых, там особые требования к текстурам, если грузишь лоды вручную, то для каждого уровня должны совпадать размеры и формат текселя, и еще для кубемапы они вроде должны быть квадратными, точно не помню, посмотри в документации.

Я бы для отладки загрузил сначала только 0-вой уровень и вызвал glGenerateMipmap(GL_TEXTURE_CUBE_MAP)
если все норм. тогда искал бы ошибку в генерации лодов или в их загрузке.

upd
"то для каждого уровня должны совпадать размеры" для всех сторон кубемапы одного уровня Level.

Добавлено через 8 минут
upd2
еще нужно грузить все уровни вплоть до размера 1х1, или указать сколько ЛОД-ов ты загрузил.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.01.2019, 01:44
Помогаю со студенческими работами здесь

Использование текстуры OpenGL
недавно столкнулся с задачей: привязать текстуру 16 на 16 к квадрату с помощью OpenGL. Так как времени маловато, а как инициализировать и...

Иконки в mipmap
подскажите должны ли совпадать имена иконок в папках mipmap? И что делать если иконка не отображается в версии до 4.2 ?

Проблемы с MipMap DirectX
Задача следующая: Есть некоторая текстура, в реалтейма ее содержимое меняется, путем копирования памяти из подкачки, непосредственно в...

Использование Opengl
Добрый день, стоит передо мной задача : нарисовать 3 эллипсоида в одном. Например : До этого я сделал один : код : rot_1++; ...

Использование OpenGL в .NET
Только не надо смотреть на меня как на шизика и говорить 'для этого существует C++'. Я понимаю, что здесь в основном обсуждают ASP.NET, но...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru