[英]How to orient object towards point in 3D without undesired rotations along direction vector
我正在嘗試使用以下方法將對象朝向空間中的點:
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中的upvector校正到對象的“頂部”始終((或多或少) )朝上,因此我需要對象不僅要跟蹤(觀察)左右點,而且還要跟蹤(上下)點。
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
平行,這將失敗,因為您將擁有不受限制的自由度。 您需要為這種情況添加假設。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.