Hello GuyZ,
Here I would like to share the OpenGL code to implement Bresensham algorithm. This algorithm can solve both |m| < 1 (|slope| < 1) condition and also |m| > 1 (|slope| > 1) condition.
Here I would like to share the OpenGL code to implement Bresensham algorithm. This algorithm can solve both |m| < 1 (|slope| < 1) condition and also |m| > 1 (|slope| > 1) condition.
Code
#include <gl/glut.h>
#include <Windows.h>
#include <iostream>
using namespace std;
/*
c0ded by (c) Ajith Kp (c) (R) _TERMINAL_CODERS_ (R)
*/
void line() {
glColor3f(1.0, 0.0, 0.0);
glPointSize(2.0);
int x1, y1, x2, y2;
cout << "Enter starting point (x, y): ";
cin >> x1 >> y1;
cout << "Enter end point (x, y): ";
cin >> x2 >> y2;
int s, o, sEnd, oEnd, dx = abs(x2 - x1), dy = abs(y2 - y1);
int nInc, pInc, p;
float m = (float)(y2 - y1) / (x2 - x1);
// |slope| < 1 condition
if (m < 1 && m>-1) {
nInc = 2 * dy;
pInc = 2 * (dy - dx);
p = 2 * dy - dx;
if (x1 < x2) {
s = x1;
o = y1;
sEnd = x2;
oEnd = y2;
}
else {
s = x2;
o = y2;
sEnd = x1;
oEnd = y1;
}
}
// |slope| > 1 condition
else {
nInc = 2 * dx;
pInc = 2 * (dx - dy);
p = 2 * dx - dy;
if (y1 < y2) {
s = y1;
o = x1;
sEnd = y2;
oEnd = x2;
}
else {
s = y2;
o = x2;
sEnd = y1;
oEnd = x1;
}
}
glBegin(GL_POINTS);
while (s < sEnd) {
s++;
if (p < 0) {
p += nInc;
}
else {
p += pInc;
if (o < oEnd)
o++;
else
o--;
}
if (m > -1 && m < 1)
glVertex2i(s, o);
else
glVertex2i(o, s);
}
glEnd();
glFlush();
}
int main(int argc, char ** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow("Line Draw OpenGL");
glClearColor(1.0, 1.0, 1.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
gluOrtho2D(0, 500, 0, 500);
glMatrixMode(GL_PROJECTION);
glViewport(0, 0, 500, 500);
glutDisplayFunc(line);
glutMainLoop();
return 0;
}
