1. Renderer를 Off기능이 제기능 하지 않는다.
설명 - Renderer를 Off하면 화면에 그려지는 기능이 사라져야하는데 그러지 않고있다.
Renderer가 Off면 continue하게해서 해결.
2. Renderer에 Order는 Render를 비추게될 카메라의 Order와 그 카메라 내부에서 랜더러의 그룹 Order로
두종류가 있기 때문에 각각 관리를 해주어야한다.
SetRenderOrder를 통해 카메라 내부에서의 Renderer의 Order를 셋팅해 줄수 있다.
SetCameraOrder를 통해 Renderer가 속한 카메라그룹을 셋팅할수 있다.
// 카메라 내부에서의 순서 변경
void GameEngineRenderer::SetRenderOrder(int _Order)
{
if (nullptr == Camera)
{
MsgBoxAssert("카메라가 존재하지 않는 랜더러 입니다. 카메라부터 지정해주세요.");
return;
}
Camera->Renderers[GetOrder()].remove(GetDynamic_Cast_This<GameEngineRenderer>());
GameEngineObject::SetOrder(_Order);
Camera->Renderers[GetOrder()].push_back(GetDynamic_Cast_This<GameEngineRenderer>());
}
// 날 바라보는 카메라 변경
void GameEngineRenderer::SetCameraOrder(int _Order)
{
SetViewCameraSelect(_Order);
}
void GameEngineRenderer::SetViewCameraSelect(int _Order)
{
GameEngineLevel* Level = GetLevel();
std::shared_ptr<GameEngineCamera> FindCamera = Level->GetCamera(_Order);
if (nullptr == FindCamera)
{
MsgBoxAssert("카메라가 존재하지 않는데 랜더러를 넣으려고 했습니다.");
return;
}
if (nullptr != Camera)
{
Camera->Renderers[GetOrder()].remove(GetDynamic_Cast_This<GameEngineRenderer>());
}
Camera = FindCamera.get();
Camera->Renderers[GetOrder()].push_back(GetDynamic_Cast_This<GameEngineRenderer>());
// ViewInfo[Camera.get()] = _Order;
}
3. Transform에 충돌체크를 담당할 데이터를 만들어준다.
CloType은 2D게임을 제작중이기에 2D만 사용한다.
SPHERE2D 는 구체형 충돌 타입이다.
AABBBOX2D 는 회전하지않은 박스를 말한다.
OBBBOX2D는 회전한 박스를 말한다. ex) 45도 기울어진 사각형.
enum class ColType
{
// 캡슐
// 2D에서의 충돌은 모두가 한축이 같아야 한다.
// 우리는 충돌이 2D가 더 느려요.
SPHERE2D, // z를 0으로 만들고 충돌 구 50 60개를 돌릴수가 있다.
AABBBOX2D, // z를 0으로 만들고 충돌 Axis-Aligned Bounding 회전하지 않은 박스
OBBBOX2D, // z를 0으로 만들고 충돌 Oriented Bounding Box 회전한 박스 <= 을 1번할 연산량으로
SPHERE3D,
AABBBOX3D,
OBBBOX3D,
MAX,
};
class GameEngineTransform;
class CollisionParameter
{
public:
GameEngineTransform& Left;
GameEngineTransform& Right;
ColType LeftType = ColType::AABBBOX2D;
ColType RightType = ColType::AABBBOX2D;
};
class CollisionData
{
public:
union
{
// 다이렉트 x에서 지원해주는 충돌용 도형
DirectX::BoundingSphere SPHERE;
DirectX::BoundingBox AABB;
DirectX::BoundingOrientedBox OBB;
};
CollisionData()
: OBB()
{
}
};
4. union을 사용한 이유.
설명 - 아래 코드에서 union을 사용한 이유를 설명한다.
SPHERE, AABB, OBB의 바이트 패딩을 살펴보면
SPHERE 위치 float, float, float 크기 float
AABB 위치 float, float, float 크기 float, float, float
OBB 위치 flaot, float, float 크기 float, float, float 회전 float, float, float, float
이와 같은 구성을 이루고 있어서
데이터의 크기. 요구하는 정보가 각각 동일하게 설정되어 있어서 union으로 묶어서 사용할수 있게된다.
public:
union
{
// 다이렉트 x에서 지원해주는 충돌용 도형
DirectX::BoundingSphere SPHERE;
DirectX::BoundingBox AABB;
DirectX::BoundingOrientedBox OBB;
};
'오늘 하루' 카테고리의 다른 글
9월 8일. 이미지트랜스폼 추가, 피봇 추가 (0) | 2023.09.08 |
---|---|
9월 7일. 충돌체 (0) | 2023.09.07 |
9월 6일. 쿼터니온과 충돌판별 (0) | 2023.09.06 |
9월 1일. (0) | 2023.09.01 |
8월 31일. (0) | 2023.08.31 |