直接上代码:
#include <stdio.h>
#include <GL/glut.h>
#include <math.h>
void myDisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
glFlush();
}
// 画圆
const int n = 50;
const GLfloat R = 0.5f;
const GLfloat Pi = 3.1415926536f;
void DrawArc()
{
int i;
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);// 面
for (i = 0; i < n; ++i)
{
glVertex2f(R*cos(2 * Pi / n*i), R*sin(2 * Pi / n*i));
}
glEnd();
glFlush();
}
// 绘制五角星
void DrawFiveStarts()
{
GLfloat a = 1 / (2 - 2 * cos(72 * Pi / 180));
GLfloat bx = a*cos(18 * Pi / 180);
GLfloat by = a*sin(18 * Pi / 180);
GLfloat cy = -a*cos(18 * Pi / 180);
GLfloat PointA[2] = { 0, a };
GLfloat PointB[2] = { bx, by };
GLfloat PointC[2] = { 0.5, cy };
GLfloat PointD[2] = { -0.5, cy };
GLfloat PointE[2] = { -bx, by };
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINE_LOOP);
glVertex2fv(PointA);
glVertex2fv(PointC);
glVertex2fv(PointE);
glVertex2fv(PointB);
glVertex2fv(PointD);
glEnd();
glFlush();
}
// 正弦函数绘制
const GLfloat factor = 0.1f;
void DrawSinFunc()
{
GLfloat x;
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);
// X轴
glVertex2f(-1.0f, 0.0f);
glVertex2f(1.0f, 0.0f);
// Y轴
glVertex2f(0.0f, -1.0f);
glVertex2f(0.0f, 1.0f);
glEnd();
glBegin(GL_LINE_STRIP);
for (x = -1.0f / factor; x < 1.0f / factor; x += 0.1f)
{
glVertex2f(x*factor, sin(x)*factor);
}
glEnd();
glFlush();
}
// 绘制点
void DrawPoint()
{
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(10.0f);
glBegin(GL_POINT);
glVertex2f(0.0f, 0.0f);
glVertex2f(0.5f, 0.5f);
glEnd();
glFlush();
}
// 绘制直线
void DrawLine()
{
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_LINE_STIPPLE);// 启动画线模式(虚线)
glLineStipple(2, 0x0f0f);
glLineWidth(10.0f);
glBegin(GL_LINES);
glVertex2f(0.0f, 0.0f);
glVertex2f(0.5f, 0.5f);
glEnd();
glFlush();
}
// RGBA颜色
void DrawRGBA()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0f, 1.0f, 1.0f);
glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
glFlush();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("hello World");
glutDisplayFunc(&DrawRGBA);// 设置显示方式
glutMainLoop();// 消息循环
return 0;
}