Войти
ПрограммированиеФорум2D графика и изометрия

Вывести большой Bitmap в окно с помощью openGL

Страницы: 1 2 3 4 5 6 7 Следующая »
#0
11:29, 2 дек. 2016

Доброго времени суток. Есть Bitmap большого размера, необходимо уместить его в окно (сжать) средствами openGL, как это сделать ? Текстуры не предлагать, Bitmap не помещается. Пишу на Qt, если можно пример. 


#1
12:29, 2 дек. 2016

Насколько большой битмап и почему не предлагать текстуры (натянул на Quad и хоть сжимай, хоть растягивай) ?

#2
12:37, 2 дек. 2016

Abraziv
> Текстуры не предлагать, Bitmap не помещается
типа, придумывайте мне вундервафлю, потому что по-нормальному я не умею? если вдруг текстура действительно не влезает в память(в чём я лично очень сомневаюсь), то её можно разбить на тайлы, которые выводить отдельными кусками, либо при чтении текстуры, например, читать каждый 2-й пиксель(каждый 10-й, каждый 100-й).

#3
14:35, 2 дек. 2016

Это можно делать даже средствами winApi , в одной книжке по дельфям описывалось как.

#4
15:26, 2 дек. 2016

Это я знаю. Интересует именно openGL, нужна скорость.

#5
15:29, 2 дек. 2016


Suslik
Да я не умею, я юзер. В текстурную память влезает до 2^15 пикселей на каждую ось для моей видеокарты. Думаете будет лучше разбить на куски (тайлы) ? Или же есть более оптимальный путь ?

#6
15:35, 2 дек. 2016

Abraziv
> будет лучше
кому и чем? ты так и не сказал, для чего тебе это нужно и вообще из каких критериев оценивается результат. 2^15 — это 32k x 32k разрешение, то есть около 4Gb данных для 32-битного цвета. такие изображения вообще обычно никто не хранит одним куском, они и так обычно на тайлы разбиты.

#7
15:37, 2 дек. 2016

Нужно построить спектрограмму. Размер бывает очень большой, вплоть до 512 МБ.

#8
15:49, 2 дек. 2016

Abraziv
Если нужно прям экономя видео память по черному и вывести все сразу, то можешь:
1) создать текстуру (A) 4096x4096
2) создать сколько тебе надо чтобы заполнить экран текстур (B) 512x512
3) залить в A фрагмент из твоего огромного файла
4) отрендерить квад с текстурой A в текстуру B
5) если есть еще фрагменты повторить с пункта 3
6) вывести на экран квады с текстурами B

#9
16:02, 2 дек. 2016

Речь не идёт в экономии видеопамяти. Будем предполагать что её минимум 512МБ у всех. Поэтому по чёрному экономить не будем.

#10
16:09, 2 дек. 2016

Abraziv
тогда создавай не 1 а не сколько больших текстур, и рендери разом в мелкие. Если же можешь загрузить сразу все большие, то все их и выводи прямиком на экран. Но еще проще создать mip-map'ы заранее с нужным качеством и сразу подгружать нужный уровень.

#11
18:12, 2 дек. 2016
минутка косплея роннико

Большой битмап в окно не пролезет!

Abraziv
Кроши на тайлы и рисуй по-человечески.

#12
23:52, 2 дек. 2016

Максимально просто, если озу хватит:
Держать весь битмап в оперативке и каждый кадр создавать текстуру из пикселей попадающих в экран и рисовать её.

#13
5:24, 3 дек. 2016

Идея с тайлами позволит держать часть данных в ГПУ, разгрузить процессор и шину.

#14
8:52, 3 дек. 2016

Получается функции glTexImage2D и glubuild2dmipmaps копируют битмэп в память gpu? Выходит загрузил в gpu и можно удалять битмэп?
Жесть конечно, без примеров то.

Страницы: 1 2 3 4 5 6 7 Следующая »
ПрограммированиеФорум2D графика и изометрия

Тема в архиве.