2010-09-15 30 views
3

我有一個簡單的Android OpenGL-ES應用程序,並且所有模型都非常簡單(< 10個頂點!)我實現了一個全局「世界」類,用於跟蹤所有頂點,並執行一對GL命令框架渲染。使用全局頂點緩存並仍然利用glRotate?

每個模型對象,增加了它的頂點到全球的緩衝區,而這些這些「送」在一個操作GL:

gl.glVertexBuffer(...); 
gl.glDrawElements(...); 

我的問題(也許是一個明顯的答案,但我想肯定)是,這是否意味着我必須手動完成所有自己的旋轉?

我的基礎對象只是定義了一堆添加到緩存中的頂點,例如一個三角形,一個正方形,一個五角星形等等。然後,我的世界對象需要大量的頂點,並將它們轉儲到GL 。如果我想旋轉所有這些,我是否認爲我必須執行自己的頂點座標操作(三角函數!)?

我想世界末日不得不創造一些效用函數來旋轉我模型中的所有頂點,但是如果沒有必要,我寧願不要。

+0

我不知道openGL,但這聽起來像一個好的矩陣乘法工作!有趣! – schwiz 2010-09-15 17:05:10

+0

glVertexBuffer不存在,你的意思是glVertexPointer也許? – 2010-09-15 18:44:10

回答

0

是的,不幸的是,這是支付多個模型執行一次抽獎的價格。如果您使用標準Scale-Rotate-Translate順序,計算非常簡單。 對於每一個頂點:

  • 確定到中心的距離:Xrel = X-XcenterYrel = Y-Ycenter
  • 乘上比例爲x和y。 Xscaled = scalex*XrelYscaled = scalex*Yrel
  • 確定旋轉後相對於中心的新位置:Xrot = Xscaled*cos(d)-Yscaled*sin(d)Ynew = Xscaled*sin(d)+Yscaled*cos(d)
  • 用翻譯移動頂點:Xnew = Xrot + translatexYnew = Yrot+translatey

簡單!乾杯,Aert。

+0

謝謝,它不應該太難 - 它是相當簡單的幾何。 :) – Cylindric 2010-09-16 16:16:54

0

不,使用glRotate可以很好地處理頂點數組。

+0

我想他想知道他是否可以用glrotatef來控制該陣列(單個模型)的_parts_的旋轉。 – Aert 2010-09-15 22:56:03