该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#include
#define Pi 3.1415926
using namespace std;
int t = 3;
GLfloat a = 1 / sqrt(2 * (1 - cos(72 * Pi / 180)));
GLfloat bx = a * cos(18 * Pi / 180);
GLfloat by = a * sin(18 * Pi / 180);
GLfloat cx = a * cos(54 * Pi / 180);
GLfloat cy = -a * sin(54 * Pi / 180);
GLfloat PointA[2] = { 0,a };
GLfloat PointB[2] = { bx,by };
GLfloat PointC[2] = { cx,cy };
GLfloat PointD[2] = { -cx,cy };
GLfloat PointE[2] = { -bx,by };
void myDisplay()
{
glLoadIdentity(); //恢复初始坐标系
glClearColor(0, 0, 0, 0); //设置清除颜色
glClear(GL_COLOR_BUFFER_BIT); //利用上函数设置好的当前清除颜色设置窗口颜色
glColor4f(1, 1, 1, 0); //图形颜色
glPushMatrix(); //复制当前矩阵 入栈
glBegin(GL_LINE_LOOP); //依次链接 包括首尾
glVertex2fv(PointA);
glVertex2fv(PointB);
glVertex2fv(PointC);
glVertex2fv(PointD);
glVertex2fv(PointE);
glEnd();
glPopMatrix();//复制当前矩阵 出栈
glutSwapBuffers(); //交换两个缓冲区指针
}
void TimerFunction(int value)
{
if (t <= 100)
{
glClear(GL_COLOR_BUFFER_BIT);
GLfloatPointAa[2] = { 0, a };
GLfloatPointBb[2] = { bx + 0.01f*t*(0.5f - bx), by + 0.01f*t*(cy - by) };
GLfloat PointCc[2] = { cx + 0.01f*t*(-bx - 0.5f), cy + 0.01f*t*(by - cy) };
GLfloat PointDd[2] = { -cx + 0.01f*t*(bx + 0.5f), cy + 0.01f*t*(by - cy) };
GLfloat PointEe[2] = { -bx + 0.01f*t*(-0.5f + bx), by + 0.01f*t*(cy - by) };
glClear(GL_STENCIL_BUFFER_BIT);// A->B->C->D->E->A
glBegin(GL_LINE_LOOP);
glVertex2fv(PointAa);
glVertex2fv(PointBb);
glVertex2fv(PointCc);
glVertex2fv(PointDd);
glVertex2fv(PointEe);
glEnd();
glutSwapBuffers(); //清空命令缓冲区并交换帧缓存
t++;
glutTimerFunc(33, TimerFunction, 1);
}
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(100, 100);
glutInitWindowSize(550, 550);
glutCreateWindow("transform");
glutDisplayFunc(myDisplay);
glutTimerFunc(33, TimerFunction, 1);
glutTimerFunc(33, TimerFunction1, 1);
glutMainLoop();
return 0;
}