2012-01-14 56 views
0

我有一個在opengl中繪製的3d框,有人可以解釋如何在opengl中擠壓對象嗎?我是否只是將每個盒子的z軸進一步翻譯回來?Opengl對象擠壓

+2

這不是OpenGL問題。您只使用OpenGL進行繪圖。你將不得不自己寫幾何操作。 – Bart 2012-01-14 17:07:17

回答

2

該方法可以工作,但您必須對每個步驟的翻譯量進行一些計算。儘管如此,我建議以更智能的方式生成拉伸幾何體。

例如,您不應該在中間框中繪製箱蓋(地板和天花板)。你還必須確保雙方完美接觸,否則你會得到文物。

我推薦使用一個路徑來確定每組頂點所在的平面。路徑應該由一系列點和每個點的方向向量組成,這決定了圍繞方向向量旋轉多少。用這個,你可以很容易地計算出4個頂點,只需要使用基本的矢量數學。因此,例如,您可以使用上限[(0.5,0.5,0),( - 0.5,0.5,0),( - 0.5,-0.5,0),(0.5,-0.5,0) ]並沿路徑移動(首先是中心點,第二是右向量)[(0,0,0),(1,0,0)],[(0,5,10),(1,1, 0)],[(10,5,12),(0,1,0)]

現在,你首先計算所有三個方向向量。正常值是當前點和下一點之間的差值,所以(0,5,10) - (0,0,0)=(0,5,10)。必須將右向量投影到由法線定義的平面上,因此我們首先使用交叉乘積來計算向上向量:(0,5,10)x(1,0,0)=(0,10,-5) 。作爲最後一步,我們計算投影右向量,它是法線和向上的叉積:(0,5,10)x(-2,4,-2)=(-125,0,0)。所有這三個矢量必須再歸的,如果你把它們並排,你會得到你申請到帽矢量一個漂亮的變換矩陣,得到4個頂點當前步驟:

 
|-1 0  0  | |0.5| |-0.5  | 
| 0 0.894427 0.447214| * |0.5| = | 0.447213| etc. 
| 0 -0.447214 0.894427| |0 | | 0.223607| 

(我或許你必須調換交叉乘積因子才能得到正確的結果)

然後你對路徑上的每一步重複相同的過程,並且每次繪製4個環形四邊形。