Membuat Objek 3D dengan Animasi Sederhana Menggunakan OpenGL


Assalamualaikum Wr Wb

Kali ini kita akan membuat objek 3 Dimensi dengan animasi sederhana. Postingan ini merupakan lanjutan dari tutorial transformasi 2 dimensi kemarin.
Yang membedakan 2 dimensi dan 3 dimensi adalah kedalaman. Kedalaman didefinisikan sebagai jarak antara viewer terhadap benda yang dia lihat. Ini berarti berbeda dengan 2 dimensi yang hanya menggunakan 2 ukuran, yaitu panjang dan lebar, maka 3 dimensi menggunakan 3 ukuran, yaitu panjang, lebar dan kedalaman. Secara geometri ketiga ukuran tersebut disimbolkan dengan sumbu x, y, dan z.

Salah satu sistem koordinat yang dikenal adalah sistem koordinat kartesian yang digunakan untuk membedakan lokasi atau posisi sembarang titik atau objek dengan titik atau objek yang lain. Sistem koordinat kartesian terdiri atas sistem koordinat kartesian 2 dimensi dan sistem koordinat kartesian 3 dimensi. Dalam sistem koordinat 3 dimensi terdapat satu sumbu lain selain sumbu x dan sumbu y, yaitu sumbu z yang arahnya tegak lurus terhadap sumbu x dan sumbu y. Hadirnya sumbu z menyebabkan sistem koordinat ini menjadi lebih hidup karena efek jauh dekat menjadi terlihat. 
Objek 3 Dimensi yang kita buat adalah kubus dengan animasi sederhana, kita akan membuat kubus tersebut menggunakan kotak-kotak yang digabungkan menjadi satu bagian. Nah , bagi yang belum bisa membuat kotak nya , bisa melihat dan mengikuti tutorial di postingan sebelumnya.

Langsung saja kita ke kodingan nya.


 #include <GL\glut.h>
 GLfloat xRotated, yRotated, zRotated;
void init(void)
{
glClearColor(0,0,0,0);

}

void DrawCube(void)
{

     glMatrixMode(GL_MODELVIEW);
    // Bersihkan Buffer Gambar.
    glClear(GL_COLOR_BUFFER_BIT);
   glLoadIdentity();
        glTranslatef(0.0,0.0,-10.5);
    glRotatef(xRotated,1.0,0.0,0.0);
    // Rotasi Sumbu Y
    glRotatef(yRotated,0.0,1.0,0.0);
    // Rotasi Sumbu Z
    glRotatef(zRotated,0.0,0.0,1.0);
  glBegin(GL_QUADS);        // Gambar kubus menggunakan kotak
    glColor3f(0.0f,1.0f,0.0f);    // Warna Biru
    glVertex3f( 1.0f, 1.0f,-1.0f);    // Kanan atas kotak (Atas)
    glVertex3f(-1.0f, 1.0f,-1.0f);    // Kiri atas kotak  (Atas)
    glVertex3f(-1.0f, 1.0f, 1.0f);    // Kiri Bawah kotak (Atas)
    glVertex3f( 1.0f, 1.0f, 1.0f);    // Kanan bawah kotak (Atas)

    glColor3f(1.0f,0.5f,0.0f);    // Warna Orange
    glVertex3f( 1.0f,-1.0f, 1.0f);    // Kanan atas kotak (Bawah)
    glVertex3f(-1.0f,-1.0f, 1.0f);    // Kiri atas kotak  (Bawah)
    glVertex3f(-1.0f,-1.0f,-1.0f);    // Kiri Bawah kotak (Bawah)
    glVertex3f( 1.0f,-1.0f,-1.0f);    // Kanan bawah kotak (Bawah)

    glColor3f(1.0f,0.0f,0.0f);    // Warna Merah  
    glVertex3f( 1.0f, 1.0f, 1.0f);    // Kanan atas kotak (Depan)
    glVertex3f(-1.0f, 1.0f, 1.0f);    // Kiri atas kotak  (Depan)
    glVertex3f(-1.0f,-1.0f, 1.0f);    // Kiri Bawah kotak (Depan)
    glVertex3f( 1.0f,-1.0f, 1.0f);    // Kanan bawah kotak (Depan)

    glColor3f(1.0f,1.0f,0.0f);    // Warna Kuning
    glVertex3f( 1.0f,-1.0f,-1.0f);    // Kanan atas kotak (Belakang)
    glVertex3f(-1.0f,-1.0f,-1.0f);    // Kiri atas kotak  (Belakang)
    glVertex3f(-1.0f, 1.0f,-1.0f);    // Kiri Bawah kotak (Belakang)
    glVertex3f( 1.0f, 1.0f,-1.0f);    // Kanan bawah kotak (Belakang)

    glColor3f(0.0f,0.0f,1.0f);    // Warna Biru
    glVertex3f(-1.0f, 1.0f, 1.0f);    // Kanan atas kotak (Kiri)
    glVertex3f(-1.0f, 1.0f,-1.0f);    // Kiri atas kotak  (Kiri)
    glVertex3f(-1.0f,-1.0f,-1.0f);    // Kiri Bawah kotak (Kiri)
    glVertex3f(-1.0f,-1.0f, 1.0f);    // Kanan bawah kotak (Kiri)

    glColor3f(1.0f,0.0f,1.0f);    // Warna Ungu
    glVertex3f( 1.0f, 1.0f,-1.0f);    // Kanan atas kotak (Kanan)
    glVertex3f( 1.0f, 1.0f, 1.0f);    // Kiri atas kotak  (Kanan)
    glVertex3f( 1.0f,-1.0f, 1.0f);    // Kiri Bawah kotak (Kanan)
    glVertex3f( 1.0f,-1.0f,-1.0f);    // Kanan bawah kotak (Kanan)
  glEnd();            // Selesai
glFlush();
}


void animation(void)
{

     yRotated += 0.01;
     xRotated += 0.02;
    DrawCube();
}


void reshape(int x, int y)
{
    if (y == 0 || x == 0) return;  //Tidak ada yang terlihat, jadi return aja
    // Buat Metrix proyeksi baru
    glMatrixMode(GL_PROJECTION);  
    glLoadIdentity();
    // Sudut:40 Derajat
    // Jarak terdekat: 0.5
    // Jarak terjauh : 20.0
     
    gluPerspective(40.0,(GLdouble)x/(GLdouble)y,0.5,20.0);
    glMatrixMode(GL_MODELVIEW);
    glViewport(0,0,x,y);  //Gunakan semua kotak untuk rendering
}

int main(int argc, char** argv){

glutInit(&argc, argv);
// Kita initialisasi glut functionnya
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(DrawCube);
glutReshapeFunc(reshape);
// Atur fungsi animasinya 
glutIdleFunc(animation);
glutMainLoop();
return 0;
}




Hasilnya :




Kelompok :
-          MHD. Sokhibul Padila Padli
-          Nanang Budiansyah
-          Ramdayani
-          Sukma
-           

Komentar

Postingan populer dari blog ini

Tutorial Transformasi 2D dengan OpenGL