在 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的主要内容,如果未能解决你的问题,请参考以下文章

2D游戏知识点一Unity 2D Quad使用

加载的 2D 纹理未将自身绑定到 QUAD

在 Universal Xcode 6 项目中仅停止 iPhone 屏幕旋转

YouTube 视频在 WebView Android 中仅在屏幕旋转时播放音频

在画布上绘制一个旋转的 Path2D 对象

在鼠标拖动时旋转和移动 2D 对象