理解OpenGL状态机概念 a) 使用glPointSize()设置点大小 b) 使用glLineWidth()设置线的粗细 c) 使用glColor3f()设置颜色
2.核心代码
2.1 正弦函数
/// <summary> /// 画一个正弦函数 /// </summary> /// <param name="down">向下平移</param> voidDraw_sine(int down){glColor3f(0.f,0.f,1.f);//设置颜色
GLfloat x =-1.0;glBegin(GL_LINE_STRIP);//绘制多边形 for(float x =-5* PI; x <5* PI; x +=0.1f){glVertex2f(x /(5* PI),sin(x)- down);}glEnd();}
2.2 圆
/// <summary> /// 画一个圆 /// </summary> /// <param name="x">向左平移</param> /// <param name="y">向下平移</param> voidDraw_circle(int x,int y){glColor3f(1.f,0.f,0.f);//设置RGB glBegin(GL_LINE_STRIP);//绘制多边形 //通过数学计算来画多边形的点 for(int i =0; i < n; i++){glVertex2f(R *cos(2* PI * i / n)- x, R *sin(2* PI * i / n)- y);}int i =0;glVertex2f(R *cos(2* PI * i / n)- x, R *sin(2* PI * i / n)- y);glEnd();//画竖的黑色直线 glColor3f(0.f,0.f,0.f);//设置颜色 glBegin(GL_LINES);//画线条 glVertex2f(0.0f,0.0f);//线条起始位置 glVertex2f(0.0f,2.5f);//线条结束位置 glEnd();//画横的黑色直线 glColor3f(0.f,0.f,0.f);//设置颜色 glBegin(GL_LINES);//画线条 glVertex2f(0.0f,0.0f);//线条起始位置 glVertex2f(2.5f,0.0f);//线条结束位置 glEnd();//画点中心绿色的点 glColor3f(0.f,1.f,0.f);//设置颜色 glPointSize(10);//点的大小 glBegin(GL_POINTS);//画点 glVertex2f(0.f,0.f);//点的位置 glEnd();//画上面蓝色的点 glColor3f(0.f,0.f,1.f);//设置颜色 glPointSize(10);//点的大小 glBegin(GL_POINTS);//画点 glVertex2f(2.5f,0.f);//点的位置 glEnd();//画右边蓝色的点 glColor3f(0.f,0.f,1.f);//设置颜色 glPointSize(10);//点的大小 glBegin(GL_POINTS);//画点 glVertex2f(0.f,2.5f);//点的位置 glEnd();}voiddisplay(){//当前可写的颜色缓冲 glClear(GL_COLOR_BUFFER_BIT);Draw_circle(0,0);Draw_sine(5);glutSwapBuffers();}
3.全部代码
#defineGLEW_STATIC#defineFREEGLUT_STATIC#include<GL/glew.h>#include<GL/freeglut.h>#include<GL/glext.h>#include"math.h"#include<iostream>#include"main.h"int n =3600;//圆绘制次数float PI =3.1415926f;//派的值float R =2.5f;//半径voidinit(){//全1未白色,全0为黑色glClearColor(1.0f,1.0f,1.0f,1.0f);}/// <summary>/// 画一个正弦函数/// </summary>/// <param name="down">向下平移</param>voidDraw_sine(int down){glColor3f(0.f,0.f,1.f);//设置颜色
GLfloat x =-1.0;glBegin(GL_LINE_STRIP);//绘制多边形for(float x =-5* PI; x <5* PI; x +=0.1f){glVertex2f(x /(5* PI),sin(x)- down);}glEnd();}/// <summary>/// 画一个圆/// </summary>/// <param name="x">向左平移</param>/// <param name="y">向下平移</param>voidDraw_circle(int x,int y){glColor3f(1.f,0.f,0.f);//设置RGBglBegin(GL_LINE_STRIP);//绘制多边形//通过数学计算来画多边形的点for(int i =0; i < n; i++){glVertex2f(R *cos(2* PI * i / n)- x, R *sin(2* PI * i / n)- y);}int i =0;glVertex2f(R *cos(2* PI * i / n)- x, R *sin(2* PI * i / n)- y);glEnd();//画竖的黑色直线glColor3f(0.f,0.f,0.f);//设置颜色glBegin(GL_LINES);//画线条glVertex2f(0.0f,0.0f);//线条起始位置glVertex2f(0.0f,2.5f);//线条结束位置glEnd();//画横的黑色直线glColor3f(0.f,0.f,0.f);//设置颜色glBegin(GL_LINES);//画线条glVertex2f(0.0f,0.0f);//线条起始位置glVertex2f(2.5f,0.0f);//线条结束位置glEnd();//画点中心绿色的点glColor3f(0.f,1.f,0.f);//设置颜色glPointSize(10);//点的大小glBegin(GL_POINTS);//画点glVertex2f(0.f,0.f);//点的位置glEnd();//画上面蓝色的点glColor3f(0.f,0.f,1.f);//设置颜色glPointSize(10);//点的大小glBegin(GL_POINTS);//画点glVertex2f(2.5f,0.f);//点的位置glEnd();//画右边蓝色的点glColor3f(0.f,0.f,1.f);//设置颜色glPointSize(10);//点的大小glBegin(GL_POINTS);//画点glVertex2f(0.f,2.5f);//点的位置glEnd();}voiddisplay(){//当前可写的颜色缓冲glClear(GL_COLOR_BUFFER_BIT);Draw_circle(0,0);Draw_sine(5);glutSwapBuffers();}voidreshape(int w,int h){//x[0,w],y[0,h]glViewport(0,0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();//投影区域gluOrtho2D(-8.f,8.f,-8.f,8.f);}intmain(int argc,char** argv){glutInit(&argc, argv);glutInitContextVersion(3,3);glutInitContextProfile(GLUT_COMPATIBILITY_PROFILE);glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);glutInitWindowPosition(0,0);glutInitWindowSize(800,600);glutCreateWindow("HellGL");glutDisplayFunc(display);glutReshapeFunc(reshape);
glewExperimental = GL_TRUE;glewInit();init();glutMainLoop();return0;}