Jumat, 06 April 2012

ALGORITMA BRASENHEM DENGAN OPENGL

Share this history on :


#include<GL/glut.h>
#include<stdlib.h>
#include<math.h>

void setPixel(int px, int py)
{
    glBegin(GL_POINTS);
    glVertex2i(px, py);
    glEnd();
}

void algoritmaDDA( int x1, int y1, int x2, int y2)
{
     int dy = y2 - y1;
     int dx = x2 - x1;
     float t = (float) 0.5;

     setPixel(x1,y1);
     if (abs(dx) > abs(dy))
     {
                 float m = (float) dy / (float) dx;
                 t += y1;
                 dx = (dx<0) ? -1 : 1;
                 m *=dx;
                 while (x1 != x2)
                 {
                       x1 += dx;
                       t += m;
                       setPixel(x1, (int) t);
                 }
     }
     else {
          float m = (float) dx / (float) dy;
          t += x1;
          dy = (dy<0) ? -1 : 1;
          m += dy;
          while (y1 != y2)
          {
                y1 += dy;
                t +=m;
                setPixel((int)t,y1);
          }
     }

}


void lineMidpoint(int x0, int y0, int xEnd, int yEnd)
{
 int dx = xEnd - x0;
 int dy = y0 - yEnd;
 int p = 2 * dy + dx;
 int twoDy= 2 * dy;
 int twoDyminusDx = 2 * (dy + dx);
 int x, y;

 x= x0;
 y= y0;

 setPixel(x,y);

 while ( x<xEnd)
 {
 x++;
 if (p<0)
 {
 y++;
 p +=twoDyminusDx;
 }
 else {
 p += twoDy;
 }

 setPixel(x,y);
 }
}

void bresenham(int x1, int y1, int x2, int y2)
{
 int dy = y2 - y1;
 int dx = x2 - x1;
 int stepx, stepy;

 if(dy < 0)
 {
 dy = -dy; stepy = -1;
 }
 else
 {
 stepy = 1;
 }

 if(dx < 0) {
 dx = -dx;
 stepx = -1;
 }
 else
 {
 stepx = 1;
 }
 dy <<= 1;
 dx <<= 1;

 setPixel(x1,y1);
 if (dx > dy)
 {
 int fraction = dy - (dx >> 1);
 while (x1 != x2)
 {
 if(fraction >= 0)
 {
 y1 += stepy;
 fraction -= dx;
 }
 x1 += stepx;
 fraction += dy;
 setPixel(x1,y1);
 }
 }
 else
 {
 int fraction = dx - (dy >> 1);
 while (y1 != y2)
 {
 if(fraction >= 0)
 {
 x1 += stepx;
 fraction -= dy;
 }
 y1 += stepy;
 fraction += dx;
 setPixel(x1,y1);
 }
 }
}


void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0,0.0,0.0);
    glPointSize(4.0);
    setPixel(100, 10);
    setPixel(220, 180);
    lineMidpoint(0,0,500,200);

    glFlush();
}

void init(void)
{
glClearColor(1.0,1.0,1.0,0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0,500.0,0.0,500.0);
}

main(int argc, char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(0,0);
glutCreateWindow("ICHA KHAIRUNNISA");
init();
glutDisplayFunc(display);
glutMainLoop();
}

0 komentar:

Posting Komentar