응애맘마조
230113 강의 본문
회전된 오브젝트에 대한 충돌 처리를 배웠습니다.
점(마우스 커서)이나 원은 회전을 해도 똑같은 모양이지만 사각형은 다르기 때문에 사각형에 대한 오브젝트에 대해서만 신경 쓰면 됩니다.
하는 방법은 회전된 오브젝트에 대해서 축을 다시 정렬 합니다.
회전 하기 전 SRT의 S(scale)까지만 계산하고 역행렬(1 / RT)을 곱해서 재정렬을 합니다.
그렇게 하면 단위 행렬이 나오게 됩니다.
(충돌 처리를 확인하는 오브젝트에 대해 모두 재정렬을 해야됩니다.)
이렇게 하면 충돌 처리가 되는 것처럼 보이지만 사실 영점에서 가상의 충돌체를 만들어서 충돌 처리를 하는 것처럼 보이는 것입니다.
사실 사각형보다도 이외의 다각형에 대한 충돌 처리도 있을 수 있습니다. 물론 구현한다면 가능하겠지만 코드도 길어지고 비용도 많이 들고 시간이 너무 많이 걸린다고 합니다. 사실 사각형과 원으로 된 형태의 충돌 처리만 한다고 합니다. 또한 타원도 직사각형으로 충돌 처리를 한다고 합니다.
(스퀘어 에닉스에서 개발한 니어 오토마타의 2B의 엉덩이를 나타내는 그래픽 수준으로 나타낼 정도가 아니면 모두 원 아니면 사각형으로 처리합니다.)
이 때, 사각형과 사각형의 충돌 처리에서 OBB를 사용합니다.
abs는 절댓값을 나타내는 함수입니다. fabs는 float형태로 된 절댓값을 나타냅니다.
ImGui(Immediate Mode GUI)는 즉시 모드 그래픽 사용자 인터페이스입니다.
런타임 중에도 그래픽을 변경해서 실행 화면을 확인 할 수 있습니다.
매개변수에 라벨이 반드시 필요합니다.
확인하려는 오브젝트가 달라도 라벨 이름이 같으면 같이 실행이 되기 때문에 반드시 다른 이름을 사용해야됩니다.
특히 많이 사용하는 함수 이름을 알아두면 좋습니다.
ImGui::Text();
ImGui::SameLine();
ImGui::SliderAngle();
ImGui::TextColored();
ImGui::Begin("New");
if (ImGui::Button("Button"))
{
}
ImGui::SliderFloat("Scale", &target->scale.x, 10.0f, 500.0f);
ImGui::SliderFloat2("Scale2", (float*)&target->scale, 10.0f, 500.0f);
ImGui::End();
Text는 말 그대로 텍스트를 작성하는 함수입니다.
SameLine은 이 함수 바로 위와 아래의 함수를 같은 라인에 작성하겠다는 의미입니다. (ImGui는 통상 함수마다 개행을 합니다.)
SliderAngle은 마우스로 좌우로 움직이면서 객체의 동향을 확인합니다.
TextColored는 텍스트의 색깔을 지정할 수 있습니다.
Begin은 새로운 ImGui 창을 만들게 됩니다. (매개변수로 const char가 있습니다.)
if문 안의 Button은 마우스로 클릭하게 만드는 버튼을 만들고 눌렀을 때 코드가 실행 되도록 할 수 있습니다.
SliderFloat은 슬라이드 안에 지정한 범위 내의 값을 나타내면서 오브젝트의 동향을 확인 할 수 있습니다.
(뒤에 2, 3을 사용하면서 여러개를 사용할 수 있습니다.)
End는 WinAPI에서 그림을 그릴 때 처럼 이 범위 내에서 작성해야됩니다.
읽어주셔서 감사합니다.