#include <GL/glut.h>
#include <iostream>
using namespace std;
int size;
int color;
void LineDDA(int x0, int y0, int x1, int y1)
{
int x, dx, dy, y;
float m;
dx = x1 - x0;
dy = y1 - y0;
m = dy / dx;
y = y0;
switch (color)
{
case 0:
glColor3f(1, 0, 0);
break;
case 1:
glColor3f(0, 1, 0);
break;
case 2:
glColor3f(0, 0, 1);
break;
case 3:
glColor3f(1, 1, 0);
break;
case 4:
glColor3f(0, 1, 1);
break;
case 5:
glColor3f(1, 0, 1);
break;
case 6:
glColor3f(1, 1, 1);
break;
default:
cout << "error" << endl;
}
glPointSize(size);
for (x = x0; x <= x1; x++)
{
glBegin(GL_POINTS);
glVertex2i(x, (int)(y + 0.5));
glEnd();
y = y + m;
}
}
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT); //设置背景颜色
//画白色矩形
glColor3f(1.0f, 1.0f, 1.0f);
glRectf(25.0, 25.0, 75.0, 75.0);
//画白点
glPointSize(5);
glBegin(GL_POINTS);
glColor3f(1.0f, 1.0f, 1.0f);
glVertex2f(95.0f, 200.0f);
glEnd();
//调用DDA算法画线
LineDDA(0, 0, 200, 300);
glBegin(GL_LINES);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex2f(100.0, 0.0);
glColor3f(0.0, 1.0, 0.0);
glVertex2f(180.0, 240.0);
glEnd();
glFlush();
}
void Init()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT); //设置着色模式为图元中某个顶点的颜色来渲染整个图元
}
void Reshape(int w, int h)
{
glViewport(0, 0, (GLsizei)w, (GLsizei)h); //设置显示窗口
glMatrixMode(GL_PROJECTION); //对投影矩阵应用随后的矩阵操作
glLoadIdentity(); //重置当前指定的矩阵为单位矩阵
gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h); //定义了一个二维图像投影矩阵
}
int main(int argc, char *argv[])
{
cout << "请输入画线颜色:" << endl;
cout << " 0_红; 1_绿; 2_蓝; 3_黄; 4_青; 5_玫瑰; 6_白" << endl;
cout << "(0-6):";
cin >> color;
cout << "请输入划线宽度:" << endl;
cin >> size;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("Hello World!");
Init();
glutDisplayFunc(myDisplay);
glutReshapeFunc(Reshape);
glutMainLoop();
return 0;
}