11.18.2010

Gambar Berpola: Penggunaan Transformation Dan Tiling Pada OpenGL


Gambar yang bagus ya gan... :)

Gambar kaya gitu bisa agan buat dengan memanfaatkan Tiling dan Transformation pada OpenGL. Tiling adalah proses pembuatan gambar berpola dengan teknik perulangan. Pada proses Tiling, sebuah gambar ditampilkan beberapa kali dengan pola tertentu sehingga menghasilkan gambar berpola yang indah.  Proses Tiling dilakukan dengan memanfaatkan Viewport. Viewport apaan gan? Viewport adalah suatu segiempat di dalam WorldWindow di layar komputer. Trus WorldWindow apaan? WorldWindow adalah segiempat yang menspesifikasikan bagian "dunia" yang ingin digambar. Satu gambar besar tersebut merupakan tampilan gambar pada WorldWindow. Pada Tiling, WorldWindow yang besar dipecah menjadi beberapa Viewport kecil yang membentuk pola tertentu. Transformation adalah suatu cara untuk memanipulasi gambar dengan menggeser, merotasi, memperbesar, memperkecil, atau menshear gambar. 

Coba agan perhatikan gambar di atas. Gambar tersebut bisa dikatakan sebagai gambar yang mirip lingkaran yang disusun berjejer sehingga membentuk pola yang indah. Pembuatan gambar tersebut memang dilakukan dengan terlebih dahulu menggambar satu pola saja yaitu:


Dari satu pola ini gan, kemudian dilakukan perulangan untuk menggambar pola-pola yang lain secara berjajar. Pada setiap pola yang kelihatan ruwet seperti itu, sebenarnya hanya terbentuk dari satu gambar yang sederhana yaitu persegi. Persegi tersebut akan dimanipulasi sehingga menghasilkan satu pola gambar yang kelihatan ruwet tersebut menggunakan Transformation. Transformation di sini adalah transformation gabungan dari proses rotasi (glRotation()) yang dilanjutkan dengan translasi (glTranslated()). Rotasi digunakan untuk memutar persegi sehingga nantinya akan membentuk pola tersebut. Translasi digunakan untuk meletakkan hasil rotasi di tengah-tengah viewport. Setiap satu kali rotasi selalu diikuti oleh translasi. fungsi glLoadIdentity() digunakan untuk me-nonaktifkan/me-reset transformasi sebelunya. Transformasi sebelumnya direset bertujuan untuk menjaga titik acuan transformasi (titik 0,0) tetap berada di pojok kiri-bawah viewport. Hal itu perlu dilakukan karena setiap kali translasi dilakukan, titik acuan transformasi berubah ke koordinat hasil translasi. Berikut ini adalah fungsi Transformationnya gan.
/*   fungsi transformation
     transformation dibentuk dari gabungan 
     rotasi yang dilanjutkan dengan translasi
*/
void transformation()
{
     for(int i=0; i<36; i++)
     {
         glLoadIdentity(); // me-nonaktifkan transformasi sebelumnya
                           // agar pusat transformasi tetap di pojok
                           // kiri bawah viewport
         glTranslated(300, 300, 0); // transformasi II : 
                                    // persegi ditranslasi ke 
                                    // tengah viewport
         glRotated(i*10,0,0,1); // transformasi I : persegi dirotasi
         draw(); // memanggil fungsi untuk menggambar persegi
     }
}
Setelah terbentuk satu pola gambar, maka satu pola gambar tersebut digambar ulang. Penggambaran dilakukan berulang-ulang secara berjajar ke samping dan ke atas sehingga terbentuk gambar besar dengan pola yang indah. Penggambaran pola berulang ini memanfaatkan proses Tiling. Berikut ini adalah fungsi Tilingnya gan.
// fungsi untuk proses tiling
// tiap viewport berukuran 60 x 60 pixels
void drawTiling(void) {
 glClear(GL_COLOR_BUFFER_BIT);
 for (int i=0; i < 10; i++)
  for (int j=0; j<10; j++)
  {
   glViewport(i*60, j*60, 60, 60);
   transformation();
  }
}
Semoga yang sedikit ini bisa membantu agan-agan untuk membuat gambar yang "beauty" itu :)

7 komentar:

  1. cara gambar 1 polanya tdk ditunjukin gan . .

    BalasHapus
  2. Ini blog tah rangkuman tugas-tugas kuliah sih :p

    Sukses buat blognya yang baru An... :D
    Jangan cerai lagi ya :D
    wkwkwkwk...

    Kasihan blogmu yang lama :D
    Sudah hilang gak ada jejaknya

    BalasHapus
  3. source lengkap gan...

    BalasHapus
  4. untuk menggambar satu polanya :
    Lewat fungsi transformasi, di dalamnya ada perulangan for. lihat di akhir tiap-tiap perulangan dipanggil fungsi draw() untuk menggambar persegi. Fungsi draw() itulah yg digunakan untuk menggambar persegi. Setelah perulangan selesai, maka akan terbentuk 36 persegi yang membentuk satu pola. Cekidot fungsi draw()nya gan:
    /* fungsi untuk menggambar persegi
    dg ukuran 300 x 300 pixels
    */
    void draw()
    {
    glBegin(GL_LINE_LOOP);
    glVertex2d(0, 0);
    glVertex2d(300, 0);
    glVertex2d(300, 300);
    glVertex2d(0, 300);
    glEnd();
    glFlush();
    }

    Sourcecode lengkap silahkan sedot di sini :
    http://www.ziddu.com/download/12628547/gambar.txt.html

    Compile aja d Dev C++ gan,,,

    BalasHapus
  5. wah...terimakasih banyak ni atas pembelajarannya...mantabs...

    BalasHapus
  6. sama sama agan... ^^

    BalasHapus

powered by Blogger | WordPress by Newwpthemes