2010-09-20 35 views
0

我是新來的圖形。我正在試驗OpenGL/JOGL。3D圖形:如何思考模型的位置

我有一個.obj文件,我正在渲染。我很難將它放在我想要的地方。考慮到模型的運行時間集大小,我有一架我希望它休息的飛機。只是做一個轉型還不夠,因爲我需要考慮模型的尺寸。

即便如此,我不知道如何將.obj的參考框架中的0轉換爲世界座標系。

處理這個問題的習慣模式是什麼?

回答

0

您應該將模型的原點設置在它的腳下,在其重心下。這樣,當你縮放它時,它的位置(相對於地面)不會改變。然後,只需將它翻譯成您想要的位置,然後旋轉,然後縮放(按此順序) - 即可完成。

1

對於一個簡單的翻譯(步驟):

參加世界對象的原點座標的位置,並創建一個平移矩陣從這個先乘以-1的由來:

1 0 0 -xo 
0 1 0 -yo 
0 0 1 -zo 
0 0 0 1 

這將移動物體,使其原點與世界原點一致。所以,把你想要的對象上休息(假設y是「向上」)飛機的y值,並添加到讓你的矩陣上面計算的向量變爲:

1 0 0 -xo 
0 1 0 (-yo + yp) 
0 0 1 -zo 
0 0 0 1 

這將意味着飛機與對象相交(假設原點位於對象內部的某處)。現在找到對象的邊界框,並從對象的原點取最小的y值:

+------+ ymax 
|  | 
|  | 
| o | 
|  | 
+------+ ymin 

其中「o」是原點。

在矩陣中包含此:

1 0 0 -xo 
0 1 0 (-yo + yp + (yo - min)) 
0 0 1 -zo 
0 0 0 1 

我想這應該把你的對象擱在平面上。我做了這樣的事情已經有一段時間了,所以我可能會有一些錯誤的方向 - 所以仔細檢查一下數字,準備做實驗。