Programming/DirectX 9
DirectX 9 - 회전 행렬
Gyong_
2020. 11. 18. 01:37
Init()
점 찍기
점 기준으로 세팅을 해줘야 한다.
왜냐하면 만약 위치 값까지 잡혀있다면 자전이 아닌 공전이 나오기 때문이다.
// 좌상단
m_vP[0] = { -m_tInfo.vSize.x * 0.5f, -m_tInfo.vSize.y * 0.5f, 0.f };
// 우 상단
m_vP[1] = { m_tInfo.vSize.x * 0.5f, -m_tInfo.vSize.y * 0.5f, 0.f };
// 우하단
m_vP[2] = { m_tInfo.vSize.x * 0.5f, m_tInfo.vSize.y * 0.5f, 0.f };
// 좌하단
m_vP[3] = { -m_tInfo.vSize.x * 0.5f, m_tInfo.vSize.y * 0.5f, 0.f };
회전 행렬 공식
Q.x = X * cos@ - Y * sin@;
Q.y = X * sin@ + Y * cos@;
Update()
회전 행렬 적용
for (int i = 0 ; i < 4 ; ++i)
{
m_vQ[i].x = m_vP[i].x * cosf(D3DXToRadian(m_fAngle)) - m_vP[i].y * -sinf(D3DXToRadian(m_fAngle));
m_vQ[i].y = m_vP[i].x * -sinf(D3DXToRadian(m_fAngle)) + m_vP[i].y * cosf(D3DXToRadian(m_fAngle));
m_vQ[i] += m_tInfo.vPos;
}
Render()
사각형 그리기
MoveToEx(hDC, m_vQ[0].x, m_vQ[0].y, nullptr);
for (int i = 1; i < 4;++i )
LineTo(hDC, m_vQ[i].x, m_vQ[i].y);
LineTo(hDC, m_vQ[0].x, m_vQ[0].y);