Glow эффект. Демка.

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Glow эффект. Демка.

Сообщение Mikle » 27.01.2008 (Вс) 10:27

Сделал небольшую демку, эффект основан на рендере в текстуру.
Изображение объекта рисуется в текстуру белым материалом, используется две текстуры через кадр по очереди, перед рисованием объекта рисуется результат прошлого кадра, который немного затемняется вычитанием TextureFactor. Значение TextureFactor рассчитывается так, чтобы скорость затемнения не зависила от FPS. Кроме того, результат прошлого рендера рисуется со сдвигом на 0.5 пикселя, в результате этого каждый пиксель размазывается на 4 пикселя. По идее нужно сдвигать не на 0.5 пикселя, а на величину, зависящую от FPS, чтобы скорость размытия тоже не зависела от FPS, предлагаю желающим доделать.
У вас нет доступа для просмотра вложений в этом сообщении.

Ktulhu
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 14.07.2007 (Сб) 14:03
Откуда: Киев, Р'льех

Сообщение Ktulhu » 27.01.2008 (Вс) 13:30

Выглядит очень даже гуд. Больше, наверное, ничего и не прокомментирую. Я так понял, метод немного нестандартный? В SDK кажись это по-другому делали...

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 27.01.2008 (Вс) 16:03

Mikle
Дождался наконец))) Идея понятна а реализация не очень. Не мог бы ты пояснить эти строки:
Код: Выделить всё
    n = Int((QTime - t) / Glow)
    t = t + n * Glow
    If n > 127 Then n = 127
    n = n * &H1010101
    d3dDevice.SetRenderState D3DRS_TEXTUREFACTOR, n
    RTIndex = 1 - RTIndex

И как сделать чтобы свечение было постоянным... Ну чтобы не "пульсировало"
#define ROFL 0xDDDD

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 27.01.2008 (Вс) 18:02

Это:
RTIndex = 1 - RTIndex
смена номера текстуры render target. 0..1..0..1..0..
Остальное - рассчет TEXTUREFACTOR, исходя из FPS.
If n > 127 Then n = 127
Это ограничение на случай тормоза, можно и без этого, просто при временных остановках будет вылетать.
У меня свечение не пульсирует,пробовал на разных компах...

DODge
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 126
Зарегистрирован: 30.07.2006 (Вс) 0:25
Откуда: Нижний Новгород

Сообщение DODge » 27.01.2008 (Вс) 19:35

Отличная технология! :thumright: Наверное, немного доделав, можно получить ещё и Motion Blur. А так выглядит вполне эффектно. Кстати, у меня тоже всё нормально - ничего не пульсирует, всё аккуратно рисуется.
CPU = Intel Core i5 6500 @ 3.2 GHz
VGA = GeForce GTX 650Ti 2Gb
RAM = 8 ГБ DDR4 @ 2133 MHz
OS = Windows 10 Pro 64-bit
IDE = Microsoft Visual Studio Community 2017 (Visual Basic.NET)
GAPI = SharpDX 9 + 12

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 27.01.2008 (Вс) 23:56

DODge
Motion Blur я делал и получалось качественно... Было два способа тоже рендером в текстуру. А вообще глоу тру эффект))
Mikle
**** виндос 2000. Подайте сюда Билли....© South Park
Попробую на XP. Спасибо))
#define ROFL 0xDDDD

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 28.01.2008 (Пн) 0:06

у меня мигает даже а не пулисирует
- белый свет 2-3 мм по линии чайника

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 28.01.2008 (Пн) 12:07

Bonesnapper
Именно... :(
#define ROFL 0xDDDD

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 28.01.2008 (Пн) 13:09

У меня на одном компьютере дергалось пока не позакрывал в трее все лишнее.

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 28.01.2008 (Пн) 14:58

воо щас загрузил виндовс и запустил сразу и все вроде нормально
- только вот пульсирует все равно немного -
то есть есть так сказать основное свечение
а дополнительно с ним еще что то подмигивает
У вас нет доступа для просмотра вложений в этом сообщении.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 28.01.2008 (Пн) 17:45

Mikle
А как изменить цвет ориола?
#define ROFL 0xDDDD

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 29.01.2008 (Вт) 16:48

DirectXManiac
Добавь в квад в вертексы цвет и домножай.
Я тут почитал немного, как выяснилось, у меня это не Glow, а смесь Glow с Motion Blur.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 29.01.2008 (Вт) 18:02

Bonesnapper
Ого у тебя быстродействие :!:
Отсюда, возможно, и проблемы. Дело в том, что Motion Blur составляющая эффекта независима от FPS, но Glow зависима, как я в первом сообщении писал, я проверял на компьютерах, где FPS был от 200 до 900, но никак не 3131.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 29.01.2008 (Вт) 19:43

Mikle
Понял... У меня тоже высокий FPS... Под 1500 прыгает...
Слушай... Как можно быстро заблюрить текстуру? Хорошо бы код...
Не Motion Blur. То что ты говорил с фильтрами что-то не совсем катит...
То что я тебе кинул - пытался реализовать пример с GameDev. Но падает на LockRect... почему не пойму
#define ROFL 0xDDDD

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 13.06.2008 (Пт) 7:01

А как сделать Эффект ИКО? Радиально круговой развёртки. При условии что радиальные линии рисуются точками?
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 13.06.2008 (Пт) 8:53

netdemon
Тебе нужно сымитировать экран локатора? Все зависит от исходных данных, то есть как у тебя представлен мир.
При условии что радиальные линии рисуются точками

Какое-то непонятное условие, а чем еще рисуется вообще всё на дисплее?

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 13.06.2008 (Пт) 14:08

Mikle

Я имел ввиду что развёртка будет рисоваться методом движения точки от условного центра по радиальной линии и через определённые промежутки пиксель должен подсвечиваться (отметки дистанции) Причём 10 км менбше по яркости чем 50 ти км. Таким же макаром отметки азимута 10 и 30 ти градусные. Десятки тусклее 30 ток.

И естественно отметки от целей и местных предметов. Отметки целей выглядят как душки толщина которых уменьшается к краям а длина тем больше чем дальше они от центра развёртки.

Вот так примерно. Но это далеко не всё. :(
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 14.06.2008 (Сб) 9:21

netdemon
В чем конкретно загвоздка? Или у тебя не получается все?

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 14.06.2008 (Сб) 12:25

Я пробовал реализовать без использования directX. И через стандартные средства и через API Но результат был всегда один-сильно тормозит. А в DirectX я полный профан короче "ноль"! :(
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 14.06.2008 (Сб) 12:57

Я понял что начинать нужно так:

Код: Выделить всё
Public dx8 As New DirectX8
Public d3d As Direct3D8
Public d3dx As New D3DX8
Public d3dDevice As Direct3DDevice8
Public Caps As D3DCAPS8



Dim DispMode As D3DDISPLAYMODE
Dim d3dpp As D3DPRESENT_PARAMETERS

   
  Set d3d = dx8.Direct3DCreate
   
  d3d.GetDeviceCaps D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Caps
   
  d3d.GetAdapterDisplayMode D3DADAPTER_DEFAULT, DispMode

  d3dpp.Windowed = True
  d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD
  d3dpp.BackBufferFormat = DispMode.Format
  d3dpp.BackBufferCount = 1
  d3dpp.EnableAutoDepthStencil = True
  d3dpp.AutoDepthStencilFormat = D3DFMT_D16
   
  Set d3dDevice = d3d.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, d3dpp)
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 14.06.2008 (Сб) 14:12

netdemon
Это ты инициализируешь d3dDevice...
Я пробовал реализовать без использования directX. И через стандартные средства и через API Но результат был всегда один-сильно тормозит.

Покажи результат своей работы, который тормозит.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 14.06.2008 (Сб) 14:53

Вот результат который тормозит:
И результат который получился на Direct3D
У вас нет доступа для просмотра вложений в этом сообщении.
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

Ktulhu
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 14.07.2007 (Сб) 14:03
Откуда: Киев, Р'льех

Сообщение Ktulhu » 14.06.2008 (Сб) 16:48

я так понял нужно нарисовать то, что во втором примере, методами dx.
мой вариант решения: приготовить текстуру полностью отрисованного экрана и тестуру, которая будет вращатся и подсвечивать первую.
*сорри, немного туповато описал*
таким образом вообще летать должно на dx.
кстати, у меня DRD.rar не тормозит особо

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 14.06.2008 (Сб) 17:00

Ktulhu писал(а):я так понял нужно нарисовать то, что во втором примере, методами dx.
мой вариант решения: приготовить текстуру полностью отрисованного экрана и тестуру, которая будет вращатся и подсвечивать первую.
*сорри, немного туповато описал*
таким образом вообще летать должно на dx.
кстати, у меня DRD.rar не тормозит особо


А теперь в DRD поменяй значение константы DEGREECE_STEP на 0.1 и посмотри что получится.
А насчёт того что не тормозит. У тебя машина какая? Небось навороченная.. :(
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 15.06.2008 (Вс) 1:38

netdemon
А почему бы не рисовать просто POINTLIST? в цикле собирать массив и рисовать... Эффект один и тот же и по скорости должно быть нормально
#define ROFL 0xDDDD

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 15.06.2008 (Вс) 3:53

DirectXManiac

Да но только отметки от целей должны выглядеть как дужки и рисоваться в реальном времени с развёрткой. :(
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.06.2008 (Вс) 6:59

Mikle
По поводу сабжа. Почему свечение как-бы опаздывает за чайником, и иногда рывками догоняет его?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 15.06.2008 (Вс) 10:36

Хакер
Как я в начале написал, демка не доделана, эффект состоит из двух частей, одна из которых зависима от FPS.
netdemon
Для твоей задачи, пожалуй, так усложнять и не нужно. Вот пример на мультитекстурировании.
Уточни про цели, это просто точки с координатами, или объекты, имеющие форму? Они просто движутся, или еще и вращаются? Как вообщеони заданы?
Попытка приаттачить файл к теме почему-то вызывает ошибку, выкладываю сюда:
http://tuapse-mikle.narod.ru/RadarD3D.rar

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 15.06.2008 (Вс) 16:03

Mikle

Цель это цельный объект, который подсвечивается. Выглядит как душка утолщённая ближе к центру. Сам по себе он двигается меняя свои координаты (азимут, дальность). Азимут угол между линиями 0 градусов и линией проходящей через центр отметки от цели.

Я так понимаю нужно добавить ещё одну текстуру и поместить её между подложкой и вращающейся текстуры и она будет подсвечена так же как и развёртка. :)
У вас нет доступа для просмотра вложений в этом сообщении.
Последний раз редактировалось netdemon 15.06.2008 (Вс) 17:23, всего редактировалось 3 раз(а).

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.06.2008 (Вс) 16:05

Mikle
Опиши пожалуйста ошибку (желательно в ЛС).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26

    TopList