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


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.