렌더링 최적화
현재 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);
}
}
}
}
통 배경을 쓸때에는 배경화면을 텍스쳐 해놓고 카메라도 따로 텍스쳐 만들고
배경화면 텍스쳐에 카메라 텍스쳐가 짤라서 사용 하는 것도 하나의 방식