使用全局顶点缓存并仍然利用glRotate?

问题描述:

我有一个简单的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

是的,不幸的是,这是支付多个模型执行一次抽奖的价格。如果您使用标准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

不,使用glRotate可以很好地处理顶点数组。

+0

我想他想知道他是否可以用glrotatef来控制该阵列(单个模型)的_parts_的旋转。 – Aert 2010-09-15 22:56:03