Senin, 03 Januari 2011

Membuat Rubik menggunakan pelles C

ini merupakan tampilan awal dari pelles C,Untuk membuat project baru klik new project.





selanjutnya ini tampilan untuk compile dan running.



output

LOGIKA PROGRAM

#include
#include
#include
#include
Program ini diawali include karena include merupakan header file program C yang wajib dipakai. Masing – masing include di atas untuk menghubungkan program ini dengan file berextension h yang disimpan dalam folder GL.
//deklarasi variable
//===============
float put,puthor1= 90,putver,puthor2 ,puthor =0;
int kubygput;
Blok diatas digunakan untuk mendeklarasikan variable-variable yang akan digunakan dalam program.

//deklarasi prosedur
//===============
void gambarkubus();
void posisikubus();
void putar90();
void mulaiOpenGL(void);
void eksekub();
Selanjutnya blok ini digunakan untuk mendeklarasikan masing-masing prosedur untuk menggambar kubus,menentukan posisi kubus,memutar kubus,openGL adalah sebuah pemanggilan fungsi untuk memulai pengeksekusian program ini,dan eksekub untuk mengeksekusi kubus.
//prosedur menggambar kubus
void gambarkubus() {
float x1= 2; //deklarasi variable untuk koordinat kubus
float x2= -2;
float y1= 2;
float y2= -2;
float z1= 2;
float z2= -2;
{

//penggambaran kubus
//depan
{
glBegin(GL_QUADS);
glColor3f(0.7,0,0);
glVertex3f(x1,y1,z1);
glVertex3f(x2,y1,z1);
glVertex3f(x2,y2,z1);
glVertex3f(x1,y2,z1);
glEnd();
}
//atas
{
glBegin(GL_QUADS);
glColor3f(0,0.8,0);
glVertex3f(x1,y1,z1);
glVertex3f(x2,y1,z1);
glVertex3f(x2,y1,z2);
glVertex3f(x1,y1,z2);
glEnd();
}
//kanan
{
glBegin(GL_QUADS);
glColor3f(0,0,0.8);
glVertex3f(x1,y1,z2);
glVertex3f(x1,y1,z1);
glVertex3f(x1,y2,z1);
glVertex3f(x1,y2,z2);
glEnd();
}
//belakang
{
glBegin(GL_QUADS);
glColor3f(10,10,10);
glVertex3f(x1,y1,z2);
glVertex3f(x2,y1,z2);
glVertex3f(x2,y2,z2);
glVertex3f(x1,y2,z2);
glEnd();
}
//kiri
{
glBegin(GL_QUADS);
glColor3f(0.9,0.4,0);
glVertex3f(x2,y1,z1);
glVertex3f(x2,y1,z2);
glVertex3f(x2,y2,z2);
glVertex3f(x2,y2,z1);
glEnd();
}
//bawah
{
glBegin(GL_QUADS);
glColor3f(1,1,0);
glVertex3f(x1,y2,z1);
glVertex3f(x1,y2,z2);
glVertex3f(x2,y2,z2);
glVertex3f(x2,y2,z1);
glEnd();}
}

Blok ini merupakan blok prosedur untuk penggambaran kubus,titik koordinat kubus dideklarasikan terlebih dahulu dalam masing-masing variable x,y,dan z. dalam penggambaran kubus bagian depan,belakang,atas,bawah,samping kanan dan kiri itu menggunakan coding yang sama untuk membuat persegi maka menggunakan glBegin(GL_QUADS); dan menentukan/merubah warna dengan glColor3f(1,1,0); yang berbeda hanyalah titik koordinatnya untuk masing-masing x,y,z.

}
//===================================
// memutar kubus separuhnya sebanyak 90'
// variable puthor1 sebagai banyaknya derajat
// puthor1 increment sampai > 90' dan berenti
//===================================
void putar90(){
if(puthor1 >=90)
puthor1+=0;
else puthor1++;
glRotatef(puthor1,0,1,0);
}

//tempat eksekusi putaran
void eksekub(){
glTranslatef(0,4.2,0);
putar90();
posisikubus();
}
Dalam prosedur putar digunakan untuk memutar kubus dan putaran kubus di eksekusi dalam prosedur eksekub.

void posisikubus() {
int i,j;
//(dalam sumbu z)
//tengah
//==================
gambarkubus();
glTranslatef(4.2,0,0);
gambarkubus();
glTranslatef(-8.4,0,0);
gambarkubus();
glTranslatef(0,0,4.2);
//atas
//==================
for(i=1;i<=3;i++){
gambarkubus();
glTranslatef(4.2,0,0);
}
//bawah
//==================
glTranslatef(-12.6,0,-8.4);
for(j=1;j<=3;j++){
gambarkubus();
glTranslatef(4.2,0,0);
}
glTranslatef(-8.4,0,4.2);
}
Prosedur posisi kubus berisi untuk mengatur letak-letak kubus yang telah di buat untuk posisi tengah,atas,dan bawah dengan menggunakan statement glTranslatef(4.2,0,0); dan tinggal dirubah posisi titik koordinatnya agar mendapatkan hasil yang di inginkan.

int main(void)
{
// mRunning = TRUE, aplikasi masih berjalan
// mRunning = FALSE, ???
GLuint mRunning = GL_TRUE;
//
// inisialisasi GLFW
if( glfwInit() == GL_FALSE )
{
MessageBox( NULL, "ERROR :: gagal menginisialisasi GLFW", "Error!", MB_OK);
return(0);
}
//
// buat sebuah window yang akan digunakan untuk menggambar.
if( glfwOpenWindow( 640, 480, 0, 0, 0, 0, 24, 0, GLFW_WINDOW ) == GL_FALSE )
{
MessageBox( NULL, "ERROR :: gagal membuat window", "Error!", MB_OK );
glfwTerminate();
return(0);
}
Dalam program utama (int main) yang memiliki nilai kosong terdapat penginisialisasi variable yaitu jika mRunning bernilai TRUE berarti aplikasi masih berjalan. Jika FALSE berarti aplikasi berhenti atau keluar. Dan untuk nilai variable GLuint Mrunning adalah nilai dari GL_TRUE. Lalu inisialisasi GLFW yaitu pengkondisian dimana jika glfwInit bernilai FALSE maka tampilkan MessageBox seperti tulisan di atas bahwa program gagal menginisialisasi GLFW. Lalu dikembalikan lagi nilainya.
//
// Set judul yang ada di window dan Swap interval.
glfwSetWindowTitle( "Rubik Cube" );
glfwSwapInterval( 2 );
//
// mulai OpenGL (melakukan setting awal OpenGL)
mulaiOpenGL();
// mulai looping utama program
// membuat koordinat kubus
while( mRunning )
{
pada bagian ini menjelaskan tentang judul yang ada pada window dan interval ketika kubus berputar.untuk melakukan perputaran sebelumnya mendeklarasikan variabelnya terlebih dahulu, disini menggunakan variabel i dengan tipe integer.lalu program utama dimulai dengan looping.

//
// bersihkan layar dan depth buffer
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
kemudian program akan membersihkan layar dan depth buffer dan untuk itu glClear menghimpun dua fungsi pembersihan dan memanggilnya secara bersama - sama.
//================================================== ===============
// eksekusi
//================================================== ===============
gluLookAt(10,10,30,0,0,0,0,1,0);
//untuk rotasi keseluruhan kubus
//=======================================
glRotatef(putver,1,0,0); //rotasi vertikal
glRotatef(put,0,1,0); //rotasi horizontal
//=======================================
posisikubus(); //kubus tengah
glTranslatef(0,-4.2,0);
posisikubus(); //kubus bawah
glTranslatef(0,4.2,0); //menormalkan posisi kubus
eksekub(); //eksekusi kubus
//================================================== ========
// tombol untuk menggerakan kubus kubus
//================================================== ========
if (glfwGetKey (GLFW_KEY_SPACE)) {put+= 1;
if (put> 360)put=0;}
if (glfwGetKey (GLFW_KEY_RIGHT)) {
puthor1=0;
}
if (glfwGetKey (GLFW_KEY_LEFT)) {
}
//--------------------------------------
if (glfwGetKey (GLFW_KEY_UP)) {putver += 1;
if (putver> 360)putver=0;}
if (glfwGetKey (GLFW_KEY_DOWN)) {putver += 90;
if (putver> 360)putver=0;}
//------------------------------------------------------------------------------------
//
// tampilkan ke layar (swap double buffer)
glfwSwapBuffers();
setelah seluruh koding gambar ditempatkan di atas maka program akan memanggil fungsi glfwSwapBuffers yaitu sebuah fungsi untuk menampilkan hasil koding ke layar.
//
// check input , apakah tombol esc ditekan atau tombol "close" diclick
mRunning = !glfwGetKey( GLFW_KEY_ESC ) && glfwGetWindowParam( GLFW_OPENED );
}
glfwTerminate();
return(0);
}
untuk memanggil fungsi glfw dan mengembalikan nilai integer untuk variable – variable yang dipakai.
void mulaiOpenGL(void)
{
//
// Set viewport ke resolusi 640x480 viewport bisa diibaratkan
// layar monitor anda
glViewport( 0, 0, 640, 480 );
//
void ini adalah fungsi yang nantinya akan dipanggil saat program dieksekusi.
Baris pertamanya adalah pengaturan resolusi monitor computer yang sedang kita gunakan dengan skala 640 x 480 . ViewPort adalah nama variabel pengganti nama monitor kita.
// Set mode OpenGL ke mode pryeksi (Projection) dan set proyeksi
// menggunakan proyeksi perspective, dengan sudut pandang (Field Of
// View) 60 derajat
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective( 60.0f, 640.0f/480.0f, 0.1f, 1000.0f );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
//
baris ini untuk mengatur mode OpenGL ke mode Proyeksi dan proyeksi yang kita pakai adalah proyeksi Perspective. Dimana sudut pandang yang kita pakai adalah 60 derajat dan resolusi 640 x 480.
// Set mode gradasi warna halus (Smooth)
glShadeModel( GL_SMOOTH );
//
baris ini untuk mengatur ketika user memasukkan gradasi warna halus.
// warna yang digunakan untuk membersihkan layar
glClearColor( 0.9f, 0.9f, 0.8f, 0.8f );
//
baris ini merupakan program untuk mengembalikan warna layar ke semula atau untuk membersihkan layar.
// nilai untuk membersihkan depth buffer.
glClearDepth( 1.0f );
//
sedangkan baris ini adalah nilai untuk membersihkan depth buffer.
// Depth test digunakan untuk menghindari polygon yang
// tumpang tindih.
glEnable( GL_DEPTH_TEST );
glDepthFunc( GL_LEQUAL );
//
//beritahu OpenGL untuk menggunakan perhitungan perspective
// yang terbaik (perhitungan ini tidak bisa selalu 100% akurat)
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );}

Tidak ada komentar:

Posting Komentar