응애맘마조
221230 강의 본문
※현재 프로그램에서는 해상도를 1400×800을 사용하고 있습니다.
어제 과제에 대해 풀이 내용 말고는 크게 없었습니다.
먼저 마우스 좌표가 스크린상 좌표 값과 월드 좌표 값이 다릅니다.
그래서 스크린 좌표를 월드 좌표로 변환해야 됩니다.
x는 해상도의 절반인 700을 빼줘야 월드 좌표로 바뀝니다.
y는 API상과 DirectX상 증가하는 방향이 다르기 때문에 y값인 800에서 먼저 빼서 증가량을 바꿔줘야 합니다.
그 후에 절반 값인 400을 빼서 계산을 합니다.
카메라 이동에 대해선 아직 배우지는 않았습니다. 강의에서는 카메라 이동값까지 계산해주는 것이 Screen To World라고 합니다.
(이것이 완전한 공식이라고 했습니다.)
로테이션에 θ값을 넣어서 단위벡터를 먼저 만듭니다.
마우스 포지션 값에서 플레이어 객체의 위치를 빼면 차이벡터가 나옵니다. 그 값에서 나온 최대값을 나누어서 방향벡터를 만들면 되고 그 값을 DirToRadian에 넣으면 θ값이 나오게 됩니다.
하지만 이대로 만들고 실행하게 되면 문제는 없겠지만 카메라가 이동을 하거나 창 사이즈를 줄이게 되면 마우스 커서에 따라 이동하지 않게 됩니다. 왜냐하면 700을 빼거나 800을 빼고 400을 빼는 것은 설정한 창 사이즈에 대한 고정값이기 때문입니다. 그래서 사이즈가 달라지게 되면 정상적으로 동작하지 않습니다. 그래서 쓰는 것이 클래스로 만든 app입니다. 여기서 따로 만든 절반 값을 쓰게 되는데 이것은 절반 값을 사용하지만 고정값이 아니고 현재 창 사이즈의 절반 값을 사용하기 때문에 창 사이즈가 달라져도 마우스 커서에 제대로 따라오게 됩니다.
여기서는 제 개인적인 문제였는데 extern과 friend의 차이에 대해 질문하지는 않았었지만 모르고 있었는데 오늘 자세히 알게 되었습니다.
하나의 cpp 안에서 전역변수처럼 관리하는 것을 내부링크라고 합니다.
만약 다른 cpp에서도 쓰고 싶으면 Framework안에서 extern을 사용하면 됩니다.
friend는 cpp간의 모든 외부링크를 열어줄 때 사용합니다.
(이때 헤더파일에서 private로 되어있거나 public으로 되어있어도 상관없이 사용할 수 있습니다.)
강사님 예상으로 다음 주 화요일쯤부터 진짜로 DirectX를 하게 되었습니다.
이제까지 하던 것에 비해 많이 어렵고 힘들 것이라고 했는데 그래도 끝까지 해보겠습니다.
읽어주셔서 감사합니다.