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

时间:2010-09-15 16:59:13

标签: android opengl-es

我有一个简单的Android OpenGL-ES应用程序,因为所有模型都非常简单(< 10顶点!)我实现了一个跟踪所有顶点的全局“世界”类,并执行一对GL帧渲染上的命令。

每个模型对象将它的顶点添加到全局缓冲区,并将这些顶点“发送”到一个操作中的GL:

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

我的问题(也许是一个明显的答案,但我想确定)是,这是否意味着我必须手动完成所有轮换?

我的基础对象只定义了一堆被添加到缓存中的顶点,例如三角形,正方形,五角星等。然后,我的World对象获取大的顶点数组,并将它们转储到GL。如果我想旋转所有这些,我是否正确认为我必须执行自己的顶点坐标操作(三角函数!)?

我想这不是世界末日必须创建一些实用函数来旋转模型中的所有顶点,但如果没有必要,我宁愿不这样做。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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

轻松!干杯,阿尔特。