【问题标题】:How to rotate vertices exactly like with glRotatef() in OpenGL?如何像OpenGL中的glRotatef()一样旋转顶点?
【发布时间】:2012-05-09 14:02:09
【问题描述】:

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

OpenGL 中是否有一些 fast 内置函数可以像 glRotatef() 那样旋转我的顶点数据?如果没有,您会推荐使用什么库或方法?我知道的唯一方法是使用 sin/cos 函数来旋转顶点,但我不确定这是否是最快的方法,或者它是否会产生相同的结果。

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

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

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

【问题讨论】:

  • OpenGL 甚至不支持 glRotate。使用 GLM。
  • 您需要描述您正在渲染的内容。您还需要说明着色器是否是一个选项,以及您的硬件/OpenGL 版本的目标级别。
  • @NicolBolas,着色器不是这里的选项。
  • @Rookie:“这里没有着色器选项” 还有其他问题吗?您正在渲染什么,硬件的目标级别等?你知道,回答这个问题需要足够的信息。
  • @Pubby:“兼容性配置文件”。即使在 OpenGL 4.2 中,glRotatef 也可以在兼容性配置文件中使用。

标签: c++ opengl rotation


【解决方案1】:

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

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

【讨论】:

  • 但是你能把 glPushMatrix() 放在显示列表中吗?无论如何,顶点数组不是渲染得更快吗?
  • @Rookie:不是你想要的方式。但是话又说回来,直到他发布答案之后,您才完全解释说您正在渲染各个四边形,每个四边形都有自己独立的变换矩阵。他所做的只是进行合理的猜测,因为大多数人不会渲染一堆单独的四边形;他的建议对渲染实际 3D 网格的人很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多