프로그래밍 2016. 2. 18. 01:31
728x90
obb 충돌 구현 1

 

 

집이나 바위 등을 aabb 로 충돌처리를 하고 있었는데,

이것들을 회전을 해 놓았을 경우, 막히지 않아야 할 부분이 막히는 현상이 생긴다.

aabb 니까 당연한 것이지만

 

충돌박스가 정사각형 모양이면, 그리 크게 티가 나지 않는데,

직사각형 모양이면, 캐릭터가 눈으로 보기에는 아무것도 없는 곳에

걸려 이동을 할수 없는 경우가 종종 생긴다.

길다란 초가집을 탑에서 보았을때, 45도쯤 비스듬히 돌려 놓았다 생각해보자.

 

나공간에는

스케일을 크게 만들어 놓은 오브젝트들이 많은데,

크기가 커질수록 위와 같은 현상이 두드러 진다.

 

게임상에서 아주 티가 많이 난다는 것.

 

결국 obb 충돌 처리를 사용할수 밖에 없다!

 

 

어떤 오브젝트가 있다고 하자.

이 오브젝트의 월드변환된 매트릭스의 역행렬을 구해서 AABB 로 변환후,

다른 오브젝트도 변환시켜서

AABB 충돌 체크를 하면, obb 충돌 체크와 같지 않을까라는 생각이 들었는데,

결국은 AABB 체크이기 때문에, 해결이 될수 없다.

AABB 체크는 세 축에 대한 반지름 길이 체크와 동일하기 때문에,

회전되어 비어지는 공간 같은것은 계산할수 없다.

 

 

참고로.

월드값에서 AABB 변환에 대한 소스 코드의 일부이다.

zMatrix 등은 모두 dx 구조체, 함수로 치환가능하다.

 

//자기꺼의 역행렬을 구해두고

zMatrix MatInv;
zMatrixInverse( &MatInv, NULL, opponent->eactor->GetLocalTMPtr() );

 

//자기꺼 변환 즉 AABB 로

Vector3 vOppActorMin, vOppActorMax;
vOppActorMin = opponent->eactor->GetColBoundMin_WorldPos();
vOppActorMax = opponent->eactor->GetColBoundMax_WorldPos();
zVec3TransformCoord( &vOppActorMin, &vOppActorMin, &MatInv );
zVec3TransformCoord( &vOppActorMax, &vOppActorMax, &MatInv );

 

//자기꺼의 역행렬로, 충돌 체크해야할 다른것들을 AABB 로 변환
zVec3TransformCoord( &vHitMin, &vHitMin, &MatInv );
zVec3TransformCoord( &vHitMax, &vHitMax, &MatInv );

  

//AABB VS AABB 체크

if( QCC_AABB2AABB( vOppActorMin, vOppActorMax, vHitMin, vHitMax ) )

{

}

 

 

기본적으로는

각각의 오브젝트는 8개의 점으로 이루어진 바운드박스(충돌박스)를 가지고 있어야 한다.

이 바운드 박스가 있어야, 오브젝트의 반지름도 계산하고,

AABB VS AABB

OBB VS OBB

도 계산할수 있다.

 

바운드박스는 오브젝트의 폴리곤을 구성하는 모든 버텍스를 조사하여, 가장 작은 min 값과 가장 큰 max 값으로 구성된 6면체이다.

기본적으로 local 값으로 구성되어 있고, 필요할때 월드 변환( 주로 포지션 이동) 을 적용하여,

여러가지 계산에 활용할수 있다.

 

일반적으로는

자신의 위치값과 min,max 사이의 거리로 구한 반지름값을 이용하여,

카메라 컬링, 충돌 전 처리 걸러내기,

다른 오브젝트와의 AABB 계산에도 많이 사용된다.

 

 

obb 역시 AABB 와 기본적인 개념은 같다.

세축이 있고 이에 대한 검사가 이루어 진다는 측면에서는,

 

차이점은

세축이 회전이 적용된 축이라는점, 축에 대한 검사가 AABB 축 검사보다는 매우 연산량이 많다는 것에 있겠다.

 

2장에서 이어집니다.

 

 

 

728x90

'프로그래밍' 카테고리의 다른 글

흑백 쉐이더, 그레이 쉐이더  (0) 2016.03.30
obb 충돌 구현 2  (0) 2016.02.18
vsm with cascade shadow map 2  (0) 2016.01.26
vsm with cascade shadow map 1  (0) 2016.01.25
vsm 지형 그림자  (0) 2016.01.14
posted by BK dddDang
: