【问题标题】:OpenGl Rotation around pointOpenGL绕点旋转
【发布时间】:2014-11-02 02:30:49
【问题描述】:

我的问题是我需要围绕最左端的中心旋转一个白色方块,无论我尝试什么,我似乎都无法做到。

我需要围绕radius 旋转一个对象,即radius 远离我已经翻译的位置(getPosition().x/y)。我需要将它旋转 r 度。如果重要的话,我使用的是正交 (glOrtho) 投影。

到目前为止,这是我尝试过的:

//Try 1
glRotatef(r, 0, 0, 1.0f);
glTranslatef(radius, radius, 0);
glBegin(GL_QUADS)
//draw here...

//Try 2
glTranslatef(-radius, -radius, 0);
glRotatef(r, 0, 0, 1.0f);
glTranslatef(radius, radius, 0);
glBegin(GL_QUADS)
//draw here...

//Try 3
glTranslatef(radius + getPosition().x, radius + getPosition().y, 0);
glRotatef(r, 0, 0, 1.0f);
glTranslatef(radius, radius, 0);
glBegin(GL_QUADS)
//draw here...

我在 StackOverflow 上尝试了 无数 次谷歌搜索和搜索,但没有成功。其中两个“解决方案”来自 StackOverflow 本身的答案。

所有这些尝试都围绕原点旋转。我还尝试了许多其他更荒谬的组合,但无济于事。如果重要的话,在这段代码之前一点点,我会翻译矩阵(并且不要将其弹出)。我不认为这是问题所在,因为在这些尝试中的任何一个都不能解决问题之前弹出矩阵并重新推回一个新矩阵。

任何帮助将不胜感激。

【问题讨论】:

  • glTranslatef 接受三个参数,而不是两个。不知道是不是错字。
  • @ColonelThirtyTwo 是的,这是一个错字,现在会修正
  • @ColonelThirtyTwo 所以我尝试了其他几件事,包括隔离一些opengl代码并尝试各种翻译,但无论我做什么,对象都不会围绕一个点旋转。事实上,它甚至不会围绕 任何 点、周期,仅围绕原点旋转。
  • 您的第二次尝试应该可以围绕一个点旋转。我怀疑您在轮换后在某处调用glLoadIdentity,但没有更多代码,我无法确定。
  • “围绕最左端的中心旋转一个白色正方形”是指围绕其中一侧的中心吗?

标签: c++ opengl matrix


【解决方案1】:

所以我找到了解决方案:

glTranslatef(radius + getPosition().x, radius + getPosition().y, 0);
glRotatef(r, 0, 0, 1.0f);
glBegin(GL_POLYGON);

事实证明,您不必在轮换后必须翻译,这是建议的几个来源。

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多