Làm thế nào để mô phỏng vật lý Box2d và Bullet hoạt động bên trong?


8

Tôi đã thấy box2d và dấu đầu dòng được chuyển sang JavaScript, nhưng cả hai đều không thu hút tôi, ngoại trừ mã nguồn. Tất cả có vẻ khá đơn giản, một khi tôi nhìn vào bên trong.

Họ đang làm gì trong mỗi thư viện đó để có được mô phỏng vật lý đẹp? Tôi không thể tìm thấy bất kỳ lời giải thích.


Cuối cùng tôi sẽ tự trả lời câu hỏi vì tôi đang nghiên cứu các nguồn. Nếu bạn quản lý để rút ngắn nỗ lực tôi sẽ đánh giá cao nó.
Vui vẻ

Câu trả lời:


10

Vật lý cơ thể cứng nhắc thực sự khá đơn giản trong khái niệm - đó là, các hành vi mà một động cơ đang cố gắng tạo ra không quá phức tạp. Đó có lẽ là lý do tại sao các thư viện bạn nhìn có vẻ khá đơn giản với bạn.

Thủ thuật là tạo ra một chiếc sim mạnh mẽ , ổn địnhnhanh chóng , ngay cả khi có những thứ như lỗi dấu phẩy động và tốc độ khung hình thấp, biến đổi, khá khó khăn và thường bao gồm rất nhiều điều chỉnh và thay đổi. Làm phức tạp thêm vấn đề là thực tế là rất nhiều người cực kỳ thông minh đã nỗ lực anh hùng để tìm ra giải pháp tốt hơn, và đã đưa ra các thuật toán đẹp và mạnh mẽ nhưng khó hiểu đã mang lại cho lĩnh vực này danh tiếng về ma thuật đen.

Nói chung, một công cụ vật lý sẽ liên quan đến ba điều (thứ tự mà chúng thực hiện chúng trong vòng lặp bên trong khác nhau):

  1. Tích hợp (xấp xỉ các phương trình chuyển động của Newton),
  2. Phát hiện va chạm và
  3. Giải quyết ràng buộc (cập nhật vị trí và vận tốc để đáp ứng không xâm nhập hoặc các ràng buộc khác do người dùng chỉ định.)

Đối với hầu hết trong số này, có cả thuật toán đơn giản nhưng không chính xác và thuật toán phức tạp nhưng chính xác hơn. Để giúp bạn bắt đầu:

  1. Để tích hợp, hầu hết mọi người sử dụng Symplectic Euler hoặc Verlet (thực sự tương đương. Bạn có thể đọc về tích hợp số nếu bạn thích, nhưng có vẻ như sự đồng thuận là các phương pháp đặt hàng đầu tiên rẻ tiền là tốt.
  2. Bạn có thể tìm thấy tất cả các tham chiếu phát hiện va chạm mà bạn có thể muốn trên trang tài nguyên Kết xuất thời gian thực .
  3. Để giải quyết các ràng buộc, phương pháp của các xung liên tiếp là rất dễ hiểu. Erin Catto (tác giả của Box2D) thuyết trình tại GDC hàng năm - các slide được liên kết từ trang chính của Box2D . Các slide năm 2006 bao gồm các xung liên tiếp khá tốt. Bạn cũng có thể xem xét các phương thức fancier như Featherstone hoặc Gauss-Seidel dự kiến.

Có một giới thiệu tuyệt vời về các phương pháp đơn giản và những gì có thể sai trong các chương đầu của cuốn sách vừa xuất bản Trò chơi Vật lý Ngọc trai.


6

Đọc loạt vật lý trò chơi của Glenn Fiedler: http://gafferongames.com/game-physics/

Ngoài ra, Erin Catto (tác giả của Box2D) có một bài viết về động lực học bị hạn chế .

Để phát hiện va chạm, hãy đọc Phát hiện va chạm trong thời gian thực của Christer Ericson


1
Liên kết đầu tiên đó đã bị hỏng nhưng tôi nghĩ rằng các bài viết tương tự hiện có thể được tìm thấy ở đây: gafferongames.com/game-physics/integration-basics (nhưng tôi không thể chắc chắn vì tôi chưa bao giờ thấy bản gốc)
Justin

2

http://en.wikipedia.org/wiki/Rigid_body_dynamics có thể là một nơi tốt để bắt đầu. Các trò chơi khác nhau sẽ phân chia mọi thứ thành các cơ thể khác nhau, nhưng nói chung bạn có một số cơ thể cứng nhắc riêng biệt được liên kết bởi các khớp với các thuộc tính cụ thể. Mỗi vòng lặp trong trò chơi, bạn tính toán các lực trên mỗi cơ thể và tính toán các tham số mới của nó (vị trí, vận tốc, v.v.). Bạn cũng phải truyền lực từ mỗi cơ thể sang những người khác mà nó chia sẻ khớp và yếu tố trong lực toàn cầu (trọng lực).

Điều này không bao gồm những thứ như vật lý chất lỏng hoặc vải, tất cả đều vô nghĩa với tôi. Có các phương trình vi phân liên quan và đó là về điểm mà mắt tôi sáng lên.


Chà .. wikipedia sẽ là nơi rõ ràng đầu tiên để nhìn mọi thứ từ đó. Ngoài ra tất cả mọi người cho đến nay có thể biết rằng họ có xu hướng mô phỏng chuyển động cơ thể thông qua các lực. Có nhiều hơn trong box2d hơn thế. Đây là một vài điều tôi quan tâm: Hạn chế giải quyết và một số nội dung khác ngăn mô phỏng phát nổ. Thuật toán phát hiện va chạm. Tối ưu hóa về giải quyết ràng buộc và phát hiện va chạm. Các thuật toán phản ứng chung / va chạm. Mô phỏng ma sát.
Vui vẻ

Đó là xâm nhập vào lãnh thổ "quá dài cho một câu trả lời thực sự". Ví dụ, giảm xóc để ngăn chặn các tạo tác mô phỏng là một chút phức tạp của toán học . Đối với những thứ như chuyển lực chung, phiên bản đơn giản là mỗi khớp có các trục cụ thể, nó sẽ truyền lực với tỷ lệ phần trăm năng lượng của cơ thể tính vào liên kết tùy thuộc vào góc giữa hai. Khớp đơn giản nhất là một liên kết cố định, trong đó tất cả các lực từ hai bên được dịch ngang.
coderanger

Giống như tôi đã nói trong câu hỏi: Sẽ ổn thôi khi chỉ nói có toán học phức tạp ở đây và ở đó và cung cấp một liên kết để đọc thêm.
Vui vẻ

Chà, bạn đến đó rồi :-)
coderanger


0

Một điều quan trọng bên cạnh các phương trình vật lý là theo dõi tất cả các đối tượng, để kiểm tra phát hiện va chạm và tương tác càng nhanh càng tốt. Spatial Hashing là kỹ thuật mà động cơ vật lý Chipmunk sử dụng.


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.