Untitled

 avatar
unknown
c_cpp
2 years ago
1.9 kB
18
Indexable
#include<stdlib.h>
#include<stdio.h>
#include <GL/glut.h>
#include <GL/gl.h>

float x1, x2, y1, y2;

void DDA() {
    int dy, dx, step, x, y, k, Xin, Yin;
    dx = x2 - x1;
    dy = y2 - y1;
    if (abs(dx) > abs(dy)) {
        step = abs(dx);
    }
    else
        step = abs(dy);
    Xin = dx / step;
    Yin = dy / step;
    x = x1;
    y = y1;
    glBegin(GL_POINTS);
    glVertex2i(x, y);
    glEnd();
    for (k = 1; k <= step; k++) {
        x = x + Xin;
        y = y + Yin;
        glBegin(GL_POINTS);
        glVertex2i(x, y);
        glEnd();
    }
    glFlush();
}

void Bresenham() {
    GLint dx = x2 - x1;
    GLint dy = y2 - y1;
    GLint steps, k;
    steps = dx;
    GLint x, y, p0 = (2 * dy) - dx;
    glBegin(GL_POINTS);
    glVertex2i(x1, y1);
    glEnd();
    glFlush();
    x = x1;
    y = y1;
    for (k = 0; k < steps; k++)
    {
        if (p0 < 0)
        {
            p0 = p0 + (2 * dy);
            x += 1;
        }
        else
        {
            p0 = p0 + (2 * dy) - (2 * dx);
            x += 1;
            y += 1;
        }
        glBegin(GL_POINTS);
        glVertex2i(x, y);
        glEnd();
        glFlush();
    }
}


void display() {
    //DDA();
    Bresenham();
}

void init() {
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(640, 480);
    glutInitWindowPosition(100, 150);
    glutCreateWindow("");
}

void myInit(void) {
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0, 640.0, 0.0, 480.0);
}

int main(int argc, char** argv) {

    printf("Value of x1 : ");
    scanf_s("%f", &x1);
    printf("Value of y1 : ");
    scanf_s("%f", &y1);
    printf("Value of x2 : ");
    scanf_s("%f", &x2);
    printf("Value of y2 : ");
    scanf_s("%f", &y2);
    init();
    myInit();
    glutDisplayFunc(display);
    glutMainLoop();
}
Editor is loading...