Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Эффект воды


Автор: Annuta 3.9.2007, 22:40
Подскажите пожаста, у меня есть текст, который я отображаю на форме /в едите/, каким способом проще всего осуществить его смену "эффектом воды"... Т.е. поялвяется текст.. на 1 минуту, затем "волнами бликами" становится прозрачным... поялвяется другой текст... 
Что лучше использовать - что проще ? Может где почитать ?

Автор: ZeroMem 10.9.2007, 17:31
Эээ... ну так сразу сложно сказать. Но я бы сделал это через шейдеры на DirectX. Но это уже изврат я так думаю.

Вообще, мысль есть такая.
Вот тебе надо одну надпись на другую сменить. Сделай так. Ты зарисуй в памяти эти надписи, просто отрисуй в некоторые 2 картинки одинакового размера. А далее уже как ты хочешь чтобы твое "водное перетикание" шло. Воспользуемся физикой. 
Примем некоторый волновой закон, вида y = A*sin(kx [+ phi]) за истинный для твоей волны. Далее, проходя по всей картинки нужно смешивать цветовые компоненты пикселя с учетом этого закона. То есть берешь где-нибудь точку (x0, y0) и считаешь, что это у тебя источник волновых колебаний. В зависимости от удаленности (можно по т. Пифагора ее посчитать) от источника, получаешь y. Далее простая пропорция:

A - текущая компонента цвета.
y - новая компонента цвета.

=>
(новая компонента цвета) = y * (текущая компонента цвета) / A.
Амплитуду A можно просто подобрать. 


Автор: Annuta 2.10.2007, 10:51
...Спасибо! ...Да тут видно без физики никуда!!! Буду думать!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)