#include <cstdlib>
#include <cmath>
#include <GL/glut.h>
void init()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 300, 0.0, 300);
}
void setPixel(int x, int y)
{
glBegin(GL_POINTS);
glVertex2d(x, y);
glEnd();
}
void lineBres(int x0, int y0, int xEnd, int yEnd)
{
int dx = fabs((float)(xEnd-x0)), dy = fabs((float)(yEnd - y0));
int p = 2*dy -dx;
int twoDy =2*dy, twoDyMinusDx = 2*(dy - dx);
int x, y;
if (x0 > xEnd)
{
x = xEnd;
y = yEnd;
xEnd = x0;
yEnd = y0;
}
else
{
x = x0;
y = y0;
}
setPixel(x, y);
while (x < xEnd)
{
x++;
if (p < 0)
{
p += twoDy;
}
else
{
y++;
p += twoDyMinusDx;
}
setPixel(x, y);
}
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.0, 0.0);
lineBres(0, 0, 250, 200);
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(100, 100);
glutInitWindowSize(300, 300);
glutCreateWindow("DrawBresenhamLine");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}