2017-07-29 28 views
0

我試圖定位對象對空間中的一個點,使用:如何定位對點目標在3D無沿方向矢量旋轉不需要

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 

回答

1

只是重新安排你做計算的順序:

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,將會失敗,因爲您將具有無限制的自由度。您需要爲這種情況添加假設。

+0

剛剛嘗試了一下,實際上它看起來像是預期的結果,謝謝你的幫助,標記爲答案,這對我幫助很大! – Jack