나는 다음을 사용하여 물체를 공간의 한 지점으로 향하게하려고합니다.
m_Z = glm::normalize(target - m_Position);
m_Y = glm::normalize(m_Y - glm::dot(m_Y, m_Z) * m_Z);
m_X = glm::normalize(glm::cross(m_Y, m_Z));
그리고 물체가 3D에서 점을 "보는"동안, 그것은 자신의 전방 벡터 (m_X)를 중심으로 회전하는 것처럼 보입니다. 이는 UP 벡터가 잘못된 방향에 있음을 의미합니다. 그래서 물체는 때때로 거꾸로되어있는 동안 포인트를 바라보고 있습니다 ... 그래서 그것은 기울어 진 머리와 같습니다 (로컬 포워드 벡터를 중심으로 회전).
나는 2D에서 점을 향해 물체의 방향을 지정하는 방법을 알고 있습니다. – 그것은 제가 추구하는 것이 아닙니다 – 물체의 "상단"이 항상 (다소 또는 적음) 정도까지 상향 벡터를 3D로 수정하는 방법을 찾고 있습니다. ) 위를 향하기 때문에 왼쪽과 오른쪽뿐만 아니라 위아래로 포인트를 따라가는 (볼) 물체가 필요합니다.
m_X = left vector of object
m_Y = up vector of object
m_Z = forward vector of object
target = point's world position
m_Position = object's world position
계산을 수행하는 순서를 다시 정렬하십시오.
m_Z = glm::normalize(target - m_Position);
m_X = glm::normalize(glm::cross(up, m_Z));
m_Y = glm::normalize(glm::cross(m_Z, m_X));
여기에 up
완벽한 상향 방향이 (0, 1, 0)
있습니다.
구속되지 않은 자유도 up
가 있으므로이와 평행 하면 실패합니다 target - m_Position
. 이 경우에 대한 가정을 추가해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다