물 / 바다 시뮬레이션 및 물리


42

물 시뮬레이션에 대한 몇 가지 참고 자료와 보트, 선박, 잠수함과 같은 신체와의 상호 작용을 모델링하는 방법을 찾고 있습니다.

물의 시각적 측면 (파도, 반사 등)에 대한 많은 참고 자료를 찾았지만 물과 신체와 상호 작용하는 방식을 다루는 방법에 대해서는 거의 언급하지 않았습니다. 게임 개발에 대한 나의 경험은 매우 제한적이며, 나는 정말로 여기 붙어 있습니다.

기본적으로 나는 파도의 위치에 따라 배의 위치를 ​​변화시킬 수 있기를 원합니다. 어떻게해야합니까?

Panda3D를 사용하고 있지만 사용 가능한 기술에 사용되는 기술과 구현에 대해 듣고 싶습니다.

답변:


79

기본적으로 피치, 요, 롤, 헤브, 스웨이지 및 서지와 같은 선박의 6 가지 모델링을보고 있습니다.

대체 텍스트

피치, 요 및 롤은 선박이 파도의 경사면을 오르 내릴 때 회전 할 수있는 회전입니다. 허브, 스웨이 및 서지는 배를 밀고있는 파도 및 / 또는 배가 파도의면 아래로 미끄러 져 움직이는 움직임입니다.

"언덕에서 운전하는 자동차처럼 ..."

구릉지 대를 운전하는 자동차처럼 물 위의 보트를 상상해보십시오. 자동차가 구르는 언덕 (파도를 지나는 배와 같은) 위로 운전하면 언덕을 오르 내릴 때 기울어지고 기울어집니다. 이것은 피치, 요 및 롤입니다. 언덕 (파도)이 크면 자동차 (선박)가 올라가고 내려 가면서 피칭, 요잉 및 회전합니다. 언덕 (파도)이 실제로 작은 경우 (자동차 / 선박보다 작은 경우), 자동차 (선박)는 그냥 넘어서거나 피치, 요잉 또는 롤링을하지 않습니다.

큰 배는 작은 파도를 뚫고 갈 수 있지만 작은 배는 파도를 위아래로 움직입니다. 우리의 차를 예로 들어 보면 작은 언덕 (파도) 위에 자전거 (작은 배)를 타는 사람이 있다고 상상해보십시오. 그들은 갈수록 위아래로 굴러 갈 것입니다. 그런 다음 누군가가 큰 트럭 (선박)을 운전합니다. 트럭은 언덕보다 크므로 언덕을 넘어갈 때 실제로 위아래로 움직이지 않습니다.

차와는 달리, 배는 물 속으로 들어가기 때문에 움직임이 다소 완화 될 것입니다. 정말 부드러운 스폰지 타이어가 달린 자동차를 상상해보십시오. 작은 언덕 위로 운전하면 스폰지 타이어가 부드럽게 움직입니다. 배의 움직임도 쇠약 해져서 작은 파도는 바위 같은 길에서 자동차처럼 상하로 튀어 오르지 않습니다. 잠수함은 침수 될 때 표면파에 거의 영향을받지 않는 일종의 궁극적 인 완충 선박입니다. 그러나 그것이 표면에 있다면 파도에 의해 움직일 것입니다.

배도 파도에 미끄러질 것입니다. 예를 들어 파도의 표면으로 내려가는 배가 앞으로 급등 할 것입니다. 따라서 우리의 자동차 예를 확장하려면 다소 미끄러운 표면에서 큰 스폰지 휠이 달린 자동차로 만드십시오. 차량이 미끄러짐을 보상하기 위해 엔진을 가동하지 않는 한, 언덕 옆으로 미끄러질 것입니다. 엔진을 가동하더라도 미끄러질 것입니다.

자동차와 언덕 비유에 문제가있는 곳은 시간이 지남에 따라 파도의 모양이 변한다는 사실입니다. 파도가 오르 내릴 때 정지 된 배가 위아래로 튀어 나옵니다.

배를 이동하는 파도

배를 따라 바람을 불어서 움직이지 않고 파도가 완벽한 사인파 모양이라면 배는 기본적으로 파도 속으로 튀어 나오므로 움직이지 않습니다. 파도의 표면 위로 올라가면 한쪽으로 밀린 다음 파도의 뒷면으로 내려 가면 다른쪽으로 미끄러집니다.

그러나 파도가 대칭이 아닌 경우 (아래 그림과 같이) 파도가 배를 움직일 것입니다. 파도의 한 쪽이 가파르 기 때문에 선박은 그면을 아래로 빠르게 미끄러지면서 파도의면에 의해 밀려날 것입니다. 그러나 파도의 완만 한 백 슬로프는 움직임이 많지 않습니다.

대체 텍스트

이것은 선박의 움직임에 영향을 미치는 가장 완벽한 파도 움직임 및 모양 모델은 아니지만 대략적인 시뮬레이션에 적합합니다.

바람 효과

바람은 또한 파도의 움직임이나 배의 움직임과 무관하게 당신의 배를 움직일 것입니다. 바람의 방향과 힘은 파도의 방향과 힘과 다를 수 있습니다.

부력

부력은 당신의 배가 얼마나 잘 뜨는지입니다. 매우 부력이 강한 배는 물에서 뜨고 부력이없는 배는 튀어 나옵니다. 중성 부력 선 (잠수함)은 기본적으로 수중의 어느 지점에서든 침몰하거나 상승하지 않고 "호버링"할 수 있습니다. 선박 침몰을 시뮬레이트하려면 선박이 부력이되고 침몰하기 시작합니다.

부력은 또한 선박의 움직임 감쇠에 영향을 미칩니다. 매우 부력이 강한 배는 수면에서 튀어 나와 파도의 영향을 많이받습니다. 부력이 적은 선박은 부분적으로 물에 잠기고 그다지 영향을받지 않습니다. 떠 다니지 만 부분적으로 수중에있는 사과와 표면에 떠있는 탁구 공의 차이점을 생각해보십시오. 탁구 공은 모든 파도 움직임에 따라 위아래로 움직입니다. 반면에 사과는 ​​모든 파동 세부 사항에 반응하지 않습니다.

캡슐화

피치, 요 및 / 또는 롤이 특정 값을 초과하면 선박이 넘어 질 것입니다. 넘어지면 물로 채워져 부력이 줄어들어 더 이상 부유하지 않습니다.

바다가 아프다 : o ~

파도 운동의 방향과 평행하게 여행하는 배는 "여물통"에 있으며, 적어도 내 경험에서 가장 구역질을 낼 수있는 효과를냅니다 :) 파도가가는 방향으로 여행하는 경우 부드러운 승차감 – 바람이 등을 비추는 것처럼. 당신이 파도와 반대 방향으로 여행하는 경우, 당신은 당신에게 올 때 각 언덕 "언덕"을 때리면서 꽤 가혹한 타고 있습니다. 그래도 꽤 흥미 진진한 탈것입니다!

추가 자료

여기에 과학을 다루는 세 가지 기사가 있습니다. 수학과 과학에 많은 비중을두고 있지만, 여러 가지 요인에 대한 아이디어를 줄 수 있습니다.

제 1 조 : 선박 롤 역학의 모델링 및 헤브 및 피치와의 결합

제 2 조 : 해상 선박 선박 역학의 모델링 및 시뮬레이션

제 3 조 : 해상 선박 선박 역학의 모델링 및 시뮬레이션

현장 연구를하는 저자

여기에 대한 나야 15 이십년 내가 연구 선박에 일할 때 일 전 :

대체 텍스트


13
당신은 어떻게 당신의 프로필에있는 개와 똑같이 보일 수 있습니까? - P
Notabene

lol 나는 그것을 알아 차리지 못했지만 ...
Tim Holt

재밌어요!
BlueTrin

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);
       }
    
  • 2D 파동 방정식을 시뮬레이션하면 GPU에서 매우 빠릅니다. Java 애플릿 및 의사 코드에 대해서는 이 페이지를 참조하십시오 . 또한 동일하지만 더 간단한이 버전을 확인하십시오 . 코드가있는 처리 스케치

파동 방정식 시뮬레이션에서 파의 진행 방향 (dx, dz)을 얻을 수 있습니다.

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

여기서 [x] [z]에서 파도의 높이를 가진 2 차원 배열

이것을 보트 위치에 추가하여 파도와 함께 여행하게 만들 수 있습니다 ... 시도했지만 움직임이 부드러워 져 간단한 3x3 상자 필터로 부드럽게했습니다 (차이 / 속도를 매끄럽게 dx dz)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.