NVIDIA DRIVERS

31 Mart 2008 Pazartesi

OpenGL'de C++ ile Bresenham Doğru Çizme Algoritması


Merhabalar. Bu yazımda OpenGL'de C++ ile yazılmış Bresenham doğru çizme algoritmasından bahsedeceğim.
İlk önce OpenGL header file'ını projemize eklememiz gerekiyor ve OpenGL'in klasik metodlarını yazıyoruz.

#include "GL/openglut.h"

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


Bu bölümde koordinat düzlemimizi oluşturuyoruz ve Bresenham algoritmasını uyguluyoruz.

void draw()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0,0.0,0.0);
glBegin(GL_LINES);
for(int i = 0;i<101;i++)>
glVertex2i(0,i);
glVertex2i(101,i);
}
glEnd();
Bresenham(53,25,22,50,'r');
glFlush();
}


Bu bölümde de Bresenham algoritmasını uygulayarak boyanması gereken pixelleri buluyoruz.


void Bresenham(int x1, int y1, int x2, int y2, char rgb)//Kaynak
{

{
int slope;
int dx, dy, incE, incNE, d, x, y;
// Reverse lines where x1 > x2
if (x1 > x2)
{
Bresenham(x2, y2, x1, y1, rgb);
return;
}
dx = x2 - x1;
dy = y2 - y1;
// Adjust y-increment for negatively sloped lines
if (dy < slope =" -1;" dy =" -dy;" slope =" 1;" ince =" 2" incne =" 2" d =" 2" y =" y1;" x =" x1;" face="Verdana">

Burada da algoritma tarafından bulunan koordinatları içi renkli kareler sayesinde boyamış oluyoruz.

void drawPoint(int x,int y,char rgb)
{
if(rgb=='r')
{
glColor3f(1.0,0.0,0.0);
}
if(rgb=='g')
{
glColor3f(0.0,1.0,0.0);
}
if(rgb=='b')
{
glColor3f(0.0,0.0,1.0);
}
glBegin(GL_QUADS);
glVertex2i(x,y);
glVertex2i(x+1,y);
glVertex2i(x+1,y+1);
glVertex2i(x,y+1);
glEnd();
}



En son olarak vazgeçilmez olan main metodumuzu yazıp programımızı çalıştırıyoruz.


int main(int argc, char *argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE GLUT_RGB);
glutInitWindowSize(707,707);
glutInitWindowPosition(10,10);
glutCreateWindow("Homework");
init();
glutDisplayFunc(draw);
glutMainLoop();
return 0;
}

Tekrar görüşmek dileğiyle...