WinAPI 40 Camera (1)

CJB_ny·2022년 9월 19일
0

WinAPI

목록 보기
39/79
post-thumbnail

오늘 배운거 👍👍👍

  • 교차 참조시 발생하는 문제

    https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=icysword&logNo=140190552673

    a.h, b.h 있을 경우 a.cpp에는 a.h를 참조중. b.cpp에는 b.h를 참조중이다.
    그런데 b.h에서 a.h를 참조한다고 a.h에서도 b.h를 참조한다고 가정하고 b.cpp를 컴파일 한다고 가정을 하자.
    b.cpp제일 위에 b.h를 참조를 하니 b.h로 간다(복사) b.h로 가니 a.h를 참조를 한다.
    그래서 a,h로간다. 그러니 a.h는 b.h를 참조를 한다... 이거 반복...


이런 pos 들은 오브젝트들의 '실질적인 위치'를 말하는것이다.

어디에든지 있을 수 있다.

근데 이것이 화면에 나온다는 보장은 없다.

카메라가 찍고있어야 나오는 것이다.

실제 좌표, 출력 좌표 ❗❗

를 따로 관리를 해야하는 필요성이 생겼다.

이 _pos로 충돌처리를 하고 원래대로 진행 할 것이고

이녀석이 지금 '실제 좌표'이다.

CameraManager 구현

일단 이딴식으로 해주는데

targetObect가 Dead인 상태일 수도 있으니까 확인 해주어야 한다.

그런데 어떻게 카메라의 좌표를 잡아주어야지만

오브젝트 좌표로 설정할 수 있을까?

실제좌표랑 렌더링용 좌표가 일치되는 순간이 어딜 볼 때인가?

'정중앙'이다.

그래서 씬이 스타트할 때 보고 있어야할 부분이

이렇게 했을 때 원래 상황이랑 같은 상황이다.

Camera update

카메라는 매 update마다

화면 중앙좌표와 카메라 LookAt 좌표간의 차이값을 계산해야한다.

CalDiff 함수에서 차이를 계산을 할 것이다.

이렇게 되면은

왼쪽 상단이 오브젝트들이 있는 위치이고 오른쪽 하단이 현재 카메라가 있는 위치이다.

이 '차이값'만큼 물체들이 11시방향으로 가 주어야한다.

이렇게 _diff == 차이값을 CameraManager에서 구해 놓았기 때문에

'모든 오브젝트'들은 렌더링할 때 '렌더링 좌표'를 얻어 낼 수 있어야한다.

웬만하면 헤더에서 헤더참조를 안하지만 CameraManager의 경우에만 참조를 하도록 하자.


왜 헤더에서 헤더 참조를 피하나?


그래서 모든 오브젝트들은 렌더링될 때 자신의 '실제위치'에서 렌더링 할게 아니라

자신의 렌더링 죄표를 얻어 내야한다.

현재 _pos가 해당 오브젝트의 진짜 죄표인데

하지만 출력될 때에는 카메라가 어디를 보고 있냐에 따라서 그걸 감안을 해서

'위치 차이값'을 계산을 해야한다.

이렇게 RenderPos를 얻어 올 수 있도록 해주자.

내 자신의 좌표를 넣어주고 출력될 때에는 어디에 렌더링 좌표가 나오는게 맞겠냐? 이말이다.

GetRenderPos를 구현을 해주고 이 renderPos를 기반으로

이렇게 그려져야한다.

다음시간에는 카메라 이동을 구현해볼 것이다.

물체들의 실제 죄표는 이동하지는 않지만...

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

0개의 댓글