응애맘마조
230109 강의 본문
오늘부터 이틀간 카메라 이동에 대해서 배우게 되었습니다.
카메라 시점의 이동이 어떻게 변화하느냐에 따라 게임 품질과 역동성이 강조가 된다고 합니다.
먼저 다시 중요하게 필요했던 변수에 대해 작성하겠습니다.
변수로 메모리 할당에는 두가지 방법이 있습니다. 동적 생성과 지역 변수를 사용하는 방법입니다.
동적 생성은 사용자가 필요할 때 생성되고 필요 없을 때 해제 하는 방법입니다.
지역 변수는 선언 되었을 때 생성하고 메인 함수가 없어질 때 일괄적으로 해제가 됩니다.
(지역 변수의 주기는 자동 주기입니다.)
사용하고 난 메모리는 계속 할당되어있을 필요가 없기 때문에 delete 함수를 사용하여 해제를 하는데
해제를 두 번 이상 하게 되면 프로그램 창을 닫았을 때 액세스 위반이 나게 됩니다.
이미 해제했던 메모리를 다시 접근해서 해제 시도를 하기 때문에 그렇습니다.
물론 프로그램마다 두 번 이상 하는 경우도 있는데 지금은 그렇게까지 하기 않기 때문에 넘어가겠습니다.
이런 문제점을 해결하기 위해 Safedelete() 함수를 사용하고 있습니다.
이 함수를 작성하게 되면 보라색으로 글씨가 되는데 define 값으로 정의가 되어 있습니다.
#define SafeDelete(p) { if(p){ delete (p); (p) = nullptr; } }
위의 코드는 Safedelete() 함수의 내용입니다.
0이라는 주소값으로 넘겨서 메모리를 해제하겠다는 의미입니다. 두 번 이상을 해도 액세스 위반이 되지 않습니다.
마지막으로 hlsl 파일 내 코드에 Saturate() 함수가 있습니다. 단어의 정의로는 묶거나 가두다는 뜻이 있습니다.
이 함수를 적용하게 되면 플레이어나 유저의 행동이나 카메라 시점 이동을 제한할 때 사용합니다.
(특히 게임 포트리스의 플레이어가 포 발사의 각도를 조작할 수 있는 부분이 360˚가 안 되는 의미로 보시면 됩니다.)
일주일간의 프로젝트가 끝났습니다. 끝나니까 2주 동안 해야 되는 조별 과제 형식의 프로젝트가 시작되었습니다.
읽어주셔서 감사합니다.