#include <GL/glut.h>
#include<math.h>
using namespace std;
#define PI 3.14159265354
GLfloat CIRCLE = 1.2f;
GLfloat CIRCLE2 = 1.0f;
int point = 720;
GLfloat z = -5.0f; //用于记录平移距离
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
}
void Reshape(GLsizei w, GLsizei h)
{ //重置窗口大小
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, 1.0 * (GLfloat)w / (GLfloat)h, 1.0, 30.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, 0.0, -3.6);
}
// 显示函数,采用堆栈的方式
void display()
{
glClearColor(1, 1, 1, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity(); // 设置单位矩阵
glTranslatef(0.0f, 0.0f, z);
glLoadIdentity();
glRotatef(1, 1.0f, 0.0f, 0.0f);
double angle1 = 2 * PI / point;
glPushMatrix(); // 绘制蓝色圆环
glColor4f(0, 0, 1, 0.7);
glTranslatef(-2.4f, 1.0f, z);
double angle2 = 0.0;
glBegin(GL_LINE_STRIP);
for (int i = 0; i <= point; i++)
{
angle2 += angle1;//每次循环加一度
glVertex2d(CIRCLE * cos(angle2), CIRCLE * sin(angle2));//利用三角函数定位每次绘画的点的位置
glVertex2d(CIRCLE2 * cos(angle2), CIRCLE2 * sin(angle2));
}
glEnd();
glPopMatrix();
glPushMatrix(); // 补充黄色圆环
glColor4f(1, 0.7, 0, 0.9);
glTranslatef(-1.2f, 0.0f, z);
angle2 = 0.0;
glBegin(GL_LINE_STRIP);
for (int i = 0; i <= point; i++)
{
angle2 += angle1;//每次循环加一度,共进行60次循环,实现绘画一个60度的扇形的效果
glVertex2d(CIRCLE * cos(angle2), CIRCLE * sin(angle2));
glVertex2d(CIRCLE2 * cos(angle2), CIRCLE2 * sin(angle2));
}
glEnd();
glPopMatrix();
glPushMatrix(); //绘制黑色圆环
glTranslatef(0.1f, 1.0f, z);
glColor4f(0, 0, 0, 0.7);
angle2 = 0.0;
glBegin(GL_LINE_STRIP);
for (int i = 0; i <= point; i++)
{
angle2 += angle1;//每次循环加一度
glVertex2d(CIRCLE * cos(angle2), CIRCLE * sin(angle2));
glVertex2d(CIRCLE2 *