Làm cách nào để tích hợp vật lý đạn vào trò chơi của tôi?


12

Tôi đã tải xuống tệp phát hành được tìm thấy ở đây , nhưng tôi không chắc bắt đầu từ đâu. Trong trò chơi của tôi, tôi có một số hình thuôn và hình cầu, tôi muốn tất cả những thứ này va chạm với nhau. (Tất cả đều có mắt lưới và khối lượng giới hạn liên quan)

chỉnh sửa - Tôi mới nhận ra các khối lập phương thực sự có AABB liên kết với chúng. Tôi đoán tôi sẽ phải thay đổi điều đó ít nhất.

Các bước tôi cần phải làm theo là gì?


2
bạn có xem qua hướng dẫn trong chương 4.4 Integration overviewtôi biết nó rất spartan nhưng nó mô tả quá trình cơ bản. Vì vậy, nếu bạn nhìn vào đó và mã cho các ví dụ về bản demo thì bạn không nên có quá nhiều vấn đề.
PeterT

Ngoài ra, hãy kiểm tra các ví dụ trong thư mục dấu đầu dòng, có một nhóm 'em
Maik Semder

@MaikSemder Tôi không chắc chắn làm thế nào để mở những cái cụ thể. chỉ tạo tập tin linux?
SirYakalot

thực sự lưu ý về cách mở các ví dụ sẽ vô cùng hữu ích, sau đó tôi có thể thấy cách họ đã liên kết mọi thứ với nhau ở đó. Tôi sẽ google xung quanh cho điều này nhưng tôi nghĩ tôi nên hỏi trong khi tôi có thể.
SirYakalot

Điều đó phụ thuộc vào nền tảng của bạn. Đối với studio trực quan trên windows có tệp .sln cho các ví dụ, tôi giả sử đó là những gì bạn sử dụng. Chỉ cần tìm kiếm tập tin sln trong thư mục đạn.
Maik

Câu trả lời:


21

Đây là các bước cơ bản bạn cần phải làm:

  1. Đầu tiên tạo một đối tượng thế giới (tức là btDiscreteDynamicsWorld) để lái mô phỏng vật lý của bạn.

  2. Bạn đã có một lớp như GameObjectcó thể lưu trữ một mô hình cùng với hộp giới hạn và vị trí / định hướng của nó trên thế giới. Thay thế các vị trí / định hướng thông tin với một thể hiện của một vật lý cơ thể đối tượng (ví dụ btRigidBody) và khi vẽ mô hình, sử dụng các thông tin được cung cấp bởi cơ thể để thay thế. Khi tạo cơ thể, bạn sẽ cần cung cấp khối lượng và hình dạng va chạm phù hợp với khối lượng giới hạn mà bạn đã có. Tôi đã nói về điều này trong câu hỏi khác của bạn quá.

  3. Thêm từng cơ thể của đối tượng trò chơi của bạn vào đối tượng thế giới .

  4. Cập nhật mô phỏng bằng cách bước ra thế giới (tức là kêu gọi stepSimulationthế giới của bạn).

Và dành một chút thời gian để đọc hướng dẫn vì nó cũng có rất nhiều thông tin.


Chỉnh sửa để bình luận địa chỉ

Tôi co rúm người lại trước khi tôi hỏi nhưng ... làm thế nào để tôi thực hiện những thứ rất cơ bản như chỉ đơn giản là bao gồm các tệp đúng trong trò chơi của mình? Nếu bạn cần thông tin cụ thể tôi đang tìm kiếm các tập tin sẽ xử lý các va chạm cơ thể cứng nhắc. Cũng cảm ơn bạn rất nhiều vì sự giúp đỡ cho đến nay!

Chà, nó sẽ xuất hiện từ nhận xét của bạn rằng bạn chưa bao giờ làm việc với các thư viện C ++ bên ngoài trước đây. Đã được một thời gian kể từ khi tôi làm điều này, nhưng đây là cách tôi nhớ quá trình (trong Visual Studio).

Để bắt đầu, tôi trích dẫn hướng dẫn đã giải thích những gì bạn cần:

- #include btBulletDynamicsCommon.h in your source file 
- Required include path: Bullet/src folder 
- Required libraries: BulletDynamics, BulletCollision, LinearMath

Và đây là các bước cơ bản bạn sẽ phải tuân theo để đáp ứng các điều kiện trên ...

1. Bước chuẩn bị

Trước hết, trích xuất tệp bạn đã tải xuống vào một thư mục đã biết, vd C:\Bullet. Bạn sẽ cần biết đường dẫn đến thư mục này sau.

Bên trong có hai thư mục mà bạn sẽ cần tham khảo trong dự án của mình. Đầu tiên là srcthư mục chứa các .htệp tiêu đề mà bạn sẽ đưa vào mã nguồn của mình. Thứ hai là libthư mục chứa các .libtệp thư viện mà bạn sẽ liên kết đến dự án của bạn. Lưu ý rằng bao gồm và liên kết là hai điều khác nhau.

Nhưng hiện tại libthư mục sẽ trống vì bạn chưa chế tạo động cơ. Vì vậy, hãy tham khảo hướng dẫn về cách xây dựng dự án bằng CMake và Visual Studio chẳng hạn. Nó ở trang 7.

Sau khi bạn thành công, bạn nên có ít nhất ba tập tin trong libthư mục: BulletDynamics.lib, BulletCollision.libLinearMath.lib(tôi đoán từ hướng dẫn). Bây giờ để tạo kết nối giữa Bullet và dự án của bạn ...

2. Bao gồm các tiêu đề

Trước hết, bạn sẽ cần thêm C:\Bullet\srcthư mục vào các tùy chọn đường dẫn bao gồm dự án của bạn. Bạn có thể làm như vậy trong Visual Studio bằng cách nhấp chuột phải vào dự án của bạn, điều hướng đến Configuration Properties -> C/C++ -> General -> Additional Include Directoriesvà viết đường dẫn thư mục trong đó.

Sau khi thiết lập, bạn chỉ cần làm #include “btBulletDynamicsCommon.h”mã của mình. Tiêu đề đó dường như phục vụ như một trung tâm cho tất cả các tính năng bạn yêu cầu.

3. Thư viện liên kết

Cuối cùng, bạn sẽ cần liên kết các thư viện được đề cập ở trên. Frist, dưới Configuration Properties -> Linker -> General -> Additional Library Directoriesthêm đường dẫn đến libthư mục, hay nói cách khác , C:\Bullet\lib.

Sau đó, bên dưới Configuration Properties -> Linker -> Input-> Additional Dependencies, thêm tên của các thư viện vào danh sách các phụ thuộc. Tách mỗi thư viện với một ;và đừng quên phần mở rộng tập tin. Vì vậy, ví dụ, bạn có thể thêm phần này vào cuối danh sách : BulletDynamics.lib;BulletCollision.lib;LinearMath.lib.

Sau này, bạn sẽ có thể xây dựng và chạy dự án của bạn.


Tôi co rúm người lại trước khi tôi hỏi nhưng ... làm thế nào để tôi thực hiện những thứ rất cơ bản như chỉ đơn giản là bao gồm các tệp đúng trong trò chơi của mình? Nếu bạn cần thông tin cụ thể tôi đang tìm kiếm các tập tin sẽ xử lý các va chạm cơ thể cứng nhắc. Cũng cảm ơn bạn rất nhiều vì sự giúp đỡ cho đến nay!
SirYakalot

@AsherEinhorn Kiểm tra chỉnh sửa của tôi.
David Gouveia

@AsherEinhorn Không có vấn đề gì, điều này đã làm tôi vấp ngã ngay lần đầu tiên tôi làm việc với các thư viện C ++ vài năm trước.
David Gouveia

Vâng, đó là một trong những điều mà tôi chỉ tránh được cho đến bây giờ, tất cả mã trong các trò chơi của tôi là của tôi, nhưng cố gắng viết công cụ vật lý của riêng tôi chỉ là một sự lãng phí thời gian khi những người khác đã làm chúng tốt hơn tôi có lẽ sẽ bao giờ
SirYakalot

@AsherEinhorn Có, đừng bận tâm viết công cụ vật lý của riêng bạn ngay cả khi trò chơi có vẻ đơn giản. Lần đầu tiên tôi sử dụng một công cụ vật lý là sau khi cố gắng tự thực hiện nó trên một trò chơi 2D đơn giản. Tôi đã thực hiện phát hiện va chạm OBB-OBB bằng định lý trục tách, nhưng khi tôi đạt đến điểm cần phản ứng va chạm, tôi hoàn toàn bị kẹt. Sau đó, tôi nghĩ rằng tôi cũng có thể thử một động cơ vật lý (đặc biệt là tôi đã sử dụng Box2D) và trong vòng một giờ tôi đã có mọi thứ và chạy.
David Gouveia
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.