2015-05-13 164 views
1

我无法在OpenGL中旋转椭圆。所以,我有一些代码来绘制一个椭圆如下:opengl:旋转椭圆

glPushAttrib(GL_CURRENT_BIT); 
glColor3f(1.0f, 0.0f, 0.0f); 
glLineWidth(2.0); 
glPushMatrix(); 
glTranslatef(0, 0, 0); // ellipse centre 
glBegin(GL_LINE_LOOP); 
float inc = (float) M_PI/500.0; 
for (GLfloat i = 0; i < M_PI * 2; i+=inc) 
{ 
    float x = cos(i) * 0.4; 
    float y = sin(i) * 0.4; 
    glVertex2f(x, y); 
} 
glEnd(); 
glPopMatrix(); 
glPopAttrib(); 

这将产生一个画面像这样:enter image description here

现在我想要做的就是这个椭圆按顺时针方向旋转。所以我在两者之间增加了一个glrotate,但结果并不是我所期望的。

所以,我不喜欢的东西:

glPushAttrib(GL_CURRENT_BIT); 
glColor3f(1.0f, 0.0f, 0.0f); 
glLineWidth(2.0); 
glPushMatrix(); 
glTranslatef(0, 0, 0);  
glRotatef(-90, 1, 1, 0); 
glBegin(GL_LINE_LOOP); 
float inc = (float) M_PI/500.0; 
for (GLfloat i = 0; i < M_PI * 2; i+=inc) 
{ 
    float x = cos(i) * 0.4; 
    float y = sin(i) * 0.4; 
    glVertex2f(x, y); 
} 

glEnd(); 
glPopMatrix(); 
glPopAttrib(); 

这产生这是简单地倒塌的图像。我想要做的是沿指定的中心旋转椭圆。此外,我试着玩弄glRotatef的各种参数,但无法按预期做到。由此产生的图像看起来像:

enter image description here

回答

6

你在XY平面工作,所以你不能真正围绕XY矢量旋转。相反,您想沿着Z轴单位旋转(glRotate (angle, 0, 0, 1);)。设想你的屏幕是XY坐标系,Z轴向内。你想要的是围绕Z轴旋转,所以你的XY平面保持在XY平面上。

+0

是的,我发现就像我发布,但我也有其他问题!我会发布一个新的问题来强调......! – Luca