使用全局顶点缓存并仍然利用glRotate?
我有一个简单的Android OpenGL-ES应用程序,并且所有模型都非常简单(< 10个顶点!)我实现了一个全局“世界”类,用于跟踪所有顶点,并执行一对GL命令框架渲染。使用全局顶点缓存并仍然利用glRotate?
每个模型对象,增加了它的顶点到全球的缓冲区,而这些这些“送”在一个操作GL:
gl.glVertexBuffer(...);
gl.glDrawElements(...);
我的问题(也许是一个明显的答案,但我想肯定)是,这是否意味着我必须手动完成所有自己的旋转?
我的基础对象只是定义了一堆添加到缓存中的顶点,例如一个三角形,一个正方形,一个五角星形等等。然后,我的世界对象需要大量的顶点,并将它们转储到GL 。如果我想旋转所有这些,我是否认为我必须执行自己的顶点坐标操作(三角函数!)?
我想世界末日不得不创造一些效用函数来旋转我模型中的所有顶点,但是如果没有必要,我宁愿不要。
是的,不幸的是,这是支付多个模型执行一次抽奖的价格。如果您使用标准Scale-Rotate-Translate顺序,计算非常简单。 对于每一个顶点:
- 确定到中心的距离:
Xrel = X-Xcenter
和Yrel = Y-Ycenter
- 乘上比例为x和y。
Xscaled = scalex*Xrel
和Yscaled = scalex*Yrel
。 - 确定旋转后相对于中心的新位置:
Xrot = Xscaled*cos(d)-Yscaled*sin(d)
和Ynew = Xscaled*sin(d)+Yscaled*cos(d)
。 - 用翻译移动顶点:
Xnew = Xrot + translatex
和Ynew = Yrot+translatey
。
简单!干杯,Aert。
谢谢,它不应该太难 - 它是相当简单的几何。 :) – Cylindric 2010-09-16 16:16:54
不,使用glRotate可以很好地处理顶点数组。
我想他想知道他是否可以用glrotatef来控制该阵列(单个模型)的_parts_的旋转。 – Aert 2010-09-15 22:56:03
我不知道openGL,但这听起来像一个好的矩阵乘法工作!有趣! – schwiz 2010-09-15 17:05:10
glVertexBuffer不存在,你的意思是glVertexPointer也许? – 2010-09-15 18:44:10