ฉันจะรวมกระสุนฟิสิกส์เข้ากับเกมของฉันได้อย่างไร


12

ฉันดาวน์โหลดไฟล์รีลีสที่นี่แต่ฉันไม่แน่ใจว่าจะเริ่มจากตรงไหน ในเกมของฉันฉันมีรูปสี่เหลี่ยมผืนผ้าจำนวนหนึ่งและทรงกลมฉันต้องการให้สิ่งเหล่านี้ชนกัน (พวกเขาทั้งหมดมีตาข่ายและปริมาณการเชื่อมโยงที่เกี่ยวข้อง)

แก้ไข - ฉันเพิ่งรู้ว่าลูกบาศก์จริง ๆ แล้วมี AABB เกี่ยวข้องกับพวกเขา ฉันเดาว่าฉันจะต้องเปลี่ยนอย่างน้อย

ฉันต้องทำตามขั้นตอนอะไรบ้าง?


2
คุณดูคู่มือภายใต้บทที่4.4 Integration overviewฉันรู้ว่ามันเป็นสปาร์ตัน แต่มันอธิบายกระบวนการพื้นฐาน ดังนั้นหากคุณดูและตัวอย่างของเดโมแล้วคุณไม่ควรมีปัญหามากเกินไป
PeterT

ตรวจสอบตัวอย่างในโฟลเดอร์ bullet มี 'em
Maik Semder

@MaikSemder ฉันไม่แน่ใจว่าจะเปิดบางอย่างได้อย่างไร ทำไฟล์ linux เท่านั้น?
SirYakalot

จริง ๆ แล้วบันทึกเกี่ยวกับวิธีการเปิดตัวอย่างจะมีประโยชน์อย่างไม่น่าเชื่อแล้วฉันก็จะเห็นว่าพวกเขาได้เชื่อมโยงสิ่งต่าง ๆ เข้าด้วยกันที่นั่น ฉันจะ google รอบนี้ แต่ฉันคิดว่าฉันควรถามในขณะที่ฉันสามารถ
SirYakalot

ขึ้นอยู่กับว่าคุณเป็นแพลตฟอร์มอะไร สำหรับ visual studio บน windows มีไฟล์. sln สำหรับตัวอย่างฉันถือว่านั่นคือสิ่งที่คุณใช้ เพียงค้นหาไฟล์ sln ในโฟลเดอร์ bullet
Maik Semder

คำตอบ:


21

นี่คือขั้นตอนพื้นฐานที่คุณจะต้องปฏิบัติตาม:

  1. ขั้นแรกสร้างวัตถุโลก (เช่นbtDiscreteDynamicsWorld) เพื่อขับเคลื่อนการจำลองทางฟิสิกส์ของคุณ

  2. คุณควรมีคลาสเช่นGameObjectนั้นซึ่งอาจเก็บแบบจำลองพร้อมกล่องขอบและตำแหน่ง / ทิศทางในโลก แทนที่ตำแหน่ง / ปฐมนิเทศข้อมูลกับตัวอย่างของฟิสิกส์ร่างกายวัตถุ (เช่นbtRigidBody) และเมื่อการแสดงผลรูปแบบการใช้ข้อมูลที่ให้ไว้โดยร่างกายแทน เมื่อสร้างร่างกายคุณจะต้องจัดเตรียมรูปร่างและการชนซึ่งควรจะตรงกับปริมาณที่คุณมีอยู่แล้ว ฉันเคยพูดถึงเรื่องนี้ในคำถามอื่นของคุณด้วย

  3. เพิ่มแต่ละเกมวัตถุของร่างกายไปทั่วโลกวัตถุ

  4. อัปเดตการจำลองด้วยการก้าวเข้าสู่โลก (เช่นการโทรหาstepSimulationโลกของคุณ)

และใช้เวลาในการอ่านคู่มือเนื่องจากมีข้อมูลจำนวนมากเช่นกัน


แก้ไขเพื่อแสดงความคิดเห็น

ฉันประจบประแจงก่อนที่จะถาม แต่ ... ฉันจะทำสิ่งพื้นฐานมาก ๆ อย่างเช่นเพียงรวมไฟล์ที่ถูกต้องในเกมของฉันได้อย่างไร หากคุณต้องการเฉพาะฉันกำลังมองหาไฟล์ที่จะจัดการกับการชนกันของร่างกายที่เข้มงวด ขอบคุณมากสำหรับความช่วยเหลือจนถึงตอนนี้!

มันจะปรากฏจากความคิดเห็นของคุณว่าคุณไม่เคยทำงานกับไลบรารี C ++ ภายนอกมาก่อน เป็นเวลานานแล้วที่ฉันได้ทำสิ่งนี้ แต่นี่เป็นวิธีที่ฉันจำได้ว่าเป็นกระบวนการ (ใน Visual Studio)

สำหรับผู้เริ่มฉันอ้างคู่มือซึ่งอธิบายสิ่งที่คุณต้องการแล้ว:

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

และนี่คือขั้นตอนพื้นฐานที่คุณจะต้องทำตามเพื่อปฏิบัติตามเงื่อนไขข้างต้น ...

1. ขั้นตอนการเตรียมการ

C:\Bulletแรกของทุกดึงไฟล์ที่คุณดาวน์โหลดลงในไดเรกทอรีที่รู้จักกันเช่น คุณจะต้องรู้เส้นทางไปยังโฟลเดอร์นี้ในภายหลัง

ภายในมีสองโฟลเดอร์ที่คุณจะต้องอ้างอิงในโครงการของคุณ แรกคือsrcโฟลเดอร์ที่เก็บ.hไฟล์ส่วนหัวที่คุณจะรวมไว้ในซอร์สโค้ดของคุณ ประการที่สองคือlibโฟลเดอร์ที่จะเก็บ.libไฟล์ไลบรารีที่คุณจะเชื่อมโยงไปยังโครงการของคุณ โปรดสังเกตว่าการรวมและการเชื่อมโยงเป็นสองสิ่งที่แตกต่างกัน

แต่ตอนนี้libโฟลเดอร์ควรจะว่างเปล่าเพราะคุณยังไม่ได้สร้างเอ็นจิ้น ดังนั้นอ้างอิงคู่มือในการสร้างโครงการโดยใช้ CMake และ Visual Studio เป็นต้น มันอยู่ในหน้า 7

หลังจากที่คุณประสบความสำเร็จคุณควรมีอย่างน้อยสามไฟล์ในlibโฟลเดอร์BulletDynamics.lib, BulletCollision.libและLinearMath.lib(ฉันเดาจากคู่มือ) ตอนนี้เพื่อทำการเชื่อมต่อระหว่าง Bullet และโครงการของคุณ ...

2. รวมส่วนหัว

ก่อนอื่นคุณจะต้องเพิ่มC:\Bullet\srcโฟลเดอร์ในตัวเลือกพา ธ รวมของโครงการของคุณ คุณสามารถทำได้ใน Visual Studio โดยคลิกขวาที่โครงการนำทางไปยังConfiguration Properties -> C/C++ -> General -> Additional Include Directoriesและเขียนเส้นทางไดเรกทอรีในนั้น

หลังจากตั้งค่าแล้วคุณสามารถทำ#include “btBulletDynamicsCommon.h”กับรหัสของคุณได้ ส่วนหัวนั้นดูเหมือนจะทำหน้าที่เป็นฮับสำหรับคุณสมบัติทั้งหมดที่คุณต้องการ

3. เชื่อมโยงไลบรารี

ในที่สุดคุณจะต้องเชื่อมโยงห้องสมุดที่กล่าวถึงข้างต้น เฟิร์สภายใต้การConfiguration Properties -> Linker -> General -> Additional Library Directoriesเพิ่มเส้นทางไปยังโฟลเดอร์หรือกล่าวอีกนัยหนึ่งlibC:\Bullet\lib

จากนั้นภายใต้Configuration Properties -> Linker -> Input-> Additional Dependenciesให้เพิ่มชื่อไลบรารีลงในรายการการพึ่งพา แยกแต่ละไลบรารีด้วย a ;และอย่าลืมนามสกุลไฟล์ ดังนั้นสำหรับตัวอย่างเช่นคุณอาจเพิ่มBulletDynamics.lib;BulletCollision.lib;LinearMath.libนี้ไปยังจุดสิ้นสุดของรายการ:

หลังจากนี้คุณควรจะสามารถสร้างและเรียกใช้โครงการของคุณ


ฉันประจบประแจงก่อนที่จะถาม แต่ ... ฉันจะทำสิ่งพื้นฐานมาก ๆ อย่างเช่นเพียงรวมไฟล์ที่ถูกต้องในเกมของฉันได้อย่างไร หากคุณต้องการเฉพาะฉันกำลังมองหาไฟล์ที่จะจัดการกับการชนกันของร่างกายที่เข้มงวด ขอบคุณมากสำหรับความช่วยเหลือจนถึงตอนนี้!
SirYakalot

@AsherEinhorn ตรวจสอบการแก้ไขของฉัน
David Gouveia

@ AsherEinhorn ไม่มีปัญหานี่ทำให้ฉันงงเหมือนกันครั้งแรกที่ฉันทำงานกับห้องสมุด C ++ เมื่อสองสามปีก่อน
David Gouveia

ใช่มันเป็นหนึ่งในสิ่งที่ฉันหลีกเลี่ยงได้จนถึงทุกวันนี้โค้ดทั้งหมดในเกมของฉันเป็นของฉัน แต่การพยายามเขียนเอนจิ้นฟิสิกส์ของตัวเองนั้นใช้เวลาแค่ไหนที่คนอื่นทำได้ดีกว่าฉัน อาจจะเคย
SirYakalot

@ AsherEinhorn ใช่ไม่ต้องกังวลกับการเขียนเอนจิ้นฟิสิกส์ของคุณแม้ว่าเกมจะดูเรียบง่าย ครั้งแรกที่ฉันใช้เครื่องมือทางฟิสิกส์คือหลังจากพยายามนำไปใช้กับตัวเองในเกม 2D ที่เรียบง่าย ฉันใช้การตรวจจับการชนกันของ OBB-OBB โดยใช้ทฤษฎีแกนการแยก แต่เมื่อฉันไปถึงจุดที่ฉันต้องการการตอบสนองการชนฉันก็ติดอยู่อย่างสมบูรณ์ จากนั้นฉันก็คิดว่าฉันอาจลองใช้เครื่องมือฟิสิกส์ (โดยเฉพาะอย่างยิ่งฉันใช้ Box2D) และภายในไม่ถึงหนึ่งชั่วโมงฉันก็มีทุกอย่างที่ใช้งานได้
David Gouveia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.