본문 바로가기
728x90

학원28

DirectX 3D Block 저번에 만든 Block맵에서 유저가 블럭을 밟고 블럭을 깨거나 그것을 먹는것을 추가하기 우선 엑셀또는 스프레드시트를 사용하는데 게임의 여러가지의 요소들의 데이터를 관리하기 위해 사용 여러가지의 table을 사용하기에 key값을 사용하여 설정해준다. 연관컨테이너 검색에 좋기 때문에 처음 게임시작할때 모든 데이터를 로드하고 게임에서 빼서 쓰는 형태 일반적으로는 csv를 사용하는데 간혹 tsv 파일을 사용하는 경우는 시나리오 같은것을 관리 할때 사용 csv 파일로 다운을 받아 현재 쓰고있는 파일에 폴더를 하나 만들어 넣어준다. 다음 Data는 Singleton으로 사용하는것이 편하기에 BlockDataManage.h파일을 새로 만들어준다. struct로 아까만든 csv파일을 받기 위한 key, name, mo.. 2023. 11. 15.
DirectX 3D Box-Sphere collision Box와 Sphere충돌을 위해 우선 Collision 폴더에 있는 Boxcollider에 IsSphereCollision 부분에 우선 Obb충돌 정보를 가져온다. 축이 세개임으로 3번 반복 box에 투영을 시켜 벡터를 구하면 원에 가장 가까운 점이 나온다. 그것을 위해 우선 사각형에서 원으로 가는 벡터를 구한다. 다음 박스의 기준축과 거리를 내적하여 벡터를 구하고 mult 를 이용하여 음수 양수를 구한다. 음수는 90도 넘어갔을경우 양수는 90도가 안되었을떄 방향을 정함 그리고 구해진 값들을 이용하여 closestPointToSphere에 사각형Box에서 가장 가까운 점을 구해준다. 그후 원의 중점과 가장 가까운점과의 거리를 구하여 체크해주고 Spherecollider.cpp 파일에 값을 넘겨주면 이런.. 2023. 11. 14.
DirectX 3D LayCollision Box 박스와의 Lay Collision Collision Scene 수정해주고 Box LayCollision Slab method이론 Lay를쏘았을때 각각의 점들이 지나는지 안지나는지에 대한 충돌을 하여 체크를 할 수 있음. GameMath.h 만들기 실수 비교는 위험하기 때문에 FLT_EPSILON - 아주 작은 수, 절대값에서 가장 작은 수와 비교하여 약간의 오차가 났을 경우를 대비 코드로 구현 delta는 ray 시작점에서 box의 위치 FLT_MAX = 실수의 최댓값 조건문으로 Gamemath에서 만든 NearlyEqual 함수 사용 하여 비교 수직인 경우 e와 x축을 내적하면 투영된 거리가 나오는데 투영된거리가 min보다 작거나 max x 보다 크면 벗어난걸로 체크 다음 수직이 아닌 경우를 체크 t1.. 2023. 11. 9.
DirectX 3D Box Collision 박스 형태의 충돌 구현 Box 충돌을 위한 BoxCollider.h파일 생성 OBB충돌로 구현 분리축 이론을 바탕으로 하는데 3D OBB충돌 같은경우에는 특정 기준 바탕으로 축으로 투영을시켜 길이 두개를 구하여 a의 길이와 b의 길이의 합이 d보다 크면 충돌하지 않은 상태 x - 사각형의 가로축 절반에 RIght vector를 곱해줌 y - 사각형의 세로축의 절반에 up vector를 곱해줌 x + y = z가 나오게 되고 z와 a가 내적하면 a 의 크기를 알 수 있다. 그래서 halfsize Vector변수를 써준다. struct로 obbDesc생성하여 vector로 pos값과, axis - 3개 잡아주는데 right vector: x up vector : y forward vector : z 다음 생.. 2023. 11. 9.
728x90