-
Здравствуйте Мастера! Начал писать игру на [b]GLScene[/b]. Большая часть игрового времени будет проводиьтся на воде. Какие есть способы создать максимально реалистичную водную поверхность (с учетом возможностей этого движка). Хотелось бы сделать хоть какуе-то взаимодействие с объектами помещуными в воду. Что вы можете мне посоветовать? [i]P.S. и сам знаю, что много хочу[/i]:)))
-
Там демки есть на тему воды. Покомпилируй их, посмотри.
-
Демки не подходят по той причине, что вода там статичная. Нет возможности взаимодействовать с другими предметами. А океан глючная не везде запускается. Хотя я не отрицаю, что хорошо разобрался, если все сам понял - не спрашивал здесь:) Все равно спасибо за ответ. Но хотелось бы услышать советы как делать(я не прошу готовый код, просто советы), а не пиар поисковиков и/или демок GLScene))
-
Ищи просто примеры с водой на OpenGL. GLScene затуманивает могз, постарайся обойтись без него.
Найдешь формулы, рассчитаешь по ним все нужные точки. Получится водная поверхность. Ну а теперь придумай, как по законам физики твои тела будут взаимодействовать с этой поверхностью.
-
на сайте glscene.ru есть пара демок с шейдерной водичкой (GLSL)
-
Не знаю может я не точно выразился... Но мне хотелось бы увидеть ответ поконкрентней. Все демки я пропосмотрел, теперь разбираюсь. У стандартной водной поверхности нет динамического взаимодействия.Просто может быть у кого-то была подобная задача и он знает кое-что, что бы мне помогло, не хотелось бы заново изобретать велосипед:) ЗЫ: прошу учесть, что в программировании 3Д графики я новичок.
-
> [5] Morpheuz (11.04.07 00:07)
Я например не совсем понял, что подразумевается под динамическим взаимодействием. Это что, кораблик бумажный колышется на волнах ? Не знаю, есть ли готовые решения. Тем не менее, задача имеет прямое отношение к математике, а не к графике.
Возможно 3 случая... принципиально упростил для ускорения рассчетов :) 1. Вода - относительно ровная поверхность. Тело имеет площадь. Тогда нужно посчитать средний уровень воды на занимаемой телом площади. Дальше то все просто - по закону архимеда рассчитываешь высоту тела над водой, а, следовательно, найдешь высоту относительно дна. 2. Тело - материальная точка. Тогда на тело дейстует сила тяготения, параллельно возникает сила архимеда, толкающая тело из воды по касательной к поверхности воды в точке. Косинус силы и будет влиять на перемещение тела. Само тело будет располагаться по касательной. 3. Тело и размер волны имеют соотносимые размеры. В общем случае, задачка непростая. Сделай так. У тебя же вода рисуется с определенной дискретизацией - по сути дискретная сетка высот. Посчитай сумму синусов и косинусов во всех точках сетки. Косинусы по-прежнему дадут смещение тела водой в каком то направлении. Теперь рассмотри тело как трехмерный рычаг, к которому приложены силы, направленные вверх. Отсюда найдешь крен тела относительно горизонтальной поверхности.
Все немного усложнится, если тело не плоское. Ну и, конечно, все рассчеты достаточно приблизительны.
-
>Rial © >Тело и размер волны имеют соотносимые размеры. Да вот именно так я хочу, точнее надо. Спасибо за помощь. Хотя я не много не прото взаимодействие думал, хотя теперь и это буду добавлять)) Я имел ввиду такое взаимодействие как например от брошеного камня в воду расходятся волны, при движении корабля волны отходящие от бортов и тыды. В двиге сетка высот будет иметь большую дитализацию возле объектов погруженых в воду. А волны предположительно такие как в 3дМарк 2001
-
OffTop
> deus krid (10.04.07 17:21) [4] > > на сайте glscene.ru есть пара демок с шейдерной водичкой > (GLSL)
ксати на этом сайте не работает регистрация, и нигде не сказано ка связаться с админестрацией:( если знаешь как туда мона зайти напиши.
-
> [7] Morpheuz (12.04.07 01:24) > Хотя я не много не прото взаимодействие думал, хотя теперь > и это буду добавлять)) Я имел ввиду такое взаимодействие > как например от брошеного камня в воду расходятся волны, > при движении корабля волны отходящие от бортов и тыды.
Ну, существуют различные способы рисования воды. Я не знаю, что там происходит в GLScene, а вообще обычно делают так: 1. несколько гармоник, двигающихся с разными скоростями и отклонениями в направлении 2. карта высот, для которой рассчитываешься визика через дифуры
Вот с камнен и способом 2) все просто - в точке падения камня подними координату Z на порядок - получишь всплеск и волны. Бля борта корабля - изменение уровня глубины по периметру. В случае 1) сам не рассчитывал, хотя волны и красивее :) Вероятно, нужно будет добавить затухающую гармонику параллельно борту корабля.
-
-
Народ спасибо за помощь! Особенно Rial, за столь доступное изложение материала:) Но всетаки очень хотелось бы увидеть ответы как это можно реализовать в GLScene. Не хочется заново изобретать велосипед:) P.S. Rial ответы действительно помогли и понравились.
|