총알 물리를 게임에 통합하려면 어떻게합니까?


12

여기에 있는 릴리스 파일을 다운로드 했지만 시작 위치를 잘 모르겠습니다. 내 게임에는 수많은 장방형과 구가 있으며, 이들 모두가 서로 충돌하기를 원합니다. (모두 메쉬와 관련 경계 볼륨이 있습니다)

편집-방금 직육면체에 실제로 AABB가 연결되어 있음을 깨달았습니다. 나는 적어도 그것을 바꿔야 할 것 같아요.

따라야 할 단계는 무엇입니까?


2
4.4 Integration overview스파르타의 기초라는 장에서 매뉴얼을 살펴 보았지만 기본적인 과정을 설명합니다. 따라서 예제 데모의 코드와 코드를 보면 너무 많은 문제가 없어야합니다.
— PeterT

또한 bullet 폴더의 예제를 확인하십시오. 'em
— Maik Semder

@ MaikSemder 특정 항목을 여는 방법을 잘 모르겠습니다. 파일을 리눅스로만 만드나요?
— SirYakalot

실제로 예제를 여는 방법에 대한 메모는 매우 도움이 될 것입니다. 그런 다음 예제를 어떻게 연결했는지 볼 수 있습니다. 나는 이것을 위해 구글을 돌아 다니지 만 할 수있는 동안 물어 봐야한다고 생각했다.
— SirYakalot

그것은 당신이 어떤 플랫폼인지에 달려 있습니다. Windows의 Visual Studio의 경우 예제에 대한 .sln 파일이 있으며 이것이 사용하는 것으로 가정합니다. 불릿 폴더에서 sln 파일을 검색하십시오.
— Maik Semder 2019

답변:


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폴더입니다 . 두 번째는 프로젝트에 연결할 라이브러리 파일을 저장할 폴더입니다 . 포함과 연결은 서로 다른 두 가지입니다..hlib.lib

그러나 아직 엔진을 빌드lib 하지 않았으므로 폴더는 비어 있어야합니다 . 따라서 CMake 및 Visual Studio를 사용하여 프로젝트를 빌드하는 방법에 대한 매뉴얼을 참조하십시오. 7 페이지에 있습니다.

당신이 성공 후에는 적어도 세 개의 파일이 있어야 lib폴더 : BulletDynamics.lib, BulletCollision.lib그리고 LinearMath.lib(I 수동에서 추측하고있다). 이제 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에서 라이브러리 목록을 종속성 목록에 추가하십시오. 각 라이브러리를로 분리 ;하고 파일 확장자를 잊지 마십시오. 예를 들어 목록 끝에 다음을 추가 할 수 있습니다BulletDynamics.lib;BulletCollision.lib;LinearMath.lib ..

그런 다음 프로젝트를 빌드하고 실행할 수 있어야합니다.


질문하기 전에 울부 짖었지만 ... 게임에 올바른 파일을 포함시키는 것과 같은 매우 기본적인 작업을 어떻게 수행합니까? 특정 사항이 필요한 경우 강체 충돌을 처리 할 파일을 찾고 있습니다. 또한 지금까지 도움을 주셔서 대단히 감사합니다!
— SirYakalot

@AsherEinhorn 편집 내용을 확인하십시오.
— David Gouveia

@AsherEinhorn 문제 없습니다. 몇 년 전 C ++ 라이브러리를 처음 사용할 때도 문제가되었습니다.
— David Gouveia

예, 그것은 지금까지 내가 피했던 것들 중 하나입니다. 내 게임의 모든 코드는 내 것이지만 내 자신의 물리 엔진을 작성하는 것은 다른 사람들이 나보다 더 잘했을 때 시간 낭비입니다. 아마 그럴 것이다.
— SirYakalot

@AsherEinhorn 예, 게임 이 단순 해 보이지만 자신의 물리 엔진을 작성하는 것을 귀찮게하지 마십시오 . 물리 엔진을 처음 사용한 것은 간단한 2D 게임에서 직접 구현하려고 시도한 후였습니다. 분리 축 정리를 사용하여 OBB-OBB 충돌 감지를 구현했지만 충돌 응답이 필요한 지점에 도달하면 완전히 멈췄습니다. 그런 다음 물리 엔진 (특히 Box2D를 사용)을 시도하고 1 시간 안에 모든 것이 작동하고 있다고 생각했습니다.
— David Gouveia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.