Rabu, 07 Desember 2011

Membuat Lingkaran dengan OpenGL with C++


Ini program bukan hasil gua murni. penuh edit sana sini sampe hasilnya bener-bener perfect menurut gua. gua download open gl-nya dari sini http://zacknov.wordpress.com/2011/09/10/pemrograman-opengl-dan-setting-di-codeblock-c/
bagi kalian yang mau download silahkan kealamat itu aja yah, itu alamat referensi gua juga kok :)
oke, langsung ke program membuat garis yah.Program ini menggunakan algoritma midpoint pada lingkaran. Program ini dibuat karena ada tugas dari mata kuliah Grafik Komputer dan Pengolahan Citra. So, semoga kodingannya berhasil yah

Listing Kode:

#include <windows.h>
#include <gl/glut.h>


void setPixel(int cx, int cy)

{
    glBegin(GL_POINTS);
        glVertex2i(cx, cy);
    glEnd();
}

void circleMidpoint(int xCenter, int yCenter, int radius) {
int x = 0;
int y = radius;
int p = 1-radius;
circlePoints(xCenter, yCenter, x, y);
while (x < y) {
x++;
if (p < 0) {
p += 2*x+1;
} else {
p += 2*(x-y)+1;
y--;
}
circlePoints(xCenter, yCenter, x, y);
}
}
void circlePoints(int cx, int cy, int x, int y) {
    if (x == 0) {
        setPixel(cx, cy + y);
        setPixel(cx, cy - y);
        setPixel(cx + y, cy);
        setPixel(cx -y, cy);
    } else if (x == y) {
        setPixel(cx + x, cy + y);
        setPixel(cx -x, cy + y);
        setPixel(cx + x, cy -y);
        setPixel(cx -x, cy -y);
    } else if (x < y) {
        setPixel(cx + x, cy + y);
        setPixel(cx - x, cy + y);
        setPixel(cx + x, cy - y);
        setPixel(cx - x, cy - y);
        setPixel(cx + y, cy + x);
        setPixel(cx - y, cy + x);
        setPixel(cx + y, cy - x);
        setPixel(cx - y, cy - x);
    }
}

void Display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
 glColor3f(1.0, 1.0, 1.0);
 glPointSize(3.0);
 circleMidpoint(150,150,100);
 glFlush();
}
void init(void)
{
    glClearColor(0.0,0.0,0.0,0.0);
    glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
    gluOrtho2D(0.0,500.0,0.0,500.0);
}

void main(int argc,char* argv[])
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutInitWindowSize(500,500);
    glutInitWindowPosition(0,0);
    glutCreateWindow("Algoritma Lingkaran dengan Bressenham");
    init();
    glutDisplayFunc(Display);
    glutMainLoop();
}

Hasil outputnya kurang lebih seperti ini:









Good luck guys. Semoga berhasil :D
bagi kalian yang ingin mendownload programnya, silahkan klik disini http://www.4shared.com/folder/pKmAmTer/AlgoGaris.html

Tidak ada komentar:

Posting Komentar