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