Membuat Simulasi Rotasi Bumi Menggunakan OpenGL

Posted on Updated on

OpenGL merupakan sebuah library yang sering digunakan untuk membuat objek grafik 2D maupun 3D. Penjelasan lengkap tentang OpenGL dapat dibaca di sini. Kali ini saya ingin membagikan tentang salah satu kehebatan yang dapat dibangun dengan menggunakan OpenGL, yakni membuat simulasi rotasi bumi dan perputaran bulan mengelilingi bumi. Sebenarnya ini merupakan salah satu tugas kuliah di semester ini, dan semoga bermanfaat bagi teman-teman yang membutuhkan ke depannya.

Code yang akan saya tulis di sini tidak bertahap dari awal, untuk itu diharapkan teman-teman sudah mengerti konsep-konsep dasar dalam penggunaan library OpenGL. Di sini tool yang saya gunakan adalah Dev-C, sebuah editor yang digunakan untuk membangun aplikasi berbasis C/C++. Teman-teman dapat menggunakan tool lain sesuai yang diinginkan. Konsep yang digunakan pada aplikasi ini adalah penggunakan objek 3D Sphere, rotasi, dan lighting yang disisipkan pada objek yang lain sehingga seolah-olah objek tersebut menjadi sumber cahaya terhadap objek yang lain.

Berikut adalah source code yang digunakan untuk membangun simulasi ini.

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

static int spin = 0;
static int kanan = 0;
static int kiri = 0;

void init(void)
{
    GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
    GLfloat mat_shininess[] = { 50.0 };
    GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
    glClearColor (0.1, 0.1, 0.0, 0.0);
    glShadeModel (GL_SMOOTH);

    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
    glLightfv(GL_LIGHT0, GL_POSITION, light_position);

    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_DEPTH_TEST);
}

void setViewport(int left, int bottom, int width, int height){
    glViewport(left, bottom, width, height);
}

void display(void)
{

    GLfloat position[] = {0.0, 0.0, 2.0, 0.5};
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
    glTranslatef(0.0, 0.0, -5.0);

    glPushMatrix();
    glRotated((GLdouble) spin, spin, spin, 0.0);
    glLightfv(GL_LIGHT0, GL_POSITION, position);

    glTranslated(0.0, 0.0, 1.5);
    glDisable(GL_LIGHTING);

    glColor3f(1.0, 1.0, 0.0);
    glutWireSphere(0.1,50,16);

    glEnable(GL_LIGHTING);
    glPopMatrix();

    //membuat bumi
    glutSolidSphere (0.5, 100, 32);

    glPopMatrix();
    glFlush ();
}

void reshape (int w, int h)
{
   glViewport (0, 0, (GLsizei) w, (GLsizei) h);
   glMatrixMode (GL_PROJECTION);
   glLoadIdentity();
   if (w <= h)
      glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w,
         1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0);
   else
      glOrtho (-1.5*(GLfloat)w/(GLfloat)h,
         1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0);
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
}

void mouse(int button, int state, int x, int y)
{
   switch (button) {
      case GLUT_LEFT_BUTTON:
         if (state == GLUT_DOWN) {
            spin = (spin + 10) % 360;
            glutPostRedisplay();
         }
         break;
      default:
         break;
   }
}

void update(int value){
    glutPostRedisplay();
    glutTimerFunc(10,update,0);
    spin = (spin + 1) % 360;
    glutPostRedisplay();
}

int main(int argc, char** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
   glutInitWindowSize (700, 500);
   glutInitWindowPosition (100, 100);
   glutCreateWindow (argv[0]);
   init ();
   glutTimerFunc(100,update,0);
   glutDisplayFunc(display);
   glutReshapeFunc(reshape);
   glutMouseFunc(mouse);
   glutKeyboardFunc(keyPressed);
   glutMainLoop();
   return 0;
}

Dan inilah hasilnya..

Hasil Simulasi
Hasil Simulasi

Sekian postingan kali ini, semoga bermanfaat.. šŸ˜€

Iklan

6 thoughts on “Membuat Simulasi Rotasi Bumi Menggunakan OpenGL

    ervinahandayani said:
    6 Januari 2013 pukul 12:40

    iyoooo gayaaaa apdet terus blog eee…

    Aldy Ahsandin said:
    10 Januari 2013 pukul 02:57

    Reblogged this on Aldy Ahsandin and commented:
    Ini ada tutorial OpenGL cara bikin animasi Rotasi Bumi dari Fadli. Bagus buat dipelajari.

    syarifah.meutia@gmail.com said:
    19 Maret 2013 pukul 16:00

    error 3 ko gan ?

    irvan said:
    16 Oktober 2014 pukul 21:16

    agan ada project animasi dengan dev c++ menggunakan opengl

    sri said:
    29 November 2015 pukul 21:09

    Banyakan ERROR kak..
    Padahal Butuh kali ..

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s