我需要优化我的渲染代码,目前我正在使用glPushMatrix()和glTranslatef()以及glRotatef()。但这比在单个顶点数组调用中渲染所有对象要花费更多。
在OpenGL中是否有一些快速内置函数来旋转我的顶点数据,就像glRotatef()一样?如果没有,您建议使用哪种库或方法?我知道的唯一方法是使用sin / cos函数来旋转顶点,但我不确定这是否是最快的方法,或者甚至会导致相同的结果。
我只需要每个对象沿着一个轴旋转一次(2D渲染),所以它不需要太复杂或者支持glPushMatrix()系统的全部潜力。
编辑:我不想为此使用着色器。
Edit2:我只渲染沿着零点旋转的单个四边形(在2D模式下),因此每个顶点将从-10到10变为值。我目前的代码:(quad.vert[i].x*cosval)-(quad.vert[i].y*sinval)
(两次,也是y)。
答案 0 :(得分:4)
我假设您正在使用旧版本的OpenGL,因为您使用glRotate
,以及真正古老/奇怪的硬件,因为您不想使用着色器。
您可以将glRotate*()
调用放在显示列表中,也可以自己计算旋转矩阵。 OpenGL红皮书Chapter 3和appendix F一起提供了自己构建矩阵所需的信息。有关显示列表的更多信息,请参阅第7章。