Вопрос по android – Живые обои Water Ripple Effect

9

Я работаю над живыми обоями, которые включают в себя некоторые эффекты водной ряби при прикосновении к экрану, но я немного застрял.

Было бы лучше создать несколько изображений и просмотреть их, чтобы создать анимацию пульсации, или лучше немного исказить растровое изображение, прежде чем поместить его на холст?

это это видео с очень хорошим волновым эффектом, сделанным через OpenGL.

У меня еще нет опыта работы с OpenGL, и мне было интересно, можно ли создать эффект 2D-воды на живых обоях?

Одна из встроенных в Android живых обоев - это рябь воды, так что это, безусловно, возможно. Wyzard

Ваш Ответ

3   ответа
4

но я считаю, что типичный способ создания эффектов воды в OpenGL - использовать фрагментный шейдер. Используя статическое изображение в качестве текстуры, ваш шейдер может изменять координаты текстуры, используемые для выборки этого изображения, чтобы искажать его произвольным образом.

Вычисляют направление пикселя и расстояние от центра круга и корректируют текстурную координату в направлении или от центра круга на основе синусоидальной функции расстояния, и вы должны получить хороший эффект пульсации.

Судя по описанию того видео YouTube, которое вы связали, оно звучит так, как будто вы используете сетку треугольников и корректируете координаты текстуры только по вершинам. Это тоже должно сработать, но это не будет выглядеть так же хорошо, если вы не используете довольно тонкую сетку. Делать это на пиксель с помощью фрагментного шейдера - идеальный вариант, но я не знаю, вызовет ли это проблемы с производительностью на графическом процессоре телефона.

Знаете ли вы какие-либо возможные примеры того, как сделать что-то подобное в OpenGL? Gatekeeper
Не случайно, извини. Если вы новичок в OpenGL, я рекомендую вам узнать о фрагментных шейдерах и выборке текстур в целом, и как только вы это поймете,then беспокоиться об использовании их, чтобы сделать рябь.
17

поэтому поделюсь своим опытом:

В качестве эталонной реализации я взял порт JavaScript Chikuyonok Сергея Java-алгоритма Нила Уоллиса. Вот игровая площадка, где вы можете поэкспериментировать с оригинальным кодом JS:http://jsfiddle.net/esteewhy/5Ht3b/6/

Сначала я перенес JS-код в Java только для того, чтобы понять, что на моем оборудовании Huawei U8100 нет возможности сжать более 1 кадра в секунду. (Есть несколько подобных попыток в сети с единственным выводом: они смехотворно медленны).

Кстати, этот SO-ответ был весьма полезен, чтобы получить общее представление о том, как кодировать интерактивную графику в Android:https://stackoverflow.com/a/4946893/35438, Оттуда я позаимствовал счетчик кадров в секунду.

Тогда я решил попробовать Android NDK, чтобы переопределить оригинальный алгоритм в чистом C (моя первая встреча с ним за 10+ лет!). Несмотря на то, что документы NDK несколько сбивают с толку (особенно в отношении требований и предпосылок), все это работает как обаяние, поэтому я смог достичь 30 кадров в секунду - это может быть не слишком впечатляющим, но все же радикальное улучшение по сравнению с Java-код

Наконец, я разместил всю свою работу в Интернете:https://github.com/esteewhy/whater так что не стесняйтесь играть с этим. Это содержит:

Interactive bouncing ball code mentioned above (just for the reference). Water ripples Java port (slow like hell!) Water ripples C implementation (needs NDK to compile and JDK to create .h file).

(Проект не является «чистым», т. Е. Все двоичные файлы имеются, поэтому можно попробовать запустить его «как есть» даже без NDK.)

enter image description here

Можете ли вы сказать мне, как я могу изменить фон для моего изображения в вашем коде? Когда я пытался, у меня есть NullPointerException Спасибо
6

https://github.com/MasDennis/RajawaliExamples

Он использует фреймворк / библиотеку OpenGL ES rajawali. Вы можете скачать приложение rajawali examples с маркета, чтобы посмотреть, как оно выглядит. Просмотрите список & quot; src & quot; папку, и вы увидите действие TouchRippleEffect и рендерера. Надеюсь, это поможет.

Я скачал пример Раджавали из игрового магазина. В этом 27 есть Touch Ripples Effect, но когда я запускаю исходный код, часть комментируется ... У меня есть строка ниже в моем исходном коде ... org.rajawali3d: rajawali: [email protected] Может кто-нибудь помочь решить Эта проблема

Похожие вопросы