在 2D 中仅旋转一个 Quad
Posted
技术标签:
【中文标题】在 2D 中仅旋转一个 Quad【英文标题】:Rotate just one Quad in 2D 【发布时间】:2012-02-10 19:50:59 【问题描述】:在 OpenGL 中,对于以下 2D 情况,我如何旋转这一个四边形 - 并且只有这一个四边形(场景中的其他所有内容都应该保持原位)?
// Draw in immediate mode
glBegin(GL_QUADS); // begin drawing quads
glVertex2f(box.x,box.y); // top-left corner
glVertex2f(box.x+box.w,box.y); // top-right corner
glVertex2f(box.x+box.w,box.y+box.h); // bottom-right corner
glVertex2f(box.x,box.y+box.h); // bottom-left corner
glEnd(); // end drawing quads
glRotatef(angle, x,y,z)
似乎在旋转我的整个场景。
【问题讨论】:
【参考方案1】:将其包含在 glPushMatrix 和 popMatrix 中
glPushMatrix(GL_MODELVIEW);
glRotatef(angle, x,y,z);
// Draw in immediate mode
glBegin(GL_QUADS); // begin drawing quads
glVertex2f(box.x,box.y); // top-left corner
glVertex2f(box.x+box.w,box.y); // top-right corner
glVertex2f(box.x+box.w,box.y+box.h); // bottom-right corner
glVertex2f(box.x,box.y+box.h); // bottom-left corner
glEnd(); // end drawing quads
glPopMatrix(GL_MODELVIEW);
基本上,在上面的示例中,您将 modevliew 矩阵向上推入堆栈,实质上是保存它。然后旋转模型视图并绘制四边形。 之后,您在模型视图中弹回一个位置,恢复到旋转和绘图之前的状态。
【讨论】:
那么我需要将什么传递给glRotatef
才能让它将我的四边形旋转 90 度?
@Ben:你有没有费心看一下the documentation 的glRotate?它清楚地说,“指定旋转角度,以度为单位。”该页面实际上是在 Google 中搜索“glRotatef”的第一个结果。
@Nicol 我不确定要为x,y,z
传递什么,这样它会旋转整个对象而不仅仅是一个向量。
@Ben 文档很清楚。如果你想让它绕 x 轴旋转 45 度,那么只需执行:glRotatef(45,1,0,0);
为了更好地理解它,这个 x,y,z 实际上是一个向量。您的场景/对象将围绕其旋转 ANGLE 度的向量。因此,通过给出 1,0,0,您可以围绕 X 轴旋转它以上是关于在 2D 中仅旋转一个 Quad的主要内容,如果未能解决你的问题,请参考以下文章
在 Universal Xcode 6 项目中仅停止 iPhone 屏幕旋转