Конференция "Игры" » Создание водной поверхности средствами GLScene [Delphi, Windows]
 
  • Morpheuz (10.04.07 01:19) [0]
    Здравствуйте Мастера!
    Начал писать игру на [b]GLScene[/b]. Большая часть игрового времени будет проводиьтся на воде. Какие есть способы создать максимально реалистичную водную поверхность (с учетом возможностей этого движка). Хотелось бы сделать хоть какуе-то взаимодействие с объектами помещуными в воду. Что  вы можете мне посоветовать?
    [i]P.S. и сам знаю, что много хочу[/i]:)))
  • Хелпер (10.04.07 07:45) [1]
    Там демки есть на тему воды.
    Покомпилируй их, посмотри.
  • Morpheuz (10.04.07 15:52) [2]
    Демки не подходят по той причине, что вода там статичная. Нет возможности взаимодействовать с другими предметами. А океан глючная не везде запускается. Хотя я не отрицаю, что хорошо разобрался, если все сам понял - не спрашивал здесь:)
    Все равно спасибо за ответ. Но хотелось бы услышать советы как делать(я не прошу готовый код, просто советы), а не пиар поисковиков и/или демок  GLScene))
  • Rial © (10.04.07 16:29) [3]
    Ищи просто примеры с водой на OpenGL.
    GLScene затуманивает могз, постарайся обойтись без него.

    Найдешь формулы, рассчитаешь по ним все нужные точки.
    Получится водная поверхность.
    Ну а теперь придумай, как по законам физики твои тела
    будут взаимодействовать с этой поверхностью.
  • deus krid (10.04.07 17:21) [4]
    на сайте glscene.ru есть пара демок с шейдерной водичкой (GLSL)
  • Morpheuz (11.04.07 00:07) [5]
    Не знаю может я не точно выразился... Но мне хотелось бы увидеть ответ поконкрентней. Все демки я пропосмотрел, теперь разбираюсь. У стандартной водной поверхности нет динамического взаимодействия.Просто может быть у кого-то была подобная задача и он знает кое-что, что бы мне помогло, не хотелось бы заново изобретать велосипед:)
    ЗЫ: прошу учесть, что в программировании 3Д графики я новичок.
  • Rial © (11.04.07 01:45) [6]
    > [5] Morpheuz   (11.04.07 00:07)

    Я например не совсем понял, что подразумевается под динамическим взаимодействием.
    Это что, кораблик бумажный колышется на волнах ?
    Не знаю, есть ли готовые решения. Тем не менее, задача
    имеет прямое отношение к математике, а не к графике.

    Возможно 3 случая... принципиально упростил для ускорения рассчетов :)
    1.
    Вода - относительно ровная поверхность. Тело имеет площадь.
    Тогда нужно посчитать средний уровень воды на занимаемой
    телом площади. Дальше то все просто - по закону архимеда рассчитываешь
    высоту тела над водой, а, следовательно, найдешь высоту относительно дна.
    2.
    Тело - материальная точка.
    Тогда на тело дейстует сила тяготения, параллельно возникает сила архимеда,
    толкающая тело из воды по касательной к поверхности воды в точке.
    Косинус силы и будет влиять на перемещение тела.
    Само тело будет располагаться по касательной.
    3.
    Тело и размер волны имеют соотносимые размеры.
    В общем случае, задачка непростая.
    Сделай так. У тебя же вода рисуется с определенной дискретизацией - по сути
    дискретная сетка высот.
    Посчитай сумму синусов и косинусов во всех точках сетки.
    Косинусы по-прежнему дадут смещение тела водой в каком то направлении.
    Теперь рассмотри тело как трехмерный рычаг, к которому приложены силы,
    направленные вверх. Отсюда найдешь крен тела относительно
    горизонтальной поверхности.

    Все немного усложнится, если тело не плоское.
    Ну и, конечно, все рассчеты достаточно приблизительны.
  • Morpheuz (12.04.07 01:24) [7]
    >Rial ©
    >Тело и размер волны имеют соотносимые размеры.
    Да вот именно так я хочу, точнее надо. Спасибо за помощь.
    Хотя я не много не прото взаимодействие думал, хотя теперь и это буду добавлять)) Я имел ввиду такое взаимодействие как например от брошеного камня в воду расходятся волны, при движении корабля волны отходящие от бортов и тыды.
    В двиге сетка высот будет иметь большую дитализацию возле объектов погруженых в воду. А волны предположительно такие как в 3дМарк 2001
  • Morpheuz (12.04.07 01:27) [8]
    OffTop

    > deus krid   (10.04.07 17:21) [4]
    >
    > на сайте glscene.ru есть пара демок с шейдерной водичкой
    > (GLSL)

    ксати на этом сайте не работает регистрация, и нигде не сказано ка связаться с админестрацией:( если знаешь как туда мона зайти напиши.
  • Rial © (12.04.07 16:10) [9]
    > [7] Morpheuz   (12.04.07 01:24)
    > Хотя я не много не прото взаимодействие думал, хотя теперь
    > и это буду добавлять)) Я имел ввиду такое взаимодействие
    > как например от брошеного камня в воду расходятся волны,
    > при движении корабля волны отходящие от бортов и тыды.

    Ну, существуют различные способы рисования воды.
    Я не знаю, что там происходит в GLScene, а вообще обычно делают так:
    1. несколько гармоник, двигающихся с разными скоростями и отклонениями
    в направлении
    2. карта высот, для которой рассчитываешься визика через дифуры

    Вот с камнен и способом 2) все просто - в точке падения камня подними
    координату Z на порядок - получишь всплеск и волны. Бля борта корабля -
    изменение уровня глубины по периметру.
    В случае 1) сам не рассчитывал, хотя волны и красивее :)
    Вероятно, нужно будет добавить затухающую гармонику параллельно борту корабля.
  • Sapersky (12.04.07 18:59) [10]
    http://www.gamedev.ru/articles/?id=30119

    Ещё на сайте nvidia есть документ "Hardware-Accelerated Procedural Texture Animation", там описываются особенности реализации на шейдерах.
  • Morpheuz (14.04.07 05:42) [11]
    Народ спасибо за помощь! Особенно Rial, за столь доступное изложение материала:) Но всетаки   очень хотелось бы увидеть ответы как это можно реализовать в GLScene. Не хочется заново изобретать велосипед:) P.S. Rial ответы действительно помогли и понравились.
 
Конференция "Игры" » Создание водной поверхности средствами GLScene [Delphi, Windows]
Есть новые Нет новых   [119256   +38][b:0][p:0.001]