728x90
#벡터의 내적
벡터의 내적은 두 벡터의 도트곱 이다.
내적을 하면 스칼라(크기)가 나오게 된다.


벡터의 내적은 다음과 같이 구할 수 있다.
이때 내적을 할 때 단위벡터로 내적을 하게 되면 cos(theta) 값을 구할 수 있는데,
그것을 acosf를 이용해서 각도를 구하면
몬스터가 플레이어를 바라보면서 자연스럽게 추적이 가능하다.
이때 내적을 하는 단위벡터가 하나가 필요한데
그 단위 벡터가 cos(theta)를 구하는 기준 축이 된다.
예를들어 D3DXVECTOR3 vA {1.f, 0.f, 0.f}; 와 내적을 하게 된다면
x축으로 부터 cos(theta)가 시작 되는 것이다.
D3DXVECTOR3 vA {0.f, 1.f, 0.f}; 로 내적을 하면 y축으로 부터 cos(theta)가 시작되므로
-1 곱해주는것도 x축 기준으로 해주어야한다.
POINT pt{};
GetCursorPos(&pt);
ScreenToClient(g_hWND, &pt);
D3DXVECTOR3 vMouse{ (float)pt.x, static_cast<float>(pt.y), 0.f };
m_tInfo.vDir = vMouse - m_tInfo.vPos; // 마우스 쪽으로의 벡터 (목적지 - 출발지)
float fDist = D3DXVec3Length(&m_tInfo.vDir);
D3DXVec3Normalize(&m_tInfo.vDir, &m_tInfo.vDir); // 단위벡터로 바꾸어줌
D3DXVECTOR3 vLook{ 1.f, 0.f, 0.f }; // x방향의 단위벡터
float fAngle = acosf(D3DXVec3Dot(&m_tInfo.vDir, &vLook)); // 내적 반환값으로 cos(theta)나옴
//따라서 나온 cos(theta)를 acosf를 이용해서 각도를 구해줌
if (m_tInfo.vPos.y < vMouse.y)
fAngle *= -1.f;
for (int i = 0; i < 4; ++i)
{
m_vQ[i].x = m_vP[i].x * cosf(fAngle) - m_vP[i].y * -sinf(fAngle);
m_vQ[i].y = m_vP[i].x * -sinf(fAngle) + m_vP[i].y * cosf(fAngle);
m_vQ[i] += m_tInfo.vPos;
}
728x90
'DirectX' 카테고리의 다른 글
모작일지(3) 현재 진행상황 (0) | 2021.08.09 |
---|---|
모작일지(2) (0) | 2021.08.09 |
모작 일지 (1) (0) | 2021.08.05 |
D3DMATRIX, D3DXMATRIX 및 함수 (0) | 2021.07.06 |
회전행렬을 이용하여 사각형 회전 (0) | 2021.07.03 |