2012-12-02 111 views
0

一些朋友和我正在嘗試編寫一個小的動畫片段。所以,我們認爲一個好的,而且還是有點簡單的項目是做一些恐怖的房子之旅,在這個房子裏,「玩家」穿過一個廢棄的礦山在一輛車上行駛。沿着預定義路徑移動對象

由於製作圓圈和直線有點無聊,我們決定做一個「稍微」更復雜的動作。我們推斷我們可以通過一個簡單的頂點條帶來導入一個.obj文件,該頂點條帶可以作爲一個移動路徑。這個對象當然不會在屏幕上繪製。所以,我創建了一個Trayectory類來處理這個路徑的導入。下面是我用導入的路徑代碼:

Trayectory::Trayectory(String^ obj) 
{ 
this->vert = gcnew List<Point3D^>(); 
this->norm = gcnew List<Point3D^>(); 

StreamReader^ archivo=gcnew StreamReader(obj); 

array<String^>^ file = archivo->ReadToEnd()->Split('\n'); 
archivo->Close(); 

for each(String^ s in file) { 
    array<String^>^ str = s->Split(' '); 

    if(str[0]=="v") { 
     Point3D^ tmp = gcnew Point3D(Convert::ToSingle(str[1]),Convert::ToSingle(str[2]),Convert::ToSingle(str[3])); 
     this->vert->Add(tmp); 
    } 

    if(str[0]=="vn") { 
     Point3D^ tmp = gcnew Point3D(Convert::ToSingle(str[1]),Convert::ToSingle(str[2])+1.0,Convert::ToSingle(str[3])); 
     this->norm->Add(tmp); 
    } 
} 
} 

我有兩個小問題,但是:

  1. 由於我使用的頂點條,我不能指定法線給他們。有沒有一種方法來計算與gluLookAt()一起使用的法線?
  2. 當我渲染對象時,我將它翻譯到我的垂直列表中的一個頂點,並將其分配給該行中的下一個頂點。然而,這帶來了我的.obj中的頂點不一定按順序的問題。有什麼方法可以訂購嗎?我推斷我可以計算哪一個是最接近每個頂點的頂點,並進行氣泡排序類似的排序。但它可以更容易嗎?

回答

0
  1. VN只能說明頂端=> VN可以是(0,0,1);在gluLookAtup矢量使用用於計算side向量:side=forward X up
  2. 這可能是合適的方法。不要在運行時設置訂單。
+0

我想,謝謝你確認我的懷疑。 – rubbyrubber