OBB(Oriented Bounding Box) 정의. 위치와 크기, 회전 행렬(orientation)을 갖는다.
struct OBB3D
{
Point3D position;
Vec3 size;
Matrix orientation;
}
한 점이 OBB 에 충돌하는지 체크는 내적 연산을 활용.
OBB의 중점에서 testPoint 까지의 벡터 dir를 계산.
OBB의 회전 좌표계의 각 축으로 dir을 투영(Projection) 시킨다.이 때 내적을 활용. 내적 결과값은 투영시킨 벡터의 길이와 다른 벡터(각 축 벡터)의 길이를 곱한 값인데, 각 축 벡터의 길이는 1이므로 거리(distance)의 의미만 남음.
이 거리(distance)와 OBB의 크기를 체크해서 point 가 obb 에 충돌했는지 체크할 수 있다.
bool PointInOBB(const Point3D& point, const OBB3D& obb)
{
Vec3 dir = point - obb.position;
vector<Vec3> axis;
axis.push_back(obb.orientation.Right());
axis.push_back(obb.orientation.Up());
axis.push_back(obb.orientation.Backward());
vector<float> size;
size.push_back(obb.size.x);
size.push_back(obb.size.y);
size.push_back(obb.size.z);
for (int32 i = 0; i < 3; i++)
{
float distance = dir.Dot(axis[i]);
if (distance > size[i])
return false;
if (distance < -size[i])
return false;
}
return true;
}
게임 개발에 필수적인 내용을 담는 명서들을 소개합니다.
<유니티 교과서 개정6판>(유니티 최신 버전) 구입 링크
https://link.coupang.com/a/be3P0t
<리얼-타임 렌더링(REAL-TIME RENDERING) 4/e> 구입 링크
https://link.coupang.com/a/8VWas
<이득우의 게임 수학:39가지 예제로 배운다! 메타버스를 구성하는 게임 수학의 모든 것> 구입 링크
https://link.coupang.com/a/9BqLd
유니티 에셋 스토어 링크
https://assetstore.unity.com?aid=1011lvz7h
(링크를 통해 도서/에셋 구입시 일정액의 수수료를 지급받습니다.)
728x90
반응형
'게임 개발 자료' 카테고리의 다른 글
포인트 앤 클릭 퍼즐 디자인 (Point & Click Puzzle Design) GMTK 영상 메모 (0) | 2024.02.08 |
---|---|
스타 엔진(Star Engine) 알아보고 테크 데모 영상 훑어보기 (0) | 2024.02.05 |
3D 충돌체크 모든 유형별 정리 (2) | 2024.01.26 |
3D 기본 도형의 핵심 개념 간단 정리 (0) | 2024.01.16 |
방탈출 게임(Escape Room) 관련 자료 (0) | 2024.01.15 |
[Shader] Curved vertex shader (0) | 2024.01.06 |
[Blender] <나의 첫 블렌더> 책 블렌더 기본 조작 스터디 노트 (0) | 2023.11.17 |