Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Общие темы > Болтовня

Болтовня Разговоры на любые темы (думайте, о чем пишите)

Ответ
 
Опции темы
Старый 27.09.2010, 18:37   #1
Venom2
 
Сообщений: n/a
OpenGL батчинг и глюк с прозрачностью

Незнаю в какой раздел писать, т.к. вопрос чисто по 2D графике, opengl.
Вобщем экспериментировав с opengl решил сделать вывод спрайтов с батчингом.
Для начала сделал тупо сбор последовательностей спрайтов с одинаковой текстурой и блендингом в vbo и его выводом с перезапиранием, если появлялся неподходящий спрайт.
Для партикловой системы, где всегда имеем много однотипных спрайтов, еще сойдет, но для реальной игровой ситуации уже профит сомнительный (точнее надо самому следить за группировкой спрайтов и т.п. чтобы такой батчинг был выгодным).
Решил сначала группировать спрайты по разным vbo. Сразу проблема - что делатьс порядком вывода, ведь после перегруппировки он теряется. Решаю, заюзав depth-test, в z координату записываю порядок в виде удаленности (т.к. проекция ортографическая, на отображение не влияет).
Теперь еще одна проблема с прозрачностью. У спрайтов с "нарушеной" последовательностью вывода, альфа-канал "затирает" все что под ним, на скрине это хорошо видно у спрайта 3 (цифрами отмечен порядок вывода)
бленд стандартный (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA), depth-func GL_LEQUAL
Как от него избавиться?
Миниатюры
Нажмите на изображение для увеличения
Название: glitch.jpg
Просмотров: 1125
Размер:	22.7 Кб
ID:	11380  
 
Ответить с цитированием
Старый 27.09.2010, 19:28   #2
jimon
 
Сообщений: n/a
Ответ: OpenGL батчинг и глюк с прозрачностью

Venom2
не проще ввести слои ? спрайту задается слой, а потом они группируются по слоям (или в разные vbo или в один vbo но сначала пишем нижние слои, а потом верхние), в итоге избавляемся от zbuffer и твоей проблемы
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
pax (27.09.2010), Venom2 (27.09.2010)
Старый 27.09.2010, 19:42   #3
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: OpenGL батчинг и глюк с прозрачностью

Сообщение от jimon Посмотреть сообщение
Venom2
не проще ввести слои ? спрайту задается слой, а потом они группируются по слоям (или в разные vbo или в один vbo но сначала пишем нижние слои, а потом верхние), в итоге избавляемся от zbuffer и твоей проблемы
Аналогично в XNA в SpriteBatch похоже.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 27.09.2010, 19:42   #4
Venom2
 
Сообщений: n/a
Ответ: OpenGL батчинг и глюк с прозрачностью

Сообщение от jimon Посмотреть сообщение
Venom2
не проще ввести слои ? спрайту задается слой, а потом они группируются по слоям (или в разные vbo или в один vbo но сначала пишем нижние слои, а потом верхние), в итоге избавляемся от zbuffer и твоей проблемы
Чего-то не понял, слои это фактически порядок вывода группы получается?
И как тогда батчинг делать если в слоях будут разношерстные спрайты?

ЗЫ
Короче как я понял, для того чтобы не было такого глюка надо запретить рисовать в depth-buffer полупрозрачные пиксели Как вот только это сделать?

ЗЫЗЫ
А нет, это не то, тогда альфа будет затиратся другими спрайтами, и будет маска вместо альфы
 
Ответить с цитированием
Старый 27.09.2010, 20:59   #5
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: OpenGL батчинг и глюк с прозрачностью

Сливай в атласы картинки и рисуй. Можно это делать даже в реалтайме (создаем очередь рисуемых картинок, заливаем их в 1 текстуру (рендером в текстуру) без всякого выпендрежа по оптимальной укладке даже, формируем список треугольников в соответствии с необходимым порядком, рисуем без всяких там depth-buffer'ов и прочей ереси).
Ну и таки - оно нахрен не нужно на ПК, угу. Исключая те самые партиклы, где проблемы с очередью отрисовки в общем-то и нет. А так - оно не будет узким местом, скорее ты филлрейтом нагнешь видяху.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Venom2 (27.09.2010)
Старый 27.09.2010, 21:48   #6
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: OpenGL батчинг и глюк с прозрачностью

тебе же один фиг надо будет пересчитывать буффер каждый кадр, не?
(Offline)
 
Ответить с цитированием
Старый 27.09.2010, 21:57   #7
Venom2
 
Сообщений: n/a
Ответ: OpenGL батчинг и глюк с прозрачностью

Сообщение от HolyDel Посмотреть сообщение
тебе же один фиг надо будет пересчитывать буффер каждый кадр, не?
Ну да, в начале кадра маплю, потом во время вызовов отрисовки проверяю спрайты и копирую данные в буфер, помимо этого вывожу что накопилось в буфере если не влазит или другая текстура\бленд-режим у спрайта.
А хотел сделать полный батчинг, т.е. разместить все по буферам.

Короче и вправду нахрен этот авто-батчинг, сделаю ручное управление с атласами, авто только для партиклов.

Всем спасибо, все свободны
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 19:36.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com