Saturday, January 18, 2014

Membuat Objek 3D dengan OpenGL


Pada kesempatan kali ini saya ingin menulis tentang membuat objek 3D. Dalam pembuatan objek 3D ini saya membuatnya dengan pemrograman OpenGL, pasti banyak yg belum tahu kan apa sih OpenGL itu?? Nihh berikut saya beri penjelasannya menurut eyang wikipedia, jadi kalau menurut wikipedia OpenGL (Open Graphics Library) itu adalah spesifikasi standar yang mendefinisikan sebuah lintas-bahasa, lintas platform API untuk mengembangkan aplikasi yang menghasilkan grafis komputer 2D maupun 3D. Antarmuka terdiri dari lebih dari 250 panggilan fungsi yang berbeda yang dapat digunakan untuk menggambar tiga dimensi yang adegan-adegan kompleks dari bentuk-bentuk primitif sederhana. OpenGL dikembangkan oleh Silicon Graphics Inc (SGI) pada tahun 1992  dan secara luas digunakan dalam CAD, realitas maya, visualisasi ilmiah, visualisasi informasi, dan simulasi penerbangan. Hal ini juga digunakan dalam video game, di mana bersaing dengan Direct3D on Microsoft Windows platform (lihat vs OpenGL Direct3D). OpenGL dikelola oleh sebuah teknologi konsorsium nirlaba yaitu Khronos Group. Nahh udah paham kan apa yang dimaksud OpenGL itu?

IDE yang digunakan
Sebenarnya dalam pemrograman OpenGL anda dapat menggunakan IDE DevC++ ataupun Microsoft Visual Studio. Dalam pemrograman OpenGL ini saya menggunakan Microsoft Visual Studio 2008 (visual C++). Pastikan anda telah menginstall Microsoft Visual Studio tersebut. Nahh jika kalian telah menginstall IDE tersebut, maka langkah selanjutnya adalah memasukkan library-library yang dibutuhkan dalam pemrograman OpenGL. Berikut caranya:
  • Copy glu32.dll, glut.dll, dan glut32.dll ke dalam folder C:\Windows\System32
  • Copy GL.h, GLAUX.h, GLU.h, dan glut.h ke dalam folder C:\Program Files\Microsoft Visual Studio 9.0\VC\include
  • Copy GLAUX.lib, GLU32.lib, dan glut32.lib ke dalam folder C:\Program Files\Microsoft Visual Studio 9.0\VC\lib
 Kalian dapat memperoleh file-file tersebut dengan mendownloadnya dari website Glut secara Gratis! (http://www.glut.org).

Membuat Objek
Dalam pembuatan objek kali ini saya akan membuat sebuah objek mobil 3D. Berikut langkah-langkah cara pembuatannya:
  • Buka aplikasi Microsoft Visual Studio 2008.
  • Pilih menu File -> New -> Project. Sehingga akan terbuka jendela dialog baru seperti di bawah ini:

  • Pilih Win32 Console Application dan beri nama projectnya, misal: mobil. Klik Next, kemudian pada bagian Additional Options, contreng pilihan Empty project. Tujuannya adalah agar project yang kita buat merupakan project yang kita mulai dari dasar, bukan dari template yang disediakan oleh Microsoft Visual Studio.
  • Jika project sudah berhasil tercreate, maka pada Microsoft Visual Studio di bagian paling kiri akan muncul folder project yang baru kita buat. Klik kanan pada folder Source Files, lalu pilih menu Add -> New Item, pilih C++ File (.cpp), kemudian beri nama, misal: main.
  • Buka file main.cpp pada editor kode program, lalu ketikkan kode program berikut ini: 
    #include <windows.h>
    #include <glut.h>
    #include <math.h>

    void cylinder(float alas,float atas,float tinggi);
    void kerucut(float ngisor, float nduwur, float dowo);
    void blok(float tebal,int ratiol,int ratiop);

    GLfloat  source_light[]={0.30,0.30,0.30,0.50};
    double Loop,LoopAll=0;


    void Mobil(void)
    {
     glClearColor(1.0,9.0,1.0,0.0);  //blackground
     glShadeModel(GL_SMOOTH);
     glMatrixMode(GL_PROJECTION);
     glLoadIdentity();
     gluPerspective(50.0,1.5,10.0,1000.0);

     glEnable  (GL_DEPTH_TEST);
     glPolygonMode   (GL_FRONT_AND_BACK,GL_FILL);
     glEnable  (GL_LIGHTING);
     glLightfv  (GL_LIGHT7,GL_DIFFUSE,source_light);
     glEnable  (GL_LIGHT7);
     glEnable  (GL_COLOR_MATERIAL);
     glColorMaterial (GL_FRONT_AND_BACK,GL_AMBIENT);

    }



    void display(void)
    {

     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
     glMatrixMode(GL_MODELVIEW);
     glLoadIdentity();

     /*
      Keterangan:
      glTranslatef : coba nilainya diubah2 untuk menempatkan pada posisi yang tepat dengan sumbu (x, y, z)
      glRotated : coba nilainya diubah2 untuk memutar objek agar sesuai dengan keinginan.
      cylinder: untuk membentuk model tabung

     */

      glTranslatef(0,0,-100);// besar kecilnya mobil

      Loop++;
         glRotatef(Loop,0.9,4.0,0.6);//mobil yang berotasi

     glPushMatrix();//body
     //glpushmatrix();
     glColor3f(0.0,0.0,9.0);
     blok(10, 3, 2);

     glTranslatef(0, 9, 0);
     blok(10, 3, 2);
     glTranslatef(10, -10,0);
     blok(10, 5.5, 2);
     glRotatef(-35, 0, 0, 15);
     glTranslatef(0, 7,0);
     blok(10, 2, 2);
     glTranslatef(2, 4.9,-2.5);
     glColor3f(0.9,0.9,0.9);// warna kaca
     blok(0.5, 20, 31);

     glRotatef(180, 45, -45, 0);
     //glTranslatef(0, 10,0);
     //blok(3, 2, 5);
     //cylinder(2,2,30);
     //glTranslatef(-10, -10,0);
     //glRotatef(90, 45,-45, 0);
     //cylinder(2,2,30);
     //glRotatef(90, -45, 90, 90);
     //blok(5, 3, 2);

     glPopMatrix();


     glPushMatrix();//roda
     glColor3f(0.0,0.0,0.0);
     glTranslatef(20, -8,-7);
     cylinder(5, 5,3);

     glColor3f(0.0,0.0,0.0);
     glTranslatef(-20, 8,7);
     glTranslatef(-5, -8,-7);
     cylinder(5, 5,3);

     glColor3f(0.0,0.0,0.0);
     glTranslatef(5, 8,7);
     glRotatef(180,0,180,0);
     glTranslatef(3,-8,-17);
     cylinder(5, 5,3);

     glColor3f(0.0,0.0,0.0);
     glTranslatef(-3,8,17);
     glTranslatef(-22,-8,-17);
     cylinder(5, 5,3);

     glColor3f(1.0,1.0,1.0);

     glRotatef(90,1,0,0);
     glTranslatef(8, 2.5,-15);
     blok(2, 4, 5);


     glRotatef(90,0,1,0);
     glTranslatef(0,-0.2,7);
     blok(2, 4, 8);


     glRotatef(0,0,0,0);
     glTranslatef(0,19.2,0);
     blok(2, 4, 8);

     glRotatef(90,0,1,0);
     glTranslatef(7, 0,-8);
     blok(2, 4, 5);

     glColor3f(9.9,9.9,0.0);//lampu
     glRotatef(90,0,1,0);
     glTranslatef(0,-3,20);
     cylinder(2, 2,3);

     glColor3f(9.9,9.9,0.0);//lampu
     glRotatef(0,0,0,0);
     glTranslatef(0,-12,0);
     cylinder(2, 2,3);

     glColor3f(0.0,0.0,0.0);//knalpot
     glRotatef(0,0,0,0);
     glTranslatef(0,0,-52);
     cylinder(1, 1,3);

     glColor3f(1.0,1.0,1.0);
     glRotatef(90,1,0,0);
     glTranslatef(-8,3.5,-12);
     blok(2, 4, 8);

     glColor3f(9.0,0.0,0.0);//lampu atas
     glRotatef(0,0,0,0);
     glTranslatef(-8,28,0);
     cylinder(1, 1,12);


     glPopMatrix();


     glFlush();
     glutSwapBuffers();

    }

    void kerucut(float ngisor, float nduwur, float dowo)
    {
     float i;
     glPushMatrix();
     glTranslatef(1.0,0.0,ngisor/24);
     glutSolidCone(ngisor,0,32,4);
     for(i=0;i<=dowo;i+=ngisor/24)
     {
      glTranslatef(0.0,0.0,ngisor/24);
      glutSolidTorus(ngisor/4,ngisor-((i*(ngisor-nduwur))/dowo),16,16);
     }
     glTranslatef(0.0,0.0,ngisor/4);
     glutSolidCone(nduwur,0,20,1);
     glColor3f(0.,1.,1.);
     glPopMatrix();
    }
    void cylinder(float alas,float atas,float tinggi)
    {
     float i;
     glPushMatrix();
     glTranslatef(1.0,0.0,-alas/8);
     glutSolidCone(alas,0,32,4);
     for(i=0;i<=tinggi;i+=alas/24)
     {
      glTranslatef(0.0,0.0,alas/24);
      glutSolidTorus(alas/4,alas-((i*(alas-atas))/tinggi),16,16);
     }
     glTranslatef(0.0,0.0,alas/4);
     glutSolidCone(atas,0,20,1);
     glColor3f(1.,0.,0.);
     glPopMatrix();
    }

    void blok(float tebal,int ratiol,int ratiop)
    {
     float i,j;
     glPushMatrix();
     for(i=0;i<ratiop;i++)
     {
      glTranslatef(-(ratiol+1)*tebal/2,0.0,0.0);
      for(j=0;j<ratiol;j++)
      {
       glTranslatef(tebal,0.0,0.0);
       glutSolidCube(tebal);
      }
      glTranslatef(-(ratiol-1)*tebal/2,0.0,tebal);
     }
     glPopMatrix();
    }
    void tampil()
    {
     display();
    }


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


     glutInit(&argc,argv);
     glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);//|GLUT_DEPTH);
     glutInitWindowPosition(10,10);
     glutInitWindowSize(1000,700);
     glutCreateWindow("Mobil");
     glClearColor(0.5,0.5,0.0,0.0);
     glutDisplayFunc(display);
     gluOrtho2D(-320., 320., -240.0, 240.0);
     glutIdleFunc(tampil);
     Mobil();
     glutMainLoop();
     return(0);
    } 
    • Lakukan pengubahan properti program dengan memilih menu: Project -> Properties, atau tekan tombol Alt+F7. Pada Configuration Properties -> General -> Character Set pilih “Not Set”. Pada Configuration Properties -> Linker -> Input -> Additional Dependencies masukkan library-library yang dibutuhkan. Ketikkan: opengl32.lib glu32.lib glaux.lib odbc32.lib odbccp32.lib. Pada Configuration Properties -> C/C++ -> DIsable Spesific Warnings ketik 4996. 
    •   Kemudian lakukan proses Debugging atau tekan F5 pada keyboard jika berhasil maka seperti inilah hasil outputnya:

     
    Saya rasa cukup sekian ya tentang membuat objek 3D dengan OpenGL, Semoga Bermanfaat ! :))
Referensi:
http://andiktaufiq.wordpress.com/2010/03/19/memulai-belajar-pemrograman-opengl/
http://id.wikipedia.org/wiki/OpenGL
http://nehe.gamedev.net/tutorial/lessons_01__05/22004/

6 comments:

Wah ajarin gua ni nanti Gus hehe

numpang copas, mau pake tugas kuliah gan, smga ilmunya bermaanfaat bagi orang awam, kalau bsa file exenya dikirim ke email sy gan ini email sy masriantokorompot@gmail.com

Keren, coba program mobil 3D di blog ane, ini link nya

http://heriadyblog.blogspot.co.id/2015/11/program-animasi-game-moter-3d-dengan.html

gan fungsi void blok, kerucut sama cylinder itu gimanaa yaa, kurang paham

Post a Comment