목록C++ (208)
응애맘마조
게임 제작에 드디어 중요한 충돌을 배우기 시작했습니다. 유틸리티 안에 넣고 사용하고 있습니다. 유틸리티의 정의는 다용도나 다목적이라는 의미를 갖고 있습니다. 프로그래밍에서의 유틸리티는 어떤 cpp에서도 다목적으로 사용할 수 있는 의미를 갖고 있습니다. 예를 들어 삼각함수의 내각을 구하는 DirToRadian이나 이번에 배우고 있는 Intersect에 사용 중인 것을 볼 수 있습니다. 원래 사각형을 그릴 때는 Left, Top, Right, Bottom 이렇게 4개를 알아야 됩니다. 하지만 그렇게 하게 되면 코드도 길어지고 계산해야 되는 것도 많아져서 비효율적입니다. 그래서 좌표의 최솟값(min)과 최댓값(max)을 이용해서 만들기로 했습니다. min은 사각형의 왼쪽 아래(좌표는 -1, -1)입니다. ma..
오늘도 어제에 이어 카메라에 대해서 배웠습니다. 3D 과정에서는 카메라가 많이 필요합니다. 하지만 지금 배우는 2D 과정에서는 카메라가 여러 개 필요하지 않고 하나만 필요합니다. 그래서 카메라도 Singleton을 사용합니다. (원래 카메라라는 개념은 없습니다. 정점도 없고 단지 출력만 해서 구현을 한 거라 존재하지는 않습니다.) 카메라도 행렬을 사용합니다. enum 안에 SPACE로 해서 WORLD와 SCREEN이 있습니다. WORLD는 카메라입니다. 다른 객체의 움직임에 사용됩니다. SPACE는 공간 이동을 받지 않습니다. 시간의 표시나 UI에 사용됩니다. 카메라는 V, P, VP를 사용합니다. V는 뷰 행렬(역이동 행렬)입니다. 이동 행렬을 사용하고 이동 방향의 반대로 객체가 움직이게 합니다. (그..
오늘부터 이틀간 카메라 이동에 대해서 배우게 되었습니다. 카메라 시점의 이동이 어떻게 변화하느냐에 따라 게임 품질과 역동성이 강조가 된다고 합니다. 먼저 다시 중요하게 필요했던 변수에 대해 작성하겠습니다. 변수로 메모리 할당에는 두가지 방법이 있습니다. 동적 생성과 지역 변수를 사용하는 방법입니다. 동적 생성은 사용자가 필요할 때 생성되고 필요 없을 때 해제 하는 방법입니다. 지역 변수는 선언 되었을 때 생성하고 메인 함수가 없어질 때 일괄적으로 해제가 됩니다. (지역 변수의 주기는 자동 주기입니다.) 사용하고 난 메모리는 계속 할당되어있을 필요가 없기 때문에 delete 함수를 사용하여 해제를 하는데 해제를 두 번 이상 하게 되면 프로그램 창을 닫았을 때 액세스 위반이 나게 됩니다. 이미 해제했던 메모..
어제 말했던 대로 VS에 들어갔습니다. 오늘이 가장 어렵다고 하네요. IA에서 VS로 넘겨주게 될 때 position과 color값을 넘기게 됩니다. 이 사이에 넘겨주는 값을 InputLayout이라고 했습니다. struct VertexInput { float4 position : POSITION0; float4 color : COLOR0; }; float4는 float이 4개 붙어있다고 보시면 됩니다. (4Byte × 4 = 16Byte로 볼 수 있습니다.) 위의 코드에서 POSITION0, COLOR를 시맨틱(semantic)이라고 하고 용도를 나타냅니다. Layout에서 넣은 값들을 IA출력으로 넘기고 그게 VS의 입력으로 들어갑니다. D3D11_INPUT_ELEMENT_DESC는 VS에 들어온 원..
IA의 마지막 3일차입니다. 오늘은 Shader(셰이더)에 대해서 했었습니다. 어제에 이어서 hlsl에 대해서 좀 더 배웠습니다. 이 hlsl에서는 중단점을 찍으면 중단점 자체에 오류가 생깁니다. 하지만 컴파일 대상이 되지 않아서 할 수가 없는데 렌더링 파이프라인을 거쳐 모니터에 출력이 되려면 반드시 컴파일을 해야 됩니다. 컴파일 대상이 아니지만 바인딩을 하는 방법이 있습니다. 셰이더 클래스가 있는데 그 안에 있는 자원들이 하게 됩니다. cpp파일을 보면 char, wchar_t, string, wstring이 있습니다. char은 아스키코드에 있는 문자 하나를 출력합니다. (그 이외의 문자는 출력할 수 없습니다.) wchar_t는 2바이트로 된 문자도 출력이 가능합니다. string은 아스키코드에 있는..