#include <GL/glut.h>
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;
glColor3f(1.0f, 1.0f, 0.0f);
glPointSize(1);
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, 0.0f, 0.0f);
glRectf(25.0, 25.0, 75.0, 75.0);
//画绿点
glPointSize(5);
glBegin(GL_POINTS);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex2f(0.0f, 0.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[])
{
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;
}