如何在OpenGL中使用glRotatef()完全旋转顶点?

时间:2012-04-29 17:04:01

标签: c++ opengl rotation

我需要优化我的渲染代码,目前我正在使用glPushMatrix()和glTranslatef()以及glRotatef()。但这比在单个顶点数组调用中渲染所有对象要花费更多。

在OpenGL中是否有一些快速内置函数来旋转我的顶点数据,就像glRotatef()一样?如果没有,您建议使用哪种库或方法?我知道的唯一方法是使用sin / cos函数来旋转顶点,但我不确定这是否是最快的方法,或者甚至会导致相同的结果。

我只需要每个对象沿着一个轴旋转一次(2D渲染),所以它不需要太复杂或者支持glPushMatrix()系统的全部潜力。

编辑:我不想为此使用着色器。

Edit2:我只渲染沿着零点旋转的单个四边形(在2D模式下),因此每个顶点将从-10到10变为值。我目前的代码:(quad.vert[i].x*cosval)-(quad.vert[i].y*sinval)(两次,也是y)。

1 个答案:

答案 0 :(得分:4)

我假设您正在使用旧版本的OpenGL,因为您使用glRotate,以及真正古老/奇怪的硬件,因为您不想使用着色器。

您可以将glRotate*()调用放在显示列表中,也可以自己计算旋转矩阵。 OpenGL红皮书Chapter 3appendix F一起提供了自己构建矩阵所需的信息。有关显示列表的更多信息,请参阅第7章。