2014-03-25 84 views
0

計算向上矢量計算後續機型的矢量

這裏是我的代碼:

Vector3f CameraUpVector() const 
{ 
Vector3f cameraDirection = m_cameraTarget - m_cameraPosition; 

cameraDirection = cameraDirection.Normalize(); 
//////////// 
Vector3f cameraUp = cameraDirection.Cross(Vector3f(1.0f, 0.0f, 0.0f)); 
return cameraUp; 
} 
////////// 
Vector3f cameraUp = CameraUpVector(); 
/////////////// 
p.SetCamera(m_cameraPosition , m_cameraTarget , cameraUp); 

這是計算好不好?

如果不是,我該如何改變它?

回答

1

不,您會發現相機在其前進向量周圍滾動。

Vector3f CameraUpVector() const 
{ 
    Vector3f cameraDirection = m_cameraTarget - m_cameraPosition; 
    Vector3f cameraRight = cameraDirection.Cross(Vector3f(0.0f, 1.0f, 0.0f)); 
    Vector3f cameraUp = cameraRight.Cross(cameraDirection); 

    return cameraUp.Normalize(); 
} 

注意,你應該處理的特殊情況攝影機目標是:我會如下(假設右手座標系統與世界矢量爲(0,1,0))改變你的代碼直接在相機位置的上方或下方(或者通過防止發生或者保持最後一個有效相機向上矢量的記錄並且在這種情況下使用它而不是世界向量)

+0

現在我的目標是(0,0,0 ) 和camrea pos是(0,500,0),向上矢量是(0,1,) ,我什麼都看不到。我會試試這個功能。 我的目標是從上向下模型。這是可能的這個func你糾正或我應該改變其他東西?非常感謝! – user3375217

+0

這就是我提到的「特例」。我在答案中做了一些假設。什麼是你的世界中的一般「向上」向量?如果Y起來了,而你直接在目標之上,那麼沒有一個「正確的」答案。你可以選擇Y = 0平面上的任何矢量。 – GuyRT

+0

我的向量是: Vector3f向上(0.0,1.0f,0.0f); 之後,我設置pos和目標,因爲我寫和 p.SetCamera(m_cameraPosition,m_cameraTarget,cameraUp); 仍然無法看到任何東西 – user3375217