#include <math.h>
void drawFPS(GLfloat,GLfloat,GLfloat,GLfloat); //画四边形和五角星的函数 4个参数分别是外接五边形的边长以及 中心点的 X Y Z
GLfloat gethd(GLfloat);
#define pi 3.141592654
//角度转弧度
GLfloat gethd(GLfloat jd)
{
GLfloat hd;
hd=(GLfloat)2.0*pi*(jd/360.0);
return hd;
}
//画正五角星的函数
void drawFPS(GLfloat wjwb,GLfloat zxx,GLfloat zxy,GLfloat zxz)
{
glBegin(GL_LINE_LOOP);
glVertex3f(wjwb/2-wjwb/2+zxx,wjwb/2*tan(gethd(72))-wjwb/2*tan(gethd(54))+zxy,zxz);//v1
glVertex3f(-wjwb/2+zxx,-wjwb/2*tan(gethd(54))+zxy,zxz);//v2
glVertex3f(wjwb+wjwb*cos(gethd(72))-wjwb/2+zxx,wjwb*sin(gethd(72))-wjwb/2*tan(gethd(54))+zxy,zxz);//v3
glVertex3f((-wjwb*cos(gethd(72)))-wjwb/2+zxx,wjwb*sin(gethd(72))-wjwb/2*tan(gethd(54))+zxy,zxz);//v4
glVertex3f(wjwb-wjwb/2+zxx,0-wjwb/2*tan(gethd(54))+zxy,zxz);//v5
glEnd();
}
{
glClearColor(1.0,0.0,0.0,1.0);
}
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(0.0,0.0f,1.0f);//设置用蓝色的线画出来
//这个是一个中心点在(5,5,0) 外接5边形的边长为20的正五角星 要画出来就得把每个点的坐标给计算准确 这里主要用到了高中数学里面的三角函数计算
glBegin(GL_LINE_LOOP);
glVertex3f(5,10*tan(gethd(72))-10*tan(gethd(54))+5,0);//v1
glVertex3f(-5,-10*tan(gethd(54))+5,0);//v2
glVertex3f(15+20*cos(gethd(72)),20*sin(gethd(72))-10*tan(gethd(54))+5,0);//v3
glVertex3f((-20*cos(gethd(72)))-5,20*sin(gethd(72))-10*tan(gethd(54))+5,0);//v4
glVertex3f(+15,-10*tan(gethd(54))+5,0);//v5
glEnd();
//这下面是我封装好了的五角星中心点和边长可以任意。
glColor3f(1.0f,1.0f,0.0f);//设置用颜色为×××的线条画
drawFPS(10,2,2,-2); //画出来
}
//改变大小的时候调用的函数 至少要调用一次
void rsize(GLint w,GLint h)
{
if(h<=0)h=1;//保证视口高度不为0
glViewport(0,0,w,h);//设置视口
glMatrixMode(GL_PROJECTION);//只有在这个模式下才能设置glOrtho
glLoadIdentity();
glOrtho(-20,20,-20,20,-20,20);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
//程序入口
int main(int ac,char** av)
{
glutInit(&ac,av);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); //使用双缓存技术
glutCreateWindow("deme1"); //创建窗体标题为demo1
init(); //一些初始化的工作都可以放这里。其实这个函数不所必须的。
glutDisplayFunc(display); //注册一个display上画图的函数
glutReshapeFunc(rsize); //改变大小的时候调用的函数 至少要调用一次
glutMainLoop();
return 0;
}