Halo! pada kesempatan kali ini kita akan membuat sebuah projek berdasarkan sebuah soal. Soal ini merupakan quiz untuk mata kuliah Grafika Komputer. Seperti biasa, di sini kita akan menggunakan OpenGL dengan bahasa pemrograman Python. Berikut adalah ketentuan dari projek yang harus kita buat.
 |
Soal untuk quiz Grafika Komputer
|
Sederhananya, di sini kita harus membuat sebuah objek 2D yang unik dan dapat berinteraksi dengan keyboard dan mouse. Selain itu, objek juga harus dapat melakukan perubahan warna, translasi, scalling dan rotasi dengan menggunakan perintah dari keyboard atau mouse. Hampir semua hal di atas sudah kita pelajari di blog ini, kalian bisa membacanya pada postingan sebelumnya.
Baiklah, berikut adalah source code untuk projek kali ini. Kalian dapat menemukan penjelasannya pada bagian akhir postingan ini.
Jika program di atas dijalankan, maka akan tampil hasil seperti ini.
 |
| Program ketika dijalankan |
Penjelasan
Ketentuan Pertama
Pada ketentuan nomor satu, kita diharuskan untuk membuat objek 2D yang bersifat unik. Hm ... lalu apa yang harus kita lakukan untuk membuat objek unik tersebut? Daripada sibuk memikirkan seperti apa bentuk objek unik tersebut, lebih baik kita serahkan itu semua kepada program, sehingga kita bisa fokus memikirkan hal-hal lain.
Pada source code di atas, kita membuat sebuah fungsi dengan nama get_list_of_random_vertex, fungsi ini akan mengembalikan sebuah list yang berisi kumpulan vertex atau sudut. Berapa banyak sudut yang dimiliki list tersebut? itu semua tergantung dari nilai total_vertex yang akan kita berikan. Secara default, nilainya adalah 10. Namun, pada source code di atas, list tersebut dapat menampung hingga 19 sudut. Vertex di sini maksudnya adalah koordinat kartesius (x, y).
Apa gunanya list di atas? list tersebut dibuat untuk men-generate kumpulan koordinat random, sehingga ketika kita memanggil draw_random_2d_object, maka akan tercipta sebuah objek random, artinya kita sudah berhasil menciptakan objek yang bersifat unik. Jika kalian bertanya kenapa saya membuat total_vertex nya hanya berkisar antara 10 sampai 19, itu semua karena pilihan saya sendiri, tidak ada alasan spesial, kalian dapat mengubahnya sesuka hati, tentu saja kalian harus menyesuaikan juga dengan list yang menampung kumpulan warna untuk objek tersebut.
Ketentuan Kedua
Pada ketentuan kedua, objek harus bisa berinteraksi dengan keyboard dan mouse. Kita sudah pernah membahas ini pada kesempatan sebelumnya.
Untuk mengubah warna objek, di sini kita akan menggunakan fungsi yang dapat berinteraksi dengan menggunakan mouse. Sebelum itu, coba perhatikan list_of_object_color. List ini berisi kumpulan warna yang nantinya akan digunakan untuk mengubah warna pada objek tergantung pada nilai total_vertex, tentu saja secara default adalah 10.
Selanjutnya, perhatikan fungsi get_mouse_user_input, pada fungsi ini jika user melakukan klik kiri atau kanan, maka warna objek akan diubah sesuai dengan total_vertex. Selain itu, kita juga harus melakukan akumulasi terhadap variable tersebut. Jika nilai dari total_vertex sudah lebih dari 19, maka akan dikembalikan menjadi 10. Jangan lupa panggil fungsi draw_random_2d_object untuk menampilkan objek random baru yang memiliki warna berbeda.
Kemudian, untuk melaukan translasi atau menggerakkan objek, kita akan menggunakan fungsi yang bernama get_user_special_keyboard_input. Fungsi ini akan bekerja jika kita menekan tombol UP, LEFT, RIGHT, DOWN pada keyboard. Untuk melakukan translasi, caranya mudah saja, kita hanya perlu menambah nilai koordinat saat ini. Untuk itu, di sini kita membuat sebuah fungsi lain yang bernama translasi_2d_object. Pada kasus ini, setiap kali kita melakukan translasi, maka nilai koordinat akan ditambah atau dikurangi 10.
Ketentuan Ketiga
Karena perubahan warna dan translasi sudah dilakukan, maka di sini kita akan melaukan scalling dan rotasi. Scalling dan rotasi dapat dilakukan dengan menekan tombol 1, 2, dan 3 pada keyboard, kalian bisa melihatnya pada GIF di atas.
Baik scalling atau rotasi, keduanya sudah terdapat rumus yang dapat kalian temukan dengan mudah di internet. Pada source code di atas, saya sudah menambahkannya pada bagian komentar.
Di sini kita akan menggunakan fungsi get_user_keyboard_func untuk menerima input dari keyboard user. Jika user menekan tombol 1 atau 2, maka kita akan melakukan scalling, jika menekan tombol 3 maka kita akan melakukan rotasi.
Pada dasarnya, scalling adalah mengubah ukuran objek menjadi besar atau kecil. Maka dari itu, di sini kita akan menggunakan fungsi scalling_2d_object untuk mencapai tujuan itu. Objek akan diperbesar jika koordinat saat ini dikalian dan akan mengecil jika koordinat saat ini dibagi. Pada kasus ini, nilai untuk perkalian maupun pembagian adalah 2.
Untuk melakukan rotasi kita harus menggunakan rumus yang sudah disediakan pada source code di atas. Perhatikan pada fungsi rotate_2d_object, setiap koordinat kartesius yang kita miliki akan diubah menjadi koordinat kutub atau polar, sehingga rotasi terjadi.
Ketentuan Keempat
Pada ketentuan keempat, kita diharuskan untuk menampilkan teks dinamis. Oleh karena itu kita membutuhkan fungsi drawBitmapText. Fungsi ini akan dipanggil di dalam fungsi display.
Kenapa teks untuk warna dan total vertex selalu berubah? karena nilainya berasal dari global variable yang nilainya selalu berubah sesuai dengan setiap kondisi yang terpenuhi.
Lalu kenapa teks di atasnya tidak berubah? karena itu merupakan teks statis yang berguna untuk menampilkan informasi.
Mari kita cek apakah semua ketentuan sudah terpenuhi:
- Membuat objek 2D unik ✅
- Dapat berinteraksi dengan keyboard dan mouse ✅
- Dapat melakukan perubahan warna, translasi, scalling dan rotasi ✅
- Menampilkan teks dinamis ✅
Voilà ! project sederhana kita selesai.
Seperti biasa, projek ini dapat kalian temukan pada akun GitLab saya, yaitu
rizkyramadhan28. Demikian, semoga membantu.
0 Comments