opengl:旋转椭圆

Luc*_*uca 1 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 = 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();
Run Code Online (Sandbox Code Playgroud)

这样就产生了一幅画面:在此输入图像描述

现在我想做的是顺时针旋转这个椭圆.所以我在其间添加了一个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();
Run Code Online (Sandbox Code Playgroud)

这产生了一个简单地折叠的图像.我想要做的是沿着椭圆中心旋转指定的度数.另外,我尝试使用glRotatef的各种参数但是无法按照我的预期进行操作.生成的图像如下所示:

在此输入图像描述

Ant*_*eru 6

您正在XY平面中工作,因此您无法真正围绕XY中的矢量旋转.相反,您希望沿单位Z轴(glRotate (angle, 0, 0, 1);)旋转.想象一下,您的屏幕是XY坐标系,Z轴指向内部.您想要的是围绕Z轴旋转,因此您的XY平面保持在XY平面中.