Kebersamaan itu indah...

Kebersamaan itu indah...
Bajul mati, 23 April 2013

MEMBUAT LINGKARAN MENGGUNAKAN GLUT





Garis lurus merupakan objek dasar atau objek utama pada glut untuk membentuk Objek lain , objek-objek tersebut dibentuk dari garis yang terhubung antara titik-titik, jelas ini berbentuk lurus dan tidak melengkung. Lalu apakah mungkin membuat sebuah lingkaran menggunakan glut ? jawabannya adalah tentu saja dapat dilakukan dengan memanipulasi garis-garis pembentuk objek menjadi sebuah lingkran. Terdapat satu cara untuk membentuknya yaitu dengan menyebar titik-titik koordinat secara rotasi sehingga akan membentuk sebuah kerangka lingkaran yang selanjutnya mengggunakan perintah primitif objek yang sesuai untuk menggabungkan titik-titik tersebut menjadi sebuah lingkaran.
void lingkaran(){
      /*...*/
      glClear (GL_COLOR_BUFFER_BIT);
      glColor3f(1.0, 1.0, 0.0);
      glBegin(GL_LINE_LOOP);
      radius=40;
      jumlah_titik=60;
      x_tengah=10;
      y_tengah=10;
      for (i=0;i<=360;i++){
        float sudut=i*(2*PI/jumlah_titik);
        float x=x_tengah+radius*cos(sudut);
        float y=y_tengah+radius*sin(sudut);
            glVertex2f(x/100,y/100);}
      glEnd();
      glFlush();
}
Sintaks diatas merupakan fungsi untuk membuat lingkaran yaitu menggunakan primitif objek berupa GL_LINE_LOOP, variabel yang diperlukan untuk membuat sebuah lingkaran pada glut antara lain : variabel radius hal ini untuk mengatur jari-jari lingkaran, jumlah_titik yaitu untuk menentukan banyaknya titik yang akan disebar secara rotasi di dalam glut sebenarnya lingkaran tersebut merupakan segi dari banyak titik yang dimasukan semakin banyak titik yang digunakan maka lingkaran yang tercipta akan semakin sempurna, x_tengah dan y_tengah yaitu titik untuk menentukan titik koordinat tengah lingkaran. Untuk menyebar titik secara rotasi dibutuhkan sebuah perulangan for dimana batas perulangan nya adalah 360 yang menandakan sudut terbesar lingkaran yaitu 360 ͦ. Untuk menyebar titik tersebut tentukan terlebih dahulu sudut yang dibentuk oleh titik satu dengan titik yang lain menggunakan radian (PI = 3,14) dikali dua dan dibagi banyak titik yang akan disebar, hal ini agar sudut antara titik satu dengan titik lain nya memiliki besar sudut yang sama. Selanjutnya menentukan posisi koordinat x dan koordinat y titik-titik perulangan 1 sampai perulangan terakhir dengan menambah posisi titiik tengah dengan perkalian jari-jari(radius) dengan cos(sudut) untuk menentukan x dan sin (sudut) untuk menentukan y yang dicari.
Mengapa menggunakan cos dan sin, karena cos dan sin terbagi dalam 4 kuadran jika diaplikasikan dengan Gluortho2D akan sama yaitu wilayah dalam jendela / window akan terbagi 4 area yang sama, ketika cos(sudut) menghasilkan nilai yang positif maka posisi x titik berada disebelah kanan, dan sebaliknya jika menghasilkan nilai yang negatif maka posisi x akan berada disebelah kiri koordinat 0.0 atau titik tengah. Sedangkan untuk sin area kuadran 1 dan 2 merupakan area positif sehingga jika sin(sudut) menghasilkan nilai yang positif maka posisi y titik akan berada diatas , sebaliknya kuadran 3 dan 4 merupkan area negatif sehingga apabila sin(sudut) menghasilkan nilai yang negatif maka posisi titik y berada di bawah titik 0.0 atau kordinat tengah.
void Initialize() {
glLoadIdentity();
}
Untuk dapat menampilkan bentuk lingkaran yang telah dibuat diperlukan fungsi initialize dengan komponen glLoadIndentity, dimana glLoadIdentity tersebut berfungsi untuk mereset semua nilai dalam proses sebelumnya untuk kembali ke titik awal. Mengapa perlu direset agar perhitungan posisi titik seblumnya tidak mempengaruhi perhitungan titik yang akan dilakukan selanjutnya.

Berikut script selengkapnya membuat objek lingkaran pada openGl :
#include <stdlib.h>
#include <glut.h>
#include <math.h>

const double PI = 3.141592653589793;
int i, radius, jumlah_titik, x_tengah, y_tengah;


void lingkaran(){
      /*...*/
      glClear (GL_COLOR_BUFFER_BIT);
      glColor3f(1.0, 1.0, 0.0);
      glBegin(GL_LINE_LOOP);
      radius=40;
      jumlah_titik=60;
      x_tengah=10;
      y_tengah=10;
      for (i=0;i<=360;i++){
        float sudut=i*(2*PI/jumlah_titik);
        float x=x_tengah+radius*cos(sudut);
        float y=y_tengah+radius*sin(sudut);
            glVertex2f(x/100,y/100);}
      glEnd();
      glFlush();
}

void Initialize() {
glLoadIdentity();
}


void main (int argc, char **argv){
      glutInit(&argc, argv);
      /*...*/
     
      glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
      glutInitWindowPosition(100,100);
      glutInitWindowSize(320,240);

      glutCreateWindow("Anjar D.R. & Dwi P.");
      gluOrtho2D(-320.,320.,-240.,240.);
      Initialize();
      glutDisplayFunc(lingkaran);
      glutMainLoop();
}

0 komentar:

Posting Komentar