렌더링 최적화

김태훈·2024년 1월 13일
0

Win32API

목록 보기
23/24
post-custom-banner

렌더링 최적화

현재 scenetool이 타일을 생성하기 때문에 많이 생성한다면 프레임 드랍이 발생

카메라가 찍고 있는 부분만 렌더링

타일을 일렬로 쭉 배치 했기 때문에 화면안에 들어오는 범위를 알아 낼 수 있다

카메라 LT좌표 알기
LT에 해당하는 타일의 인덱스 알기

화면안에 들어오는 타일 개수 알기

void CScene::render_tile(HDC _dc)
{
	Vec2 vResolution = CCore::GetInst()->Get_Resoulution();
	Vec2 vCameraLT=CCamera::GetInst()->GetCamPos()- (vResolution/2);
	int iCamLTRow =(int)(vCameraLT.y / TILE_SIZE);
	int iCamLTCol = (int)(vCameraLT.x / TILE_SIZE);
	int iCamLTIdx = (iCamLTRow * m_iTileXCount) + iCamLTCol;
	UINT iClient_Row = (int)(vResolution.y / TILE_SIZE);
	UINT iClient_Col = (int)(vResolution.x / TILE_SIZE);	
	const vector<CObject*>&vecTile 
    =CSceneMgr::GetInst()->Get_pCurScene()->Get_vecpobj(GROUP_TYPE::Tile);
		
	//타일의 넓이가 카메라 넓이 보다 작을때
	if (Vec2{ (int)iClient_Row,(int)iClient_Col } 
    >= Vec2{ (int)m_iTileYCount,(int)m_iTileXCount })
	{
		for (size_t j =0; j <vecTile.size(); ++j)
			vecTile[j]->render(_dc);
	}
	else 
	{    //타일의 넓이가 카메라 넓이 보다 클 때 
		if (iCamLTRow < 0)
			iCamLTRow = 0;
		if (iCamLTCol < 0)
			iCamLTCol = 0;

		for (int i = iCamLTRow; i < iClient_Row + iCamLTRow; ++i)
		{	
		
			for (int j = iCamLTCol; j < iClient_Col + iCamLTCol; ++j)
				{
					vecTile[(m_iTileXCount * i) + j]->render(_dc);
				}
		}
	}


}

통 배경을 쓸때에는 배경화면을 텍스쳐 해놓고 카메라도 따로 텍스쳐 만들고
배경화면 텍스쳐에 카메라 텍스쳐가 짤라서 사용 하는 것도 하나의 방식

profile
복습을 위한 핵심 내용 및 모작
post-custom-banner

0개의 댓글