C++ opengl:旋转椭圆

C++ opengl:旋转椭圆,c++,opengl,3d,C++,Opengl,3d,我在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 =

我在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();
glPushAttrib(GL\u当前\u位);
GL3F(1.0f,0.0f,0.0f);
glLineWidth(2.0);
glPushMatrix();
glTranslatef(0,0,0);//椭圆中心
glBegin(GL_线_环);
浮动公司=(浮动)M_PI/500.0;
对于(GLfloat i=0;i
这将生成这样的图片:

现在我要做的是顺时针旋转这个椭圆。因此,我在中间添加了一个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();
glPushAttrib(GL\u当前\u位);
GL3F(1.0f,0.0f,0.0f);
glLineWidth(2.0);
glPushMatrix();
glTranslatef(0,0,0);
glRotatef(-90,1,1,0);
glBegin(GL_线_环);
浮动公司=(浮动)M_PI/500.0;
对于(GLfloat i=0;i
这产生了一个简单地被折叠的图像。我想做的是将椭圆沿其中心旋转指定的角度。此外,我还尝试使用glRotatef的各种参数,但未能按预期完成。生成的图像如下所示:


您在XY平面中工作,因此无法真正绕XY中的矢量旋转。相反,您希望沿单位Z轴旋转(
glRotate(角度,0,0,1);
)。假设您的屏幕是XY坐标系,Z轴指向内部。您要做的是绕Z轴旋转,这样您的XY平面将保留在XY平面中。

您在XY平面中工作,因此无法真正绕XY中的矢量旋转。相反,您希望沿单位Z轴旋转(
glRotate(角度,0,0,1);
)。假设您的屏幕是XY坐标系,Z轴指向内部。你要做的是绕Z轴旋转,这样你的XY平面就保持在XY平面上。

是的,我在发帖时就知道了,但我还有其他问题!我将发布一个新问题来强调。。。!是的,我在发帖子的时候就知道了,但我还有其他问题!我将发布一个新问题来强调。。。!