Software yang diperlukan :
1. IDLE Python 3.7 (IDLE)
Dibawah ini Import Library Pada Python 3.7 :
from OpenGL.GL import*
from OpenGL.GLU import*
from OpenGl.GLUT import*
Link Download Library Python:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyopengl
Pilih Library Python Yang Di bawah ini :
1. PyOpenGL_ accelerate-3.1.5-cp38-cp38-win32.whl
2. PyOpenGL-3.1.5-cp38-cp38-win32.whl
(Jika Python yang digunakan adalah python 32 bit, maka download library yang sesuai dengan bit pythob pada perangkat masing-masing. Begitu juga sebaliknya jika Python 64 bit).
OpenGL menyediakan sebuah fungsi yang didefinisikan oleh user dan dipanggil pada saat ada event yang bersesuaian. OpenGL dapat memonitor peralatan input ketika ada sesuatu yang terjadi, misalkan saat key press dan mouse down.
Fungsi Callback GLUT yaitu fungsi yang berjalan saat ada kejadian (event-driven). Program-program yang menggunakan window untuk input atau 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 ditekan. 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 ditekan. 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 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).
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
hijau = 0
biru = 0
merah = 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(hijau,biru,merah)
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.0,1.0,1.)
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 hijau, biru, merah
# Saat mengklik kanan warna kotak akan berubah menjadi warna biru dan merah
if button == GLUT_RIGHT_BUTTON and state == GLUT_DOWN:
if biru< 1:
hijau = 0
biru = 1
merah = 0
elif merah < 1:
hijau = 0
biru = 0
merah = 1
print("Klik Kanan ditekan ", "(", x, ",", y, ")")
# Saat mengklik kiri warna kotak akan berubah menjadi warna hijau dan hitam
elif button == GLUT_LEFT_BUTTON and state == GLUT_DOWN:
if hijau < 1:
hijau = 1
biru = 0
merah = 0
else:
hijau = 0
biru = 0
merah = 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 Hijau
if pos_x < 0 and pos_y > 0:
glClearColor(0.0, 1.0, 0.0, 1.0)
# Background Kanan Atas berubah warna menjadi Biru
if pos_x > 0 and pos_y > 0:
glClearColor(0.0,0.0,1.0,1.0)
# Background Kanan Bawah berubah warna menjadi Merah
if pos_x > 0 and pos_y < 0:
glClearColor(1.0, 0.0, 0.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("Eveng Handling Keyboard & Mouse")
glutDisplayFunc(display)
glutSpecialFunc(input_keyboard)
glutMouseFunc(input_mouse)
glutTimerFunc(50, update, 0)
init()
glutMainLoop()
main()
HASIL PROGRAM JIKA DIRUN :
Comments
Post a Comment