2D 로프 충돌 감지


13

다음 youtube 비디오와 같은 객체와 충돌 할 수있는 로프를 만들고 싶습니다.

2D 게임 물리학 로프

포인트를 사용 하고이 포인트를 선으로 연결하는 Verlet 통합을 구현한다고 생각합니다. 비디오에 효과를 내기 위해 로프에 어떤 유형의 충돌 감지를 적용할지 알아 내려고합니다.

각 지점마다 CD를 넣어야한다고 생각합니다. box2D를 사용하고 싶습니다. 각 점을 강체 작업으로 만드는 것이 궁금합니다. 모든 조언을 부탁드립니다.


1
링크에서 비디오를주의 깊게 살펴보면 시뮬레이션되는 "로프"가 실제로 체인, 즉 연속적으로 유연한 프리미티브가 아니라 한 줄로 연결된 많은 수의 비 유연한 세그먼트임을 분명히 알 수 있습니다. 로프가 작은 원형 장애물을 감쌀 때 가장 분명합니다. 모서리가 돌고있는 것을 볼 수 있습니다. 체인은 연속 로프보다 시뮬레이션하기가 훨씬 쉽습니다. 각 링크는 단지 충돌 기본 요소이며 서로 영구적으로 연결되어 있습니다. 보다 확실한 동작을 위해 각 링크를 완전히 융통성있는 것이 아니라 매우 뻣뻣한 스프링으로 만듭니다.
Paul Z

답변:


6

Box2D를 사용하고 있으므로 일련의 사각형을 만들고 Box2D의 관절 을 사용 하여 결합 할 수 있습니다. 거기에 밧줄이 있습니다.

구부러진 로프에서 구석을 파고 들지 않기 위해 두 가지 옵션을 상상할 수 있습니다.

  1. 로프 세그먼트에 둥근 끝을 제공하십시오 (그래서 더 이상 직사각형이 아닙니다)
  2. 이 로프 자체를 보이지 않게하고 물리에만 사용하십시오. 각 프레임에서 관절의 위치를 ​​잡고이를 사용하여 플레이어 볼 수있는 밧줄을 즉석에서 그립니다 .

경고 : 나는 이것을 직접 시도한 적이 없지만 게시 한 비디오가 실제로 같은 것을 표시 할 때 일련의 결합 된 사각형이 실패하는 방법을 알지 못합니다.

편집 : 방금 PaulZ를 보았고 같은 것을 깨달았습니다. 질문에 대한 그의 의견도 읽으십시오.


2

빠른 구글이 여기에 던졌다 . Box2D를 사용하여 간단한 로프를 구현하는 데모, 설명 및 코드 (Flash) 로프는 장면 상단의 블록 자체와 충돌합니다.


0

다음은 내가 할 일입니다. 선의 각 점을 원으로 만들고 원이 겹칠 정도로 충분한 점을 만드십시오. 이 지점은 표준 충돌이 아닌 각 점을 이웃과 연결하여 고정 점을 유지합니다.

Box2D를 모르지만 필요한 기능이 있다고 생각합니다.


0

원래 Box2D에는 점대 점 구속 조건과 결합 된 얇은 상자로 만든 로프 브리지 데모가있었습니다. 시작하기에 좋은 곳이 될 것입니다 (아직 데모와 함께 제공되는지는 모르겠지만 다시 만드는 것이 간단합니다).

강체 시뮬레이터와 독립적으로 거리 제약 조건을 가진 입자로 로프를 구현하는 것은 충분히 쉽습니다 (이 기사에서 설명한 것과 같이 Verlet 통합 및 제약 해결 방법을 사용하면 http://www.gamasutra.com/resource_guide/ 20030121 / jacobson_pfv.htm ), 강체가 로프에 반응하도록하려면 (예 : 댕글 링 상자가있는 비디오) 로프가 훨씬 복잡해집니다. Box2D와 같은 포괄적 인 도구 모음으로 시작하여 거꾸로 작업하는 대신 파티클로 빌드하려고합니다.


0

SpeedHack 2002의 Allegro 게임 : Cupid를 기억합니다 . 풍경과 충돌하는 로프 구현이 포함되어 있습니다. 소스 코드의 heart_tails.cpp 파일에있는 PhysParticles 및 HeartTrails 클래스를 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.