Моделирование воды и океана

Я ищу некоторые рекомендации по моделированию воды и как смоделировать взаимодействие с телами (например, лодки, корабли, подводные лодки).

Я нашел много ссылок на визуальные аспекты воды (волны, отражение и т. д.), но очень мало о том, как бороться с тем, как он должен взаимодействовать с телами. Мой опыт разработки игр очень ограничен, и я действительно застрял здесь.

Баскально я хотел бы, чтобы положение корабля менялось в зависимости от волн. Как я могу это сделать?

Я использую Panda3D, но надеюсь услышать о методах и реализациях, используемых в любой доступной технологии.

37 голосов | спросил Alexandre 14 TueEurope/Moscow2010-12-14T15:07:02+03:00Europe/Moscow12bEurope/MoscowTue, 14 Dec 2010 15:07:02 +0300 2010, 15:07:02

2 ответа


74

В основном вы смотрите на моделирование 6 вещей для корабля: шаг, рыскание, рулон, вздымание, колебание и волна.

alt text

Pitch, yaw и roll - это повороты, которые корабль может сделать, когда он крутится и поворачивается вверх и вниз по склону волн. Воздух, колебание и волна - это движения, вызванные волнами, которые толкают корабль вокруг и /или корабль скользит по поверхности волны.

«Как вождение автомобиля на холмах ...»

Представьте себе лодку на воде, как автомобиль, движущийся по холмистой местности. Если автомобиль проезжает по холмам (например, корабль идет по волнам), он будет наклоняться и наклоняться, когда он поднимается и опускается по холмам. Это шаг, рыскание и бросок. Если холмы (волны) большие, автомобиль (корабль) будет двигаться вверх и вниз, качки, рыскания и качения, когда он идет. Если холмы (волны) действительно маленькие (меньше, чем автомобиль /корабль), тогда автомобиль (корабль) просто будет ездить по ним, а не качать, рыскать или катиться.

Большой корабль может просто пахать по более мелким волнам, в то время как маленький корабль будет двигаться вверх и вниз по волнам. Взяв пример нашего автомобиля, представьте, что кто-то едет на велосипеде (маленький корабль) над множеством маленьких холмов (волн). Они будут катиться вверх и вниз по ходу дела. Затем кто-то управляет большим грузовиком (судном) над ними. Грузовик больше, чем холмы, поэтому на самом деле он не качается вверх и вниз, когда он проходит через них.

В отличие от автомобиля, корабль является частью пути в воду, поэтому его движения будут немного ослаблены. Представьте себе автомобиль с действительно мягкими губчатыми шинами. Когда он проезжает по крошечным холмам, шины spongey просто сглаживают его. Движения корабля также увлажняются, поэтому маленькие волны не будут подпрыгивать вверх и вниз, как автомобиль на скалистой дороге. Подводная лодка - это своего рода окончательный увлажненный корабль, так как при погружении он практически невосприимчив к поверхностным волнам. Но если он на поверхности, он будет перемещаться волнами.

Корабль также будет скользить по волнам. Например, корабль, спускающийся с лица волны, будет продвигаться вперед. Поэтому, чтобы расширить наш пример автомобиля, сделайте его автомобилем с большими колесами spongey, движущимися на несколько скользкой поверхности. Если автомобиль не запустит двигатель, чтобы компенсировать проскальзывание, он будет скользить по склону холма. Даже если он запустит двигатель, будет некоторый промах.

В одном месте, где проблема с автомобилем и холмом имеет проблемы, заключается в том, что волны меняются со временем. Стационарный корабль будет подниматься и опускаться, когда волны поднимаются и опускаются.

Волны, перемещающие корабль

Если на корабле не дует ветер, чтобы переместить его, а волны - идеальная форма синусоидальной волны, тогда корабль в основном не будет двигаться нигде, поскольку он блуждает по волнам. Он скользит в одну сторону, когда он поднимается лицом к волне, а затем скользит назад, когда он идет по заднему лицу волны.

Однако, если волны НЕ симметричны (как на рисунке ниже), тогда волны будут перемещать корабль. Поскольку одна сторона волны крутая, корабль скоро скользит по этому лицу, а также толкается лицом волны. Однако мягкий задний наклон волны не будет иметь большого движения.

alt text

Это не самая совершенная модель волнового движения и формы, влияющая на движение корабля, но это, вероятно, сделает для грубого моделирования.

Эффекты ветра

Ветер также собирается подталкивать ваш корабль способами, не зависящими от движения волны или движения корабля. Направление и сила ветра могут отличаться от направления и силы волн.

Плавучесть

Плавучесть - насколько хорошо ваш корабль плавает. Очень плавучие корабли плавают высоко в воде, а те, которые не являются плавучим раковиной. Нейтрально плавучие корабли (подводные лодки) могут в основном «нависнуть» в любой точке под водой, ни опускаться, ни подниматься. Если вы хотите симулировать затопление корабля, сделайте его более плавными он начнет тонуть.

Плавучесть также влияет на увлажнение движения судна. Корабль, который чрезвычайно плавучий, будет рыться вокруг на поверхности воды и сильно пострадать от волн. Корабль, который менее плавучий, будет частично погружен и не будет затронут столько же. Подумайте о различии между шаром пинг-понга, плавающим на поверхности, против яблока, который плавает, но частично под водой. Шарик пинг-понга шагает вверх и вниз с каждым волновым движением. С другой стороны, яблоко не реагирует на каждую волновую деталь.

опрокидывания

Если высота, рыскание и /или рулон превышают какое-то значение, ваш корабль собирается опрокинуться. Когда он подскажет, он может заполнить водой, уменьшив плавучесть, тем самым сделав его больше не плавающим.

Получение Морского Больного: o ~

Корабль, который движется параллельно направлению движения волны, находится «в лотке» и будет давать самые тошнотворные эффекты, по крайней мере, в моем опыте :) Если вы путешествуете в направлении волн, вы можете имеют очень гладкую езду - как будто ветер на спине. Если вы путешествуете в противоположном направлении, как волны, у вас будет довольно суровая поездка, так как вы нажимаете на каждую волну «холм», как она приходит на вас. Делает для довольно захватывающей езды, хотя!

Дополнительная литература

Вот три статьи, посвященные этой науке, которые могут дать вам некоторые идеи. Хотя они тяжелы в математике и науке, они могут дать вам представление о том, каковы разные факторы.

Статья 1: Моделирование динамики рулона корабля и его сцепление с пером и шагом

Статья 2: Моделирование и моделирование динамики морских судовых сосудов

Статья 3: Моделирование и моделирование динамики морских судовых сосудов

Автор Doing Field Research

Вот я около 15 лет назад, когда я работал на исследовательских судах:)

alt text

ответил Tim Holt 14 TueEurope/Moscow2010-12-14T17:14:07+03:00Europe/Moscow12bEurope/MoscowTue, 14 Dec 2010 17:14:07 +0300 2010, 17:14:07
4

У вас есть симуляция воды?

Мои предложения

  • подделать его пружинами. Каждая вершина на поверхности воды соединена вместе с пружинной сеткой. Потяните вниз, и все начинают колебаться. Вы можете ограничить движение x, z и разрешить только y (или движение вверх /вниз)
  • подделать его суммированием синусоидов разных амплитуд и частот. Что-то вроде этого:

    rez = 32;
    for(i=-rez; i<rez; i++)
       for(j=-rez; j<rez; j++)
       {
          yofs = 0;
          yofs += 1.0 * sin( t + j*0.5 + i*0.125);
          yofs += 2.0 * sin( t + (rez-j)*0.125 + i*0.25 );
          yofs += 2.0 * sin( t + (j)*0.125 + (rez-i)*0.125 );
          yofs += 0.5 * sin( t + (rez+j)*0.125 + (rez+i)*0.125 );
          glVertex(i/rez, yofs, j/rez);
       }
    
  • имитирует двумерное волновое уравнение, это может быть очень быстро на графическом процессоре. См. эту страницу для Java-апплета и некоторого псевдокода . Также проверьте эту версию, то же самое, но еще проще. Эскиз обработки с кодом.

Из волнового уравнения sim вы можете получить направление (dx, dz) волны, движущегося в

dx = h[x-1][z] - h[x+1][z] 
dz = h[x][z-1]- h[x][x+1] 

, где h - двумерная матрица с высотой волны в [x] [z]

Вы можете добавить это в положение лодки, чтобы заставить его двигаться с волной ... Я пробовал, но движение становится отрывистым, поэтому я сгладил его с помощью простого фильтра размером 3x3 (сглаживание различий /скоростей dx дг)

ответил Torbjørn 10 Maypm11 2011, 19:58:25

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132