qt 使用opengl库来画圆环

来源:互联网 发布:dhcp服务器软件下载 编辑:程序博客网 时间:2024/06/05 09:28
//圆环
void GLWidget::drawTorus()
{
    int        numMajor = 100;
    int        numMinor = 24;
    float   majorRadius = 0.6f;
    float   minorRadius = 0.2f;
    double  majorStep   = 2.0f * M_PI/numMajor;
    double  minorStep   = 2.0f * M_PI/numMinor;
    int     i, j;
    
    for(i=0; i<numMajor; ++i)
    {
        double a0 = i * majorStep;
        double a1 = a0 + majorStep;
        GLfloat x0 = (GLfloat) cos(a0);
        GLfloat y0 = (GLfloat) sin(a0);
        GLfloat x1 = (GLfloat) cos(a1);
        GLfloat y1 = (GLfloat) sin(a1);
        
        glBegin(GL_TRIANGLE_STRIP);
        for(j=0; j<= numMinor; ++j)
        {
            double  b = j * minorStep;
            GLfloat c = (GLfloat)cos(b);
            GLfloat r = minorRadius * c + majorRadius;
            GLfloat z = minorRadius * (GLfloat)sin(b);
            
            glNormal3f(x0*c, y0*c, z/minorRadius);
            glVertex3f(x0*r, y0*r, z);
            
            glNormal3f(x1*c, y1*c, z/minorRadius);
            glVertex3f(x1*r, y1*r, z);
        }
        glEnd();
    }
}