LevelMgr 에서 tick 과 finaltick 으로 구분되어 있는 이유
tick -> 오브젝트 or Script 에서 해야할 일
finaltick -> 컴포넌트 (script가 아닌) 들의 마무리 작업
그래서, GameObject 의 tick에 가면 모든 컴포넌트에 tick을 주고, Script에 tick 을 준다.
void CGameObject::tick()
{
for (UINT i = 0; i < (UINT)COMPONENT_TYPE::END; ++i)
{
if (nullptr != m_arrCom[i])
m_arrCom[i]->tick();
}
for (size_t i = 0; i < m_vecScript.size(); ++i)
{
m_vecScript[i]->tick();
}
for (size_t i = 0; i < m_vecChild.size(); ++i)
{
m_vecChild[i]->tick();
}
}
GameObject 에서 finaltick 이 들어오면, Component 들에게 finaltick 을 주고 Script 에 finaltick을 안준다
void CGameObject::finaltick()
{
if (m_bLifeSpan)
{
m_CurLifeTime += DT;
if (m_LifeTime < m_CurLifeTime)
{
DestroyObject(this);
}
}
for (UINT i = 0; i < (UINT)COMPONENT_TYPE::END; ++i)
{
if (nullptr != m_arrCom[i])
m_arrCom[i]->finaltick();
}
for (size_t i = 0; i < m_vecChild.size(); ++i)
{
m_vecChild[i]->finaltick();
}
// 소속 레이어가 없는데 finaltick 이 호출되었다.
assert(-1 != m_iLayerIdx);
// 레이어 등록
CLayer* pCurLayer = CLevelMgr::GetInst()->GetCurLevel()->GetLayer(m_iLayerIdx);
pCurLayer->RegisterObject(this);
}
카메라 컴포넌트의 finaltick
뷰행렬, 투영행렬 연산
void CCamera::finaltick()
{
CalcViewMat();
CalcProjMat();
}
void CRenderMgr::render_editor()
{
// Directional 광원 시점에서 Shadow맵핑을 위한 DepthMap 생성
render_dynamic_shadowdepth();
m_pEditorCam->SortObject();
m_pEditorCam->render();
}
물체 분류 작업
- 해당 카메라가 볼 수 있는 물체(레이어 분류)
- 재질에 따른 분류 ( 재질 -> 쉐이더 ) 쉐이더 도메인
- 쉐이더 도메인에 따라서 랜더링 순서 분류
'DirectX 11 복습' 카테고리의 다른 글
복습4 (0) | 2023.12.26 |
---|---|
복습2 (0) | 2023.12.26 |
엔진 솔루션 설명 (0) | 2023.12.19 |