【问题标题】:rotate shape become rotate and translating旋转形状变成旋转和平移
【发布时间】:2013-09-25 07:59:04
【问题描述】:

我是使用openGL的新手,现在我正在尝试旋转我制作的正方形,但是当我旋转它时,正方形不仅会旋转,还会在旋转时四处移动。我想我在旋转和平移过程中犯了一个错误,但找不到解决方案

void drawSquare(double x,double y, int num)
{
  double xLength = 0.6;
  double yLength = 0.6;

    for(int i=0;i<num;i++)
    {
       glLoadIdentity();
       glPushMatrix();      
       glTranslatef(0, 0, 0.0f);
       glRotatef(angleCW, 0.0f, 0.0f,1.0f);

       glBegin( GL_QUADS );

       if(i%2==0)
       {
         glColor3f(gCurrentRed,gCurrentGreen,gCurrentBlue);

       }
       else
       {
         glColor3f(0.0f,0.0f,0.0f);
       }
       glVertex3f(x,y,0);
       glVertex3f(x+xLength,y,0);
       glVertex3f(x+xLength,y+yLength,0);
       glVertex3f(x,y+yLength,0);
       xLength -=0.1;
       yLength -=0.1;
       x += 0.05;
       y += 0.05;
       glEnd();
       glPopMatrix();
     }
}

【问题讨论】:

  • 你需要先旋转然后平移,因为当你旋转某些东西时,它总是围绕(0, 0, 0)
  • 我尝试先旋转它,但结果相同
  • @ThanushanBalakrishnan:OpenGL 不是场景图。 glTranslate 和 glRotate 只是改变绘制时顶点相乘的矩阵的值。绘制图元后,对矩阵的任何更改都不会产生进一步的影响。
  • @ThanushanBalakrishnan:如果您(诚然)不知道所讨论的主题实际上是如何工作的,请不要提供建议。

标签: c opengl


【解决方案1】:

您的四边形将围绕原点 (0,0,0) 旋转。如果它不在你的四边形中间,那么它看起来就像它也在翻译一样。也许你可以翻译它,使四边形居中,旋转它,然后再翻译回来

编辑:

请参阅@datenwolf 的评论,了解他的示例:

  1. 以 0,0,0 为中心创建四边形
  2. 旋转四边形
  3. 将四边形平移到其位置

【讨论】:

  • 你能给出代码中的例子吗?因为我真的不明白
  • @user2629285 glTranslatef(+(x+xLength)/2, +(y+yLength/2), 0); glRotatef(…); glTranslatef(-(x+xLength)/2, -(y+yLength/2), 0);。顺便说一句:glTranslatef(0,0,0); 根本没有效果;这是一个身份转换。
猜你喜欢
  • 1970-01-01
  • 2013-05-23
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
相关资源
最近更新 更多