WinAPI 61 렌더링 최적화

CJB_ny·2022년 10월 6일
0

WinAPI

목록 보기
64/79
post-thumbnail

오늘 배운거 👍👍👍

  • tile만을 예외적으로 렌더링 하는 부분구현

  • render_tile을 구현후 현재 카메라좌표와 해상도의 사이즈와 tile_size를 통해 행과 열을 구해 tile의 현재 인덱스를 추출함.


몇가지 보완 하고 넘어 갈 것이다.

타일 갯수 많아 질 경우 프레임 드랍이 심해질 것이다.

타일이 100x100일때 렌더링 만번함

수정할 부분

딱 화면에만 나오는 녀석들만 렌더링 되도록 수정해야한다.

Scene의 모든 물체에 대해서 render진행하는데 Tile에 대해서만 예외적으로 렌더링 해야한다.

이렇게 타일에 대해서만 따로 렌더링 진행 ㄱㄱ.

구현하기

이렇게 구하면은 타일이 몇번째 행의 몇번째 열인지 구할 수 있다.

이까지 leftTop 좌표 알아내고 거기에 해당하는 타일의 인덱스까지 알아냈다.

이제는

우리 해상도 안에 들어올 타일의 갯수를 알아내야한다.

이렇게 구해주고 이중 for문 안에서의 현재 인덱스는

이런식으로 된다.

현재 타일의 x 갯수 : _tileXCount에다가 * curRow + curCol을 해주어야 행과열에 맞는 인덱스가 나온다.

예외처리 필요한 부분

카메라가 11시방향을 찍을 때 음수가 나올 것이다.

음수가 나오면은 현재 start지점을 무조건 0으로 해야한다.

현재 curRow/curCol 이 원래 우리 타일의 가로 세로 갯수를 넘어가면은 안된다.

for 문 행/열 분석

curCol은 현재 타일의 X 갯수보다 많거나 같으면 안된다.

인덱스이기 때문에 같아도 안된다.

왜 같으면 안되나??

내가 왜 같으면 안되나 했는데 이거 나중에 winTileXCount에 1더 더해주었다.

더 최적화 하는 방법 ❗❗❗

타일 전체 사이즈만한 텍스쳐 한장을 만든다.

100x100이라면은 엄청 큰 텍스쳐 만든다.

그리고 이런식으로 미리 만개를 찍어놓는다.

목적지 정해서 한방에 render하면은 렌더링 1회로 끝난다.

전체 맵을 잡아서 필요한 영역만 그린다.

화면에 비해서 너무 큰 텍스쳐를 찍을려고 할 경우

큰 텍스처의 해당하는 원하는 영역만 딱 짤라서 가지고 와야

불필요한 부분에 대한 렌더링을 막을 수 있다.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글