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.
Fungsi Callback
GLUT adalah 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)
Fungsi ini mencatat apa yang terjadi
ketika sebuah tombol keyboard di tekan. 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.
glutKeyboardUpFunc(nama_fungsi)
def
nama_fungsi(key, x, y)
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)
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)
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)
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)
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)
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).
Tugas Individu 12
1. Buatlah
sebuah persegi empat yang dapat digerakan menggunakan tombol keyboard (keyup,
keydown, keyright, key left).
2. Gunakan
tombol mouse kiri dan kanan untuk merubah warna persegi empat tersebut.
3. Saat
persegi empat digerakan pada posisi tertentu buatlah agar warna background
dapat berubah-ubah.
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 Kotak
red
= 0
green
= 0
blue
= 0
def
init():
glClearColor(0.0, 0.0, 0.0, 1.0)
gluOrtho2D(-500.0, 500.0, -500.0, 500.0)
def
kotak():
global pos_x, pos_y
glColor3f(red, green, blue)
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()
def
display():
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(1.,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()
def
input_mouse(button, state, x, y):
global red, green, blue
if button == GLUT_RIGHT_BUTTON and state ==
GLUT_DOWN:
if green < 1:
red = 0
green = 1
blue = 0
elif blue < 1:
red = 0
green = 0
blue = 1
print("Klik Kanan Ditekan ",
"(", x, ",", y, ")")
elif button == GLUT_LEFT_BUTTON and state
== GLUT_DOWN:
if red < 1:
red = 1
green = 0
blue = 0
else:
red = 0
green = 0
blue = 0
print("Klik Kiri Ditekan ",
"(", x, ",", y, ")")
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")
glutDisplayFunc(display)
glutSpecialFunc(input_keyboard)
glutMouseFunc(input_mouse)
glutTimerFunc(50, update, 0)
init()
glutMainLoop()
main()
Tidak ada komentar:
Posting Komentar