Mô phỏng và vật lý nước / đại dương


42

Tôi đang tìm một số tài liệu tham khảo về mô phỏng nước và cách mô hình hóa sự tương tác của nó với các cơ thể (như thuyền, tàu, tàu ngầm).

Tôi đã tìm thấy rất nhiều tài liệu tham khảo về các khía cạnh trực quan của nước (sóng, phản xạ, v.v.), nhưng rất ít về cách đối phó với cách nó nên tương tác với cơ thể. Kinh nghiệm của tôi về phát triển trò chơi rất hạn chế và tôi thực sự bị mắc kẹt ở đây.

Về cơ bản, tôi muốn có thể làm cho vị trí của một con tàu thay đổi theo sóng. Tôi có thể làm cái này như thế nào?

Tôi đang sử dụng Panda3D, nhưng hy vọng được nghe về các kỹ thuật và triển khai được sử dụng trong bất kỳ công nghệ có sẵn nào.

Câu trả lời:


79

Về cơ bản, bạn đang xem xét mô hình 6 thứ cho một con tàu: cao độ, ngáp, lăn, bay, lắc lư và tăng vọt.

văn bản thay thế

Cao độ, ngáp và lăn là những vòng quay mà con tàu có thể thực hiện khi nó xoắn và quay lên và xuống dốc của sóng. Trời cao, lắc lư và dâng trào là những chuyển động gây ra bởi những con sóng đẩy con tàu xung quanh và / hoặc con tàu trượt xuống mặt sóng.

"Giống như một chiếc xe lái trên đồi ..."

Hãy tưởng tượng một chiếc thuyền trên mặt nước giống như một chiếc xe hơi chạy trên mặt đất đồi. Nếu chiếc xe lái qua những ngọn đồi lăn (như một con tàu vượt sóng) thì nó sẽ nghiêng và nghiêng khi đi lên và xuống đồi. Đây là cao độ, ngáp và lăn. Nếu những ngọn đồi (sóng) lớn, chiếc xe (tàu) sẽ lái lên và xuống, ném bóng, ngáp và lăn khi nó đi. Nếu những ngọn đồi (sóng) thực sự nhỏ (nhỏ hơn ô tô / tàu), thì ô tô (tàu) sẽ chỉ lái qua chúng và không ném, ngáp hoặc lăn nhiều.

Một con tàu lớn chỉ có thể cày qua những con sóng nhỏ hơn, trong khi một con tàu nhỏ sẽ di chuyển lên xuống sóng. Lấy ví dụ về xe hơi của chúng tôi, hãy tưởng tượng ai đó đi xe đạp (tàu nhỏ) trên một ngọn đồi nhỏ (sóng). Họ sẽ cuộn lên và xuống khi họ đi. Sau đó, một người nào đó lái một chiếc xe tải lớn (tàu) qua họ. Chiếc xe tải lớn hơn những ngọn đồi, vì vậy không thực sự lên xuống khi nó đi qua chúng.

Không giống như chiếc xe, một con tàu đang chìm trong nước, do đó chuyển động của nó sẽ bị giảm bớt phần nào. Hãy tưởng tượng một chiếc xe với lốp xốp thực sự mềm. Khi nó lái xe qua những ngọn đồi nhỏ, lốp xe xốp sẽ làm nó trơn tru. Chuyển động của một con tàu cũng bị giảm bớt, vì vậy những con sóng nhỏ sẽ không làm cho nó nảy lên xuống như một chiếc ô tô trên con đường đá. Một chiếc tàu ngầm là loại tàu được làm ẩm tối đa, vì khi chìm dưới nước, nó có khả năng miễn dịch khá nhiều với sóng mặt. Nhưng nếu nó ở trên bề mặt thì nó sẽ bị sóng di chuyển.

Một con tàu cũng sẽ trượt trên sóng. Một con tàu đi xuống mặt sóng sẽ tăng vọt về phía trước chẳng hạn. Vì vậy, để mở rộng ví dụ về chiếc xe của chúng ta, hãy biến nó thành một chiếc xe có bánh xe xốp lớn lái trên bề mặt hơi trơn. Trừ khi chiếc xe đang chạy động cơ để bù cho sự trượt, nó sẽ trượt xuống sườn đồi. Ngay cả khi nó đang chạy động cơ, sẽ có một số trượt.

Một nơi mà sự tương tự xe hơi và đồi có vấn đề là thực tế là sóng thay đổi hình dạng theo thời gian. Một con tàu đứng yên sẽ lắc lư lên xuống khi sóng lên xuống.

Sóng di chuyển con tàu

Nếu không có gió thổi vào con tàu để di chuyển nó dọc theo và sóng là một hình dạng sóng hình sin hoàn hảo, thì về cơ bản con tàu sẽ không di chuyển bất cứ nơi nào khi nó lắc lư trong sóng. Nó trượt theo một cách khi nó đi lên trên mặt của sóng, sau đó trượt ngược lại theo cách khác khi nó đi xuống mặt sau của sóng.

Tuy nhiên, nếu sóng KHÔNG đối xứng (như hình dưới đây), thì sóng sẽ di chuyển con tàu. Do một bên của sóng dốc, con tàu sẽ trượt nhanh xuống mặt đó cũng như bị đẩy bởi mặt sóng. Độ dốc trở lại nhẹ nhàng của sóng tuy nhiên sẽ không có nhiều chuyển động.

văn bản thay thế

Đây không phải là mô hình hoàn hảo nhất về chuyển động và hình dạng sóng ảnh hưởng đến chuyển động của tàu, nhưng có lẽ nó sẽ làm cho một mô phỏng thô.

Hiệu ứng gió

Gió cũng sẽ đẩy con tàu của bạn đi theo những cách độc lập với chuyển động sóng hoặc chuyển động của tàu. Hướng và lực của gió có thể khác với hướng và lực của sóng.

Sự nổi

Sức nổi là tàu của bạn nổi tốt như thế nào. Những con tàu rất nổi đang nổi trên mặt nước và những con tàu không nổi. Các tàu nổi trung tính (tàu ngầm) về cơ bản có thể "lơ lửng" tại bất kỳ điểm nào dưới nước, không bị chìm cũng không tăng. Nếu bạn muốn mô phỏng một con tàu bị đắm, hãy làm cho nó trở nên nổi và nó sẽ bắt đầu chìm.

Sức nổi cũng ảnh hưởng đến việc làm giảm chuyển động của tàu. Một con tàu cực kỳ nổi sẽ lắc lư trên mặt nước và bị ảnh hưởng mạnh bởi sóng. Một con tàu ít nổi sẽ bị ngập một phần và không bị ảnh hưởng nhiều. Hãy nghĩ về sự khác biệt giữa một quả bóng bàn nổi trên bề mặt so với quả táo, nó nổi nhưng một phần dưới nước. Quả bóng bàn lắc lên xuống theo từng chuyển động sóng. Mặt khác, quả táo không đáp ứng với mọi chi tiết sóng.

Nón

Nếu cao độ, ngáp và / hoặc cuộn vượt quá một số giá trị, tàu của bạn sẽ vượt qua. Khi nó lật, nó có thể đổ đầy nước, làm giảm độ nổi, do đó làm cho nó không nổi nữa.

Bắt Sick Sea: o ~

Một con tàu di chuyển song song với hướng chuyển động của sóng là "trong máng" và sẽ tạo ra hiệu ứng buồn nôn nhất ít nhất là theo kinh nghiệm của tôi :) Nếu bạn đang đi theo hướng sóng đang đi, bạn có thể có một đi xe êm - như có gió ở lưng. Nếu bạn đang đi ngược chiều với những con sóng, bạn sẽ có một chuyến đi khá khắc nghiệt khi bạn đang chạm vào từng "ngọn đồi" khi nó đến với bạn. Làm cho một chuyến đi khá thú vị mặc dù!

Đọc thêm

Dưới đây là ba bài viết đề cập đến khoa học đằng sau điều này, có thể cung cấp cho bạn một số hiểu biết. Mặc dù nặng về toán học và khoa học, họ có thể cho bạn ý tưởng về các yếu tố khác nhau là gì.

Điều 1: Mô hình hóa động lực cuộn tàu và khớp nối của nó với thiên đường và cao độ

Điều 2: Mô hình hóa và mô phỏng động lực học tàu mặt nước biển

Điều 3: Mô hình hóa và mô phỏng động lực học tàu mặt nước biển

Tác giả Nghiên cứu thực địa

Đây là tôi khoảng 15 20 năm trước khi tôi làm việc trên các tàu nghiên cứu :)

văn bản thay thế


13
Làm thế nào có thể bạn trông giống hệt như con chó trong hồ sơ của bạn? :-P
Notabene

lol tôi đã không nhận thấy điều đó nhưng ...
Tim Holt

Thật là vui nhộn!
BlueTrin

4

Bạn có một mô phỏng nước?

Đề nghị của tôi là

  • giả nó với lò xo. Mỗi đỉnh trên mặt nước được ghép với nhau thành một lưới lò xo. Kéo một cái xuống và tất cả bắt đầu dao động. Bạn có thể hạn chế chuyển động x, z và chỉ cho phép y (hoặc chuyển động lên / xuống)
  • giả mạo nó bằng cách tổng hợp các hình sin có biên độ và tần số khác nhau. Một số thứ như thế nà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);
       }
    
  • mô phỏng phương trình sóng 2D, điều này có thể rất nhanh trên GPU. Xem trang này cho một applet java và một số mã giả . Cũng kiểm tra phiên bản này, tương tự nhưng thậm chí đơn giản hơn. Một bản phác thảo xử lý với mã.

Từ sim phương trình sóng, bạn có thể nhận được hướng (dx, dz) của sóng đang truyền trong

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

Trong đó ha 2D mảng với chiều cao của sóng tại [x] [z]

Bạn có thể thêm nó vào vị trí thuyền để khiến nó di chuyển theo sóng ... Tôi đã thử, nhưng chuyển động trở nên giật, vì vậy tôi đã làm mịn nó bằng bộ lọc hộp 3x3 đơn giản (làm mịn sự khác biệt / vận tốc dx dz)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.