簡體   English   中英

如何在不沿方向矢量發生意外旋轉的情況下將對象朝向3D中的點定向

[英]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)

請注意,如果uptarget - m_Position平行,這將失敗,因為您將擁有不受限制的自由度。 您需要為這種情況添加假設。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM