DirectX 11 복습

복습3

슬뷔 2023. 12. 26. 16:11

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