Transformasi Pada OpenGL


Mungkin jika Anda mencoba untuk mencari artikel mengenai Transfomasi OpenGL, maka anda akan mendapatkan banyak artikelnya. Tetapi disini Diskusi Kuliah akan coba menshare ulang apa yang telah dibagi oleh Om Google. Kali ini Diskusi Kuliah akan mencoba memberi gambaran mengenai teori Transformasi sekaligus syntax dan sedikit contoh program untuk trasnsformasi.

Sedikit teori, Transformasi adalah proses perubahan, perpindahan suatu objek sehingga objek tersebut memiliki bentuk atau posisi yang baru. Pada OpenGL terdapat beberapa tipe Transformasi diantaranya adalah :

  1. Modeling Transformation : memodelkan transformasi dengan cara menggerakkan objek disekitar layar dan juga merubah objek dalam satuan koordinat lokal menjadi koordinat yang umum. Maksudnya adalah proses transformasi tertuju pada posisi dan orientasi pada pergerakan, perputaran, dan ukuran objek
  2. Viewing Transformation : tipe transformasi ini memanfaatkan posisi kamera dan cara pandang objek tersebut sehingga jika dilakukan transformasi, maka yang akan melakukan transformasi adalah kamera atau cara pandang objek tersebut
  3. Project Transformation : Transformasi ini berfokus pada isi/volume dari objek tersebut dan batasan pandangan dari layar yang ada.
  4. Viewport Transformation : Transformasi ini memetakan koordinat yang terbuat kaena transformasi perspektif pada permukaan layar, Kita juga bisa membayangkan ini sebegai hasil akhir yang mampu memperbesar ataupun memperkecil objek tersebut, atau yang sering kita lakukan adalah seperti melakukan zoom in atau zoom out pada suatu objek, karena pada dasarnya ukuran dari objek tersebut tidak berubah, melainkan cara pandang kita memaksa kita untuk melihat objek tersebut menjadi objek yang lebih besar.

Oke, kali ini Diskusi Kuliah akan mencoba membagi materi dengan tipe transformasi yang pertama, yaitu Modeling Transformation.

Berikut ini merupakan alur transformation vertex

Pada dasarnya, operasi yang dapat dilakukan dengan menggunakan model transformasi ada 3, yaitu :

  1. Translation : Pemindahan Objek ke posisi yang baru
  2. Rotation : Proses memutarkan objek
  3. Scaling : Memperbesar dan Memperkecil Objek, disini kita bisa merubah ukuran objek tersebut tidak harus seragam antara panjang, lebar atau tingginya, sehingga kita bebas untuk me-resize objek yang telah kita buat

Berikut ini implementasi dari Model Transformasi

Mungkin itu sedikit mengenai teori Modeling Transformation, sekarang kita akan coba men “transformasikannya” kedalam bahasa pemrograman OpenGL. Disini Diskusi Kuliah akan mempraktekan menggunakan OpenGL yang ada pada DevC++. Berikut ini Screenshotnya :

Dan berikut ini penjelasannya :

Ada beberapa hal yang perlu diketahui, yaitu :

  1. Pada Objek tersebut, penulis membuat 2 bangun yang sama, hanya membuat viewport ataupun titik koordinat yang berbeda,yaitu balok.
  2. Balok tersebut kemudian dilakukan transformasi untuk objek-objek yang lainnya seperti jari
  3. semua operasi modeling trasnformasi dilakukan (Translation, Rotate, dan Scaling)
  4. program ditulis dengan menggunakan procedure, sehingga nantinya hanya butuh pemanggilan dari prosedure yang sudah dideklarasikan sebelumnya.

Berikut ini syntak yan dipakai :

CATATAN : Jika syntax diatas terdapat kata “</br>”, silakan dihapus pada saat anda mengcopy atau mencobanya
Jika anda ingin mendownloadnya, silakan download disini :

http://www.fileserve.com/file/H8hSWae

Jika anda kesulitan untuk mengkonfigurasikan /instalasi OpenGL pada DevC++, silakan Kunjungi
Instalasi OpenGL pada DevC++ dan

Memulai OpenGL Menggunakan DevC++

Semoga Bermanfaat. Terima Kasih

Advertisements

30 comments on “Transformasi Pada OpenGL

  1. Bosss… bntuin aq donkkk …
    gini… ada tugas tuh,, bikin transformasi, nah transformasi nya bikin transformer… kasih source code nya ya buat dev c++.. pliiisss…
    thankss.. 🙂

  2. Mas ,bisa minta tolong dijelasin prosesnya transformer kyk yang mas buat.butuh referensi nih.waktu mendesak soalnya.thx b4.GBU.. 😀

      • Gini mas,menurut mas thu transformasi apakah hanya bisa scale,rotate,translate atau bisa berubah bentuk misal dari kubus jadi pesawat kayak film transformer 😀

      • perubahan bentuk yang ada di transformer itu memang suatu transformasi.
        Tetapi konsep transformasi sebenarnya adalah suatu perubahan objek asli menjadi objek yang baru. Dasar Transformasi pada komputer grafika terdapat 3 macam yaitu perubahan skala, jarak (translate), dan suatu rotasi.
        JIka kita perhatikan pada film transformer, contoh pada saat mobil menjadi robot itu kan merupakan suatu scale, rotate, dan translate.
        karena sebenarnya kan mobil tersebut merupakan gabungan beberapa objek yang menghasilkan suatu mobil, lalu objek2 tersebut yang menghasilkan suatu mobil, bertransformasi (scale, rotate, translate) menjadi suatu robot…
        Mungkin itu seddikit teori dari Diskusi Kuliah. Jika ada yang kurang mohon dikoreksi.

  3. Kak, bisa bantuin aku.? ne aku ada masalah dengan cara menggerakan robot..targetnya seh robot/objek bisa barjalan berputar pada suatu ruangan dan kontrolnya pake keyboard…list program dasarnya udah ada dan robot/objeknya udah terbentuk bersama ruangannya..nah masalahnya sekarang mw gerakin objeknya(berjalan memutar)..
    tolong bantuannya….

  4. ne list programnya kak..mhon bantuannya

    #include
    #include

    #define STEPCYCLE 400
    #define WALKCYCLE 4000

    void myBox(double x, double y, double z)
    {
    GLdouble hx = x * 0.5, hz = z * 0.5;

    GLdouble vertex[][3] = {
    { -hx, -y, -hz },
    { hx, -y, -hz },
    { hx, 0.0, -hz },
    { -hx, 0.0, -hz },
    { -hx, -y, hz },
    { hx, -y, hz },
    { hx, 0.0, hz },
    { -hx, 0.0, hz }
    };

    static int face[][4] = {
    { 0, 1, 2, 3 },
    { 1, 5, 6, 2 },
    { 5, 4, 7, 6 },
    { 4, 0, 3, 7 },
    { 4, 5, 1, 0 },
    { 3, 2, 6, 7 }
    };

    static GLdouble normal[][3] = {
    { 0.0, 0.0,-1.0 },
    { 1.0, 0.0, 0.0 },
    { 0.0, 0.0, 1.0 },
    {-1.0, 0.0, 0.0 },
    { 0.0,-1.0, 0.0 },
    { 0.0, 1.0, 0.0 }
    };

    static GLfloat red[] = { 0.8, 0.2, 0.2, 1.0 };

    int i, j;

    glMaterialfv(GL_FRONT, GL_DIFFUSE, red);

    glBegin(GL_QUADS);
    for (j = 0; j = 0;) {
    glVertex3dv(vertex[face[j][i]]);
    }
    }
    glEnd();
    }

    void armleg(double girth, double length, double r1, double r2)
    {
    glRotated(r1, 1.0, 0.0, 0.0);
    myBox(girth, length, girth);
    glTranslated(0.0, -0.05 – length, 0.0);
    glRotated(r2, 1.0, 0.0, 0.0);
    myBox(girth, length, girth);
    }

    void myGround(double height)
    {
    static GLfloat ground[][4] = {
    { 0.6, 0.6, 0.6, 1.0 },
    { 0.8, 0.3, 0.8, 1.0 }
    };

    int i, j;

    glBegin(GL_QUADS);
    glNormal3d(0.0, 1.0, 0.0);
    for (j = -5; j <= 5; ++j) {
    for (i = -5; i < 5; ++i) {
    glMaterialfv(GL_FRONT, GL_DIFFUSE, ground[(i + j) & 1]);
    glVertex3d((GLdouble)i, height, (GLdouble)j);
    glVertex3d((GLdouble)i, height, (GLdouble)(j + 1));
    glVertex3d((GLdouble)(i + 1), height, (GLdouble)(j + 1));
    glVertex3d((GLdouble)(i + 1), height, (GLdouble)j);
    }
    }
    glEnd();
    }

    void display(void)
    {
    static GLfloat lightpos[] = { 3.0, 4.0, 5.0, 1.0 };
    static int frame = 0;

    double t = (frame % STEPCYCLE) / (double)STEPCYCLE;

    double s = (frame % WALKCYCLE) / (double)WALKCYCLE;

    /*
    * ????????????
    */

    double ll1 = 0.0; /* ???????????? */
    double ll2 = 00.0; /* ???????????? */

    double rl1 = 0.0; /* ???????????? */
    double rl2 = 00.0; /* ???????????? */

    double la1 = 0.0; /* ???????????? */
    double la2 = 0.0; /* ???????????? */

    double ra1 = 0.0; /* ???????????? */
    double ra2 = 000.0; /* ???????????? */

    double px = 0.0, pz = 0.0; /* ????? */
    double r = 0.0; /* ????? */
    double h = 0.0; /* ????? */

    /* ???????????????????????? */
    ++frame;

    /* ????? */
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    /* ?????????????? */
    glLoadIdentity();

    /* ???????? */
    glLightfv(GL_LIGHT0, GL_POSITION, lightpos);

    /* ????????????????*/
    glTranslated(0.0, 0.0, -10.0);

    /* ?????? */

    /* ?? */
    myGround(-1.8);

    /* ???????? */
    glTranslated(px, h, pz);
    glRotated(r, 0.0, 1.0, 0.0);

    /* ? */
    myBox(0.20, 0.25, 0.22);

    /* ? */
    glTranslated(0.0, -0.3, 0.0);
    myBox(0.4, 0.6, 0.3);

    /* ?? */
    glPushMatrix();
    glTranslated(0.1, -0.65, 0.0);
    armleg(0.2, 0.4, ll1, ll2);
    glPopMatrix();

    /* ?? */
    glPushMatrix();
    glTranslated(-0.1, -0.65, 0.0);
    armleg(0.2, 0.4, rl1, rl2);
    glPopMatrix();

    /* ?? */
    glPushMatrix();
    glTranslated(0.28, 0.0, 0.0);
    armleg(0.16, 0.4, la1, la2);
    glPopMatrix();

    /* ?? */
    glPushMatrix();
    glTranslated(-0.28, 0.0, 0.0);
    armleg(0.16, 0.4, ra1, ra2);
    glPopMatrix();

    glFlush();
    }

    void resize(int w, int h)
    {
    /* ????????????????? */
    glViewport(0, 0, w, h);

    /* ????????? */
    glMatrixMode(GL_PROJECTION);

    /* ?????????? */
    glLoadIdentity();
    gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0);

    /* ????????????? */
    glMatrixMode(GL_MODELVIEW);
    }

    void keyboard(unsigned char key, int x, int y)
    {
    /* ESC ? q ????????? */
    if (key == '33' || key == 'q') {
    exit(0);
    }
    }

    void init(void)
    {
    /* ???? */
    glClearColor(1.0, 1.0, 1.0, 0.0);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_CULL_FACE);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    }

    int main(int argc, char *argv[])
    {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH);
    glutCreateWindow(argv[0]);
    glutDisplayFunc(display);
    glutReshapeFunc(resize);
    glutKeyboardFunc(keyboard);
    init();
    glutMainLoop();
    return 0;
    }

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s