既然安装好了环境就免不得要用一下吧!所以写了以下的这个demo!
在linux下使用也很简单。直接创建一个.c的文档,把以下的代码复制进去。然后打开终端 进入该文档的目录 在终端输入 gcc -lglut -o wjx wjx.c 执行过 输入./wjx 就可以运行了。在window下的就不说了。你可以用很多种编译工具去直接编译。
#include <GL/glut.h> #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(); }
void init () { glClearColor(1.0,0.0,0.0,1.0); }
void display() { 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); //画出来
glutSwapBuffers(); } //改变大小的时候调用的函数 至少要调用一次 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; }
//(ps:有时候写代码应该多想想封装。把自己一些可以以后还会用得上的函数封装起来,以后再用的时候就方便了。)