Hai teman-teman, kali ini saya akan memberi contoh penerapan
Event Handling pada Mouse dan Keyboard. Langsung simak saja ya.
Event Handling pada Mouse dan Keyboard. Langsung simak saja ya.
OpenGL menyediakan fungsi yang didefinisikan oleh user dan dipanggil pada saat ada event yang bersesuaian. OpenGL memonitor peralatan input, ketika ada sesuatu yang terjadi,misalkan saat mouse down, key press, dan lain-lain.
Pada OpenGL terdapat fungsi Callback GLUT, yaitu fungsi yang berjalan saat ada kejadian (event-driven). Program-program yang menggunakan window untuk input/output,menunggu sampai ada kejadian dan kemudian mengeksekusi beberapa fungsi yang didefinisikan sebelumnya berdasarkan input dari user. Kejadian yang dimaksud : key press, mouse button press dan release, window resize, dan lain-lain. Program OpenGL yang dibuat akan berjalan tak terbatas (infinite loop).
EVENT KEYBOARD
glutKeyboardFunc(nama_fungsi)
def nama_fungsi(key, x, y)
def nama_fungsi(key, x, y)
Fungsi ini mencatat apa yang terjadi ketika sebuah tombol keyboard di tekan. Parameter key mengembalikan nilai karakter ascii dari tombol keyboard yang ditekan. Koordinat x,y adalah posisi pointer mouse saat keyboard ditekan,yang diukur dari pojok kiri atas window. x dan y menyatakan lokasi (di window : koordinat layar) dari pointer ketika kejadian key ditekan.
Fungsi ini mencatat apa yang terjadi ketika sebuah tombol keyboard selesai di tekan. Parameter key mengembalikan nilai karakter ascii dari tombol keyboard yang ditekan. Koordinat x,y adalah posisi pointer mouse saat keyboard ditekan,yang diukur dari pojok kiri atas window. x dan y menyatakan lokasi (di window : koordinat layar) dari pointer ketika kejadian key ditekan.
glutSpecialFunc(nama_fungsi)
def nama_fungsi(key, x, y)
def nama_fungsi(key, x, y)
Fungsi ini mencatat apa yang terjadi ketika sebuah tombol keyboard khusus di tekan. Parameter key mengembalikan nilai karakter ascii dari tombol keyboard yang ditekan. Koordinat x,y adalah posisi pointer mouse saat keyboard ditekan,yang diukur dari pojok kiri atas window. x dan y menyatakan lokasi (di window : koordinat layar) dari pointer ketika kejadian key ditekan.
EVENT MOUSE
glutMouseFunc(nama_fungsi)
def nama_fungsi(button, state, x, y)
def nama_fungsi(button, state, x, y)
Fungsi ini mencatat apa yang terjadi ketika sebuah tombol mouse di tekan. Parameter button mengembalikan nilai tombol mouse yang di tekan, nilai tersebut adalah (GLUT_LEFT_BUTTON,GLUT_RIGHT_BUTTON, GLUT_MIDDLE_BUTTON). State mengembalikan nilai selesainya tombol mouse ditekan, nilai tersebut adalah (GLUT_UP, GLUT_DOWN). Variabel x,y adalah posisi pointer mouse saat tombol mouse ditekan, yang diukur dari pojok kiri atas window.
glutMotionFunc(nama_fungsi)
def nama_fungsi(x, y)
def nama_fungsi(x, y)
Fungsi ini mencatat apa yang terjadi ketika sebuah tombol mouse di tekan secara bertahan dan melakukan pergerakan (Drag). Variabel x,y adalah posisi pointer mouse saat tombol mouse ditekan, yang diukur dari pojok kiri atas window.
glutPassiveMotionFunc(nama_fungsi)
def nama_fungsi(x, y)
def nama_fungsi(x, y)
Fungsi ini mencatat apa yang terjadi ketika sebuah cursor mouse di digerakan di dalam area window. Variabel x,y adalah posisi pointer mouse saat tombol mouse ditekan, yang diukur dari pojok kiri atas window.
glutEntryFunc(nama_fungsi)
def nama_fungsi(State)
def nama_fungsi(State)
Fungsi ini mencatat apa yang terjadi ketika sebuah cursor mouse meninggalkan atau memasuki area window. Variabel State adalah kondisi ketika sudah meninggalkan atau memasuki area window, variabel tersebut memiliki nilai (GLUT_ENTERED, GLUT_LEFT).
Contoh Source Code :
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
# Koordinat x dan y untuk posisi kotak
pos_x = 0
pos_y = 0
# Warna otak
merah = 0
hijau = 0
biru = 0
def init():
glClearColor(0.0, 0.0, 0.0, 1.0)
gluOrtho2D(-500.0, 500.0, -500.0, 500.0)
# Membuat bentuk kotak
def kotak():
global pos_x, pos_y
glColor3f(merah,hijau,biru)
glBegin(GL_POLYGON)
# Kiri Atas
glVertex2f(-50 + pos_x,-50 + pos_y)
# Kanan Atas
glVertex2f(50 + pos_x,-50 + pos_y)
# Kanan Bawah
glVertex2f(50 + pos_x,50 + pos_y)
# Kiri Bawah
glVertex2f(-50 + pos_x,50 + pos_y)
glEnd()
#Mengimplementasikan bentuk kotak ke layar
def display():
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(1.0,1.0,1.0)
glBegin(GL_LINES)
glVertex2f(-500.0, 0.0)
glVertex2f(500.0, 0.0)
glVertex2f(0.0, 500.0)
glVertex2f(0.0, -500.0)
glEnd()
glPushMatrix()
kotak()
glPopMatrix()
glFlush()
#Mengatur perubahan yang terjadi pada mouse
def input_mouse(button, state, x, y):
global merah, hijau, biru
#Saat klik kanan, warna kotak akan berubah menjadi warna hijau dan biru
if button == GLUT_RIGHT_BUTTON and state == GLUT_DOWN:
if hijau < 1:
merah = 0
hijau = 1
biru = 0
elif biru < 1:
merah = 0
hijau = 0
biru = 1
print("Klik Kanan ditekan ", "(", x, ",", y, ")")
#Saat klik kiri, warna kotak akan berubah menjadi warna merah dan hitam
elif button == GLUT_LEFT_BUTTON and state == GLUT_DOWN:
if merah < 1:
merah = 1
hijau = 0
biru = 0
else:
merah = 0
hijau = 0
biru = 0
print("Klik Kiri ditekan ", "(", x, ",", y, ")")
#Mengatur pergerakan pada kotak menggunakan keyboard
def input_keyboard(key,x,y):
global pos_x, pos_y
#Untuk mengubah posisi kotak
if key == GLUT_KEY_UP:
pos_y += 5
print("Tombol Atas ditekan ", "x : ", pos_x, " y : ", pos_y)
elif key == GLUT_KEY_DOWN:
pos_y -= 5
print("Tombol Bawah ditekan ", "x : ", pos_x, " y : ", pos_y)
elif key == GLUT_KEY_RIGHT:
pos_x += 5
print("Tombol Kanan ditekan ", "x : ", pos_x, " y : ", pos_y)
elif key == GLUT_KEY_LEFT:
pos_x -= 5
print("Tombol Kiri ditekan ", "x : ", pos_x, " y : ", pos_y)
# Untuk Mengubah Warna backgorund window,
# Background Kiri Atas berubah warna menjadi Merah
if pos_x < 0 and pos_y > 0:
glClearColor(1.0, 0.0, 0.0, 1.0)
# Background Kanan Atas berubah warna menjadi Hijau
if pos_x > 0 and pos_y > 0:
glClearColor(0.0, 1.0, 0.0, 1.0)
# Background Kanan Bawah berubah warna menjadi Biru
if pos_x > 0 and pos_y < 0:
glClearColor(0.0,0.0,1.0,1.0)
# Background Kiri Bawah berubah warna menjadi Hitam
if pos_x < 0 and pos_y < 0:
glClearColor(0.0,0.0,0.0,1.0)
def update(value):
glutPostRedisplay()
glutTimerFunc(10,update,0)
def main():
glutInit(sys.argv)
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB)
glutInitWindowSize(500,500)
glutInitWindowPosition(100,100)
glutCreateWindow("Event handling Mouse & Keyboard")
glutDisplayFunc(display)
glutSpecialFunc(input_keyboard)
glutMouseFunc(input_mouse)
glutTimerFunc(50, update, 0)
init()
glutMainLoop()
main()
Saat program dijalankan, maka kotak bisa digerakan dengan mengunakan tombol pada keyboard (keyup, keydown, keyleft, dan keyright). Jika kotak digerakan ke-arah kanan atas, maka background akan berubah warna menjadi hijau. Jika ke-arah kiri atas, background akan berubah menjadi merah. Jika ke-kiri bawah, background akan berubah menjadi hitam, dan jika ke kanan bawah, bakground akan menjadi biru.
Saat menekan klik kanan pada mouse, warna kotak akan berubah menjadi warna hijau dan biru. Sedangkan, jika menekan klik kiri, maka warna kotak akan berubah menjadi warna merah dan hitam.
Output :
Sekian pembahasan kali ini, terima kasih dan sampai jumpa.
Komentar
Posting Komentar