我是新來的圖形。我正在試驗OpenGL/JOGL。3D圖形:如何思考模型的位置
我有一個.obj文件,我正在渲染。我很難將它放在我想要的地方。考慮到模型的運行時間集大小,我有一架我希望它休息的飛機。只是做一個轉型還不夠,因爲我需要考慮模型的尺寸。
即便如此,我不知道如何將.obj的參考框架中的0轉換爲世界座標系。
處理這個問題的習慣模式是什麼?
我是新來的圖形。我正在試驗OpenGL/JOGL。3D圖形:如何思考模型的位置
我有一個.obj文件,我正在渲染。我很難將它放在我想要的地方。考慮到模型的運行時間集大小,我有一架我希望它休息的飛機。只是做一個轉型還不夠,因爲我需要考慮模型的尺寸。
即便如此,我不知道如何將.obj的參考框架中的0轉換爲世界座標系。
處理這個問題的習慣模式是什麼?
您應該將模型的原點設置在它的腳下,在其重心下。這樣,當你縮放它時,它的位置(相對於地面)不會改變。然後,只需將它翻譯成您想要的位置,然後旋轉,然後縮放(按此順序) - 即可完成。
對於一個簡單的翻譯(步驟):
參加世界對象的原點座標的位置,並創建一個平移矩陣從這個先乘以-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
我想這應該把你的對象擱在平面上。我做了這樣的事情已經有一段時間了,所以我可能會有一些錯誤的方向 - 所以仔細檢查一下數字,準備做實驗。