![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#41 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]() Код:
По поводу блендига, это всего лишь разные способы вычисления альфы в шейдере. Впринципе я не сталкивался с такой проблемой, т.к. обычно работаю с 2D. Но для эффектов(система частиц, вывод полупрозрачных объектов...) я использовал бы другой способ. Сначала получил бы буфер глубины, путем рендеринга не прозрачных объектов в текстуру(читать тут http://code.google.com/p/gl33lessons/wiki/Lesson06). Затем просто отрендерил бы сцену с непрозрачными объектами и в самую последнюю очередь отсортированный список прозрачных объектов с выключенным тестом глубины, т.к. этот тест будем проводить мы в шейдере. Но и тут не все гладко, хотя теперь можно полноценно использовать альфу и мутить всякие эффекты не опасаясь, что они будут проявляться сквозь стены(пример недоработки в skyrim, размытие горения пламени видно сквозь предметы) Можно узреть глубину своей сцены)) Код:
Последний раз редактировалось Kostia; 08.01.2012 в 18:36. |
![]() |
![]() |
![]() |
#42 | |
Форумчанин
Регистрация: 03.11.2011
Сообщений: 230
|
![]()
Проблему с перекрывающиеся листвой пока решил топорно – альфа тест и запись в буфер глубины – но, это подходит для объектов с полностью прозрачными областями текстуры. Как ты правильно заметил для листвы, травы и т.п.
Объекты с разной (0-255 Alpha) прозрачностью рисую последними в сцене, без записи в буфер глубины (но с тестом глубины). Порядок от дальних к ближним, при этом каждый такой объект рисуется в два этапа - сначала отсекаем все видимые треугольники у объекта (glCullFace(GL_FRONT)) – рисуем задние, затем наоборот – отсекаем задние glCullFace(GL_BACK) - рисуем передние. Если мысленно представить себе два стеклянных сосуда - один внутри другой, то порядок будет следующий. Сначала рисуем заднюю часть большого, потом заднюю часть маленького, потом переднюю часть маленькой и последней рисуем переднюю часть большого сосуда. Сделал кубик с частично прозрачными местами, можно просмотреть через него на сценку. Вроде все работает как надо. Цитата:
Обновленная версия. Управление WASD + Mouse Wheel |
|
![]() |
![]() |
![]() |
#43 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]()
Выглядит отлично!
Да, то что в 2 этапа это правильно. Прикручивай теперь рендер в текстуру, если еще не прикрутил и попробуй реализовать тени, bloom или HDR. И попробуй включить MSAA или постэффект FXAA GLSL FXAA во сложении rt_w и rt_h - размеры текстуры. Я их статично для тестов задал, по хорошему их из программы передавать нужно. Первоначальный код брал тут http://www.openengine.dk/code/extens.../TinyFxaa.glsl И сделай пожалуйста плавное перемещение камеры, а то долго мучился чтобы во внутрь куба залезть Последний раз редактировалось Kostia; 11.01.2012 в 21:55. |
![]() |
![]() |
![]() |
#44 |
Форумчанин
Регистрация: 03.11.2011
Сообщений: 230
|
![]()
Спасибо, моделил, развертку делал и текстуры рисовал все сам.
Да рендер в текстуру прикрутить в последствии придется для пост-эффектов. Пока хочу сделать отсечение объектов по пирамиде видимости камеры (фруструму). Да и несколько унифицировать рендер объектов сцены и ввести соответствующие менеджеры ресурсов, а то каждый раз забивать новую переменную и ее спутник текстуру... - не выход, особенно если кол-во объектов в сцене будет расти. Еще прикрутить автоматическую сортировку объектов сцены, по очередности прорисовки и материалам. Материалы ввести. И еще пожалуй из первоочередных сделать проверку - куда указывает курсор, на какой объект и в какую его часть. А камере я только колесо мыши забыл посадить на time based move – Cam.walk(50 * ElapsedTime); - где ElapsedTime – время за которое прорисовался предыдущий кадр (0.0 – 1.0 c); (вопросы на перспективу) Хотел спросить ты не знаешь, как Depth of Field делается? И Blur как делают, усреднение соседних пикселей? Я смотрел в примерах Кренделя блюр, но там он какой-то слабенький, а чтобы совсем размазать сцену и постепенно наводить резкость? И в чем принципиальная разница между MSAA и FXAA? Что дешевле в плане производительности и что более качественней? А то шейдер FXAA больно уж серьезный, тогда как MSAA можно включить/выбрать с помощью wglChoosePixelFormatARB и железо само обрабатывает острые грани. Последний раз редактировалось Warn; 12.01.2012 в 10:05. |
![]() |
![]() |
![]() |
#45 | |||
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]() Цитата:
Цитата:
radian blur fragment program: Код:
Цитата:
Разница между ними в том, что FAXX - пост эффект и обрабатывает всю сцену целиком, а MSAA сглаживает только грани. Более качественное, это их совместное использование =) http://www.hmrengine.com/blog/?p=332 http://pmg.org.ru/nehe/nehe46.htm с FBO чуть сложнее вот конструктор в моем классе: Код:
Последний раз редактировалось Kostia; 12.01.2012 в 10:58. |
|||
![]() |
![]() |
![]() |
#46 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]()
Матричные преобразования(фильтры) над изображениями тоже достаточно интересные.
Есть например выделение границ или тоже размытие. По размытию могу добавить, что можно взять один из векторов треугольника паскаля помножить его на транспонированного самого себя и получить матрицу пропорций смешивания цветов. Например (1 2 1)*(1 2 1)Т = 1 2 1 2 4 2 1 2 1 Ну и считаешь сумму элементов и делишь либо сразу: 1/16 2/16 1/16 2/16 4/16 2/16 1/16 2/16 1/16 либо после применения фильтра А силу смешивания можно регулировать либо посчитав матрицу по больше(могут возникнуть проблемы), либо выполнив несколько проходов(качественно), либо проще всего менять средний элемент матрицы(немного лучше первого способа, в плане отсутствия проблем размеров матрицы, почти -_-), но в любом случае для увеличения размытия нужно увеличивать матрицу, кроме второго. Если центральный элемент устремить к бесконечности, то получим при смешивании тот же цвет, если к нулю, то цвет в центре не будет принимать участия в смешивании. как то так ^^ PS: завтра еще один экзамен, а я тут матрицы считаю))) Последний раз редактировалось Kostia; 12.01.2012 в 21:10. |
![]() |
![]() |
![]() |
#47 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]()
А теперь оптимизация. Для нормального блюра, чтобы всего за 2 проходы было все нормально заблюрено из матрицы можно взять вертикальный и горизонтальный центральные вектора и делать это так, как делается в "Gaussian Blur".
Сначала размазать по горизонтали используя эти коэффициенты, а потом по вертикали. Оптимизация на лицо, взяв матрицу размером 7*7 и делая blur в 2 проходы, мы получим 7+7=14 выборок из текстуры, а при однойном проходе 7*7=49 выборок на пиксель. Последний раз редактировалось Kostia; 12.01.2012 в 21:02. |
![]() |
![]() |
![]() |
#48 | |||
Форумчанин
Регистрация: 03.11.2011
Сообщений: 230
|
![]() Цитата:
Код:
Цитата:
Как буду прикручивать постпроцессинг - блюр, попробую сделать. Cегодня проверку фрустума прикрутил, долго ловил баг с проверкой сфер, пока не понял, что нормирую плоскость так же так и вектор 4d %. Цитата:
|
|||
![]() |
![]() |
![]() |
#49 | ||
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#50 |
Форумчанин
Регистрация: 03.11.2011
Сообщений: 230
|
![]()
Соображаю над сцено-графом.
Охото чего-то понятного, удобного и эффективного. Пока надумал что-то вроде этого) Псевдо - Код:
Код:
Последний раз редактировалось Warn; 13.01.2012 в 10:20. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программа для проверки (правильности кода). Контекст. | AmbaQ | Софт | 4 | 14.11.2010 16:50 |
Контекст устройства. Основы работы с изображением | Claster | Win Api | 1 | 03.04.2010 00:26 |
BitBlt на контекст DC и его альтернатива | notHaker | Мультимедиа в Delphi | 7 | 03.12.2009 01:04 |
Контекст воспроизведения OpenGL | Gerzs | Мультимедиа в Delphi | 5 | 23.11.2009 11:33 |
Контекст воспроизведения OpenGL | Sergeevich | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 6 | 08.11.2009 21:50 |