Геометрия водной поверхности

Просмотров: 771 (за сегодня: 9).

Не знаю почему, но не могу додуматься до простейшего алгоритма прохода волн по поверхности воды (двумерный массив вершин). Понимаю, что что-то надо делать с синусом-косинусом как вариант... но туплю.
И ещё - 3d (OpenGL конкретнее)-программирование начал изучать недавно, поэтому подскажите, как этот двумерный массив вершин отрисовать правиленее (я пока рисую отдельными четырёхугольниками, извращённо проходя по массиву...)

ср, 2007/04/18 - 16:14

Дата регистрации:
17.04.2007 (11:05)
Последнее сообщение:
24.04.2009 (19:20)
Последние обращение:
10.09.2009 (18:42)
Сообщений: 18

Привет.
Ну первое это смотря для чего делешь воду, если это окен, то да, видимо надо делать реальные геометрические волны. В этом случае есть смысл обратить внимание на такую вещь как displacement mapping. Гугль много знает об этом. Более применительно к твоей теме о нем (displacement mapping) можно почитать в GPUGems, точно не помню в которой из 2х частие. Но ты без труда найдешь её на сайте nVidia, если нету самой книги. Вообще я не занимался еще водичкой, но могу предположить что сам по себе sin не покатит, его надо будет сгладить. На самом деле физика поведения волн ооочень не проста и применить реальные физические законы пока возожным не представляется особо.. Опять же я нее могу посоветовать нечто однозначное. Есть еще кинжка Грега Снука "3Д-ландшафты в реальном времени блаблабла". Вот там есть глава, посвященная именно геометрическим волнам. Алгоритм основан на некой работе по гармоническим рядам Фурье, я лишь только пролистывал, так что сказать конкретно не могу. Но скажу одно, сделать хорошую апроксимацию водички не просто.
Значит если ты не делаешь океаны и т.п., что чаще всего бывает, то обойтись можно EMBM, или обычным нормал маппингом (а там уже анимируй её как хочешь, хоть в максе руками или беря готовые uv-карты из инета, на сколько знаю найти можно:)). В этом случае нету лишней геометрии и ненадо гемороится о её рендеринге. Собственно такой вариант более применителен. Статейку по embm и водичке можно найти на mirgames.ru.

Что касается рендеринга водного меша, то рисовать его по отдельному четырехугольнику - жесть. Рисовать надо весь меш целиком, если нету причин разхбивать его. но если воды много, то возможно будут лоды, тогда рисоватся будут пачками некоторыми, но явано не по треугольнику :-) Ну а анимировать стоит в шейдере :-)

Don't think you are... know you are

ср, 2007/04/18 - 20:29
Дата регистрации:
18.04.2007 (01:19)
Последнее сообщение:
20.04.2007 (19:32)
Последние обращение:
24.04.2007 (18:27)
Сообщений: 8

Не - никаких шейдеров! Вода - для моря в игрухе на курсовой - типа как в старых автоматах, стрельба по проплывающему кораблю вдали.. шейдеров быть не может - у меня их в видюхе ещё не придумали. А вода в демке water by Jan Horn -меня устроила бы. Он её делал с помощью GL_QUAD_STRIP - брал координаты из массива по которому проходил и считал волны. Но там волны от капель. А мне - просто морские волны.

чт, 2007/04/19 - 07:33
Дата регистрации:
19.04.2007 (11:31)
Последнее сообщение:
02.06.2007 (19:26)
Последние обращение:
02.06.2007 (19:26)
Сообщений: 21

если как в автоматах, то проще спрайтами

чт, 2007/04/19 - 12:01

Дата регистрации:
17.04.2007 (11:05)
Последнее сообщение:
24.04.2009 (19:20)
Последние обращение:
10.09.2009 (18:42)
Сообщений: 18

Хм... ненаю как там в старых автоматах, не играл :-) Но видимо тада тебе геометрические волны вовсе не нужны. Тем более чтобы получить болемене реалистичный вид надо погемороится, да и производительность то...
В твоем случае определенно надо делать эмуляцию геометрической волны спрайтами, да. Проанимировав текстурку можно вообще неплохого эффекта добиться.

Don't think you are... know you are

чт, 2007/04/19 - 12:37
Дата регистрации:
18.04.2007 (01:19)
Последнее сообщение:
20.04.2007 (19:32)
Последние обращение:
24.04.2007 (18:27)
Сообщений: 8

Не, народ:) Неправильно поставленный вопрос приводит к большим проблемам:)
Вода у меня будет в 3Д, вдали будет плыть кораблик (кстати, где про загрузку меша (без анимации) прочитать?), в него целимся и стреляем:) Вот... Камера подвешена над водой почти параллельно горизонту...
Т.е. вся задача - прогнать по массиву координат Z волны...

чт, 2007/04/19 - 22:24
Дата регистрации:
21.04.2007 (13:08)
Последнее сообщение:
22.04.2007 (00:23)
Последние обращение:
09.05.2007 (23:28)
Сообщений: 5

azazeo, ты сам ответил на свой вопрос))
Координату z можно изменять так: z=a*sin(k*t), коэфициенты "а" и "k" - экспериментально подбираешь спрева для одной волны так, чтобы она была похожа на волну,
затем юзаешь их для всего масива.
всё, волны есть.
(t - естессно, прототип времени, типа счётчик цикла)

Можно ещё, прогоняя z для всего массива, незначительно рандомно откланять "а" и "k" в стороны (увеличивать\уменьшать процентов на 25), тогда волны получатся неодинаковой высоты и длины, почти как в природе))).

К координатам можно привязать спрайты, с анимированной текстурой (как советовал ранее SimpleProger).

сб, 2007/04/21 - 14:07
Дата регистрации:
21.04.2007 (13:08)
Последнее сообщение:
22.04.2007 (00:23)
Последние обращение:
09.05.2007 (23:28)
Сообщений: 5

azazeo, ты сам ответил на свой вопрос))
Координату z можно изменять так: z=a*sin(k*t), коэфициенты "а" и "k" - экспериментально подбираешь спрева для одной волны так, чтобы она была похожа на волну,
затем юзаешь их для всего масива.
всё, волны есть.
(t - естессно, прототип времени, типа счётчик цикла)

Можно ещё, прогоняя z для всего массива, незначительно рандомно откланять "а" и "k" в стороны (увеличивать\уменьшать процентов на 25), тогда волны получатся неодинаковой высоты и длины, почти как в природе))).

К координатам можно привязать спрайты, с анимированной текстурой (как советовал ранее SimpleProger).

сб, 2007/04/21 - 14:07
Дата регистрации:
21.04.2007 (13:08)
Последнее сообщение:
22.04.2007 (00:23)
Последние обращение:
09.05.2007 (23:28)
Сообщений: 5

сорри, народ, за одиноковые сообщения, что-то я заглючил))

сб, 2007/04/21 - 14:10
Дата регистрации:
18.04.2007 (14:33)
Последнее сообщение:
21.04.2007 (15:48)
Последние обращение:
23.04.2007 (19:24)
Сообщений: 1

Зри в корень, аля в гугль: там много чего есть :-).
Скажу еще, что реалистичные волны делаются путем решения дифференциальных уравнений второго порядка (кажется). Некоторые математические выкладки одного чела(не помню его ник) выложены в виде статьи на www.gamedev.ru.

сб, 2007/04/21 - 15:48