목록C (155)
응애맘마조
제가 과제 해결을 못해서 늦었지만 과제풀이가 오늘의 수업이었습니다. GetTick()으로 해서 초 단위를 추가할 때는 DELTA를 더하면 됩니다. 만약 초를 다시 0으로 맞추려면 0으로 초기화하지 말고 DELTA에 더했던 값을 빼는 것이 좋습니다. (오차를 없애기 위해서입니다.) STL(Standard Template Library)은 표준 템플릿 라이브러리입니다. vector는 동적 배열이라서 가장 대표적으로 사용합니다. deque는 시작과 끝에서 삽입 및 삭제가 가능합니다. iterator는 반복자입니다. interval은 간격입니다. 이 변수 이름으로 과제를 풀면서 강의가 진행 되었습니다. 이번 강의에서 잔상을 만들어서 뱀처럼 늘리는 것이 과제였습니다. (다음 게시글에 올리겠습니다.) 특히 대시를 ..
회전된 오브젝트에 대한 충돌 처리를 배웠습니다. 점(마우스 커서)이나 원은 회전을 해도 똑같은 모양이지만 사각형은 다르기 때문에 사각형에 대한 오브젝트에 대해서만 신경 쓰면 됩니다. 하는 방법은 회전된 오브젝트에 대해서 축을 다시 정렬 합니다. 회전 하기 전 SRT의 S(scale)까지만 계산하고 역행렬(1 / RT)을 곱해서 재정렬을 합니다. 그렇게 하면 단위 행렬이 나오게 됩니다. (충돌 처리를 확인하는 오브젝트에 대해 모두 재정렬을 해야됩니다.) 이렇게 하면 충돌 처리가 되는 것처럼 보이지만 사실 영점에서 가상의 충돌체를 만들어서 충돌 처리를 하는 것처럼 보이는 것입니다. 사실 사각형보다도 이외의 다각형에 대한 충돌 처리도 있을 수 있습니다. 물론 구현한다면 가능하겠지만 코드도 길어지고 비용도 많이..
어제는 점과 오브젝트의 충돌에 대해서 배웠다면 오늘은 오브젝트와 오브젝트 간의 충돌에 대해서 배웠습니다. 충돌처리에도 두가지 방식이 있습니다. AABB(Axis Aligned Bounding Box)는 고정된 축의 오브젝트에 대한 충돌 처리입니다. OBB(Oriented Bounding Box)는 방향성(회전된)을 가진 오브젝트에 대한 충돌 처리입니다. OBB는 내적을 사용해서 충돌 처리를 합니다.(3D에서는 외적도 축에서 사용하지만 2D에서는 사용하지 않으므로 넘어가겠습니다.) 내적 함수는 Dot() 함수를 사용합니다. OBB를 하는 방법은 먼저 투영시켜서 충돌인지를 판정합니다. 투영시켜서 나온 값들을 전부 더합니다. 그래서 두 오브젝트간의 중점간의 길이를 더하고 투영시킨 값의 길이를 비교합니다. (중..
게임 제작에 드디어 중요한 충돌을 배우기 시작했습니다. 유틸리티 안에 넣고 사용하고 있습니다. 유틸리티의 정의는 다용도나 다목적이라는 의미를 갖고 있습니다. 프로그래밍에서의 유틸리티는 어떤 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는 뷰 행렬(역이동 행렬)입니다. 이동 행렬을 사용하고 이동 방향의 반대로 객체가 움직이게 합니다. (그..