Event Handling Mouse and Keyboard Dengan Text Warna Object


Menambahkan text warna object dan background yang sedang di tampilkan.

Halo teman-teman sudah tahu kah bahwa OpenGL tidak menyediakan dukungan untuk font dan demikian pula untuk teks. OpenGL menyediakan fungsi untuk bitmap dan fungsi ini dapat dipakai untuk teks. Fungsi GLUT Bitmap berikut untuk menampilkan teks dengan model *font dan indek karakter ascii (char) :
glutBitMapCharacter(font, char)


Untuk menempatkan teks yang telah dibuat dengan glut bitmap atau dengan stroke charakter, digunakan fungsi openGL berikut:
glRasterPos{234}{sifd}(x, y, z, w)
Penjelasan {234} merujuk pada jumlah parameter fungsi salah satu dari 2,3 atau 4,begitu pula dengan {sifd} berarti tipe parameter single,integer,float,atau double.



Stroke Teks Karakter

Karakter Stroke yang dihasilkan dengan menggunakan primitive OpenGL standar, misalkan garis, poligon, dan kurva. Karakter ini dapat dimodifikasi oleh himpunan transformasi yang dapat
diterapkan pada objek geometris. Membuat stroke characters menggunakan fungsi :
glutStrokeCharacter(font, character)
Parameter font sebagai simbolik karakter menyatakan stroke font yang dipakai (GLUT_STROKE_ROMAN atau GLUT_STROKE_MONO_ROMAN). Sedangkan character adalah karakter yang dibuat.



Source code sebagai berikut :

                    from OpenGLContext import testingcontext
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

# Digunakan untuk warna kotak
merah = 0
hijau = 0
biru = 0

Digunakan untuk warna teks
teks_merah = 1
teks_hijau = 1
teks_biru = 1

Digunakan untuk teks warna pada objek
warna_objek = "Hitam"

Digunakan untuk teks warna pada background
warna_background = "Hitam"


def init():
    glClearColor(0.0, 0.0, 0.0, 1.0)
    gluOrtho2D(-500.0, 500.0, -500.0, 500.0)

def drawBitmapText(string,x,y,z) :
    glRasterPos3f(x,y,z)
    for c in string :
        glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,ord(c))

def reshape(w, h):
    glViewport(0,0,w,h)
    glMatrixMode(GL_PROJECTION) 
    glLoadIdentity()
    gluOrtho2D(0,w,h,0)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()

def drawText():
    glColor3f(teks_merah,teks_hijau,teks_biru)
    drawBitmapText("Warna",-460,-350,0)
    drawBitmapText("Objek : " + warna_objek,-460,-400,0)
    drawBitmapText("Backgorund : " + warna_background ,-460,-450,0)
   
   

Digunakan untuk membuat bentuk kotak
def kotak():
    global pos_x, pos_y
    glColor3f(merah,hijau,biru)
   
    glBegin(GL_POLYGON) #polygon biasanya digunakan untuk menggambar suatu gambar dengan segi banyak.

    # 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) #Fungsi ini akan menghapus window dan memberi warna yang telah kita definisikan sebelumnya dengan menggunakan glClearColor

    drawText();

    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()

def input_mouse(button, state, x, y):
    global merah, hijau, biru
    global warna_objek
   
    # Jika mengklik 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
            warna_objek = "Hijau"
        elif biru < 1:
            merah = 0
            hijau = 0
            biru = 1
            warna_objek = "Biru"
        print("Klik Kanan ditekan ", "(", x, ",", y, ")")
     # Jika mengklik 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
            warna_objek = "Merah"
        else:
            merah = 0
            hijau = 0
            biru = 0
            warna_objek = "Hitam"
           
        print("Klik Kiri ditekan ", "(", x, ",", y, ")")

def input_keyboard(key,x,y):
    global pos_x, pos_y
    global warna_background
    global teks_merah, teks_hijau, teks_biru

    Digunakan 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)

    Digunakan untuk mengubah warna backgorund di window
   
    #Pada  background kiri atas berubah warna menjadi merah
    if pos_x < 0 and pos_y > 0:
        glClearColor(1.0, 0.0, 0.0, 1.0)
        warna_background = "Merah"

        teks_merah = 0
        teks_hijau = 0
        teks_biru = 0

    #Pada background kanan atas berubah warna menjadi warna hijau
    if pos_x > 0 and pos_y > 0:
        glClearColor(0.0, 1.0, 0.0, 1.0)
        warna_background = "Hijau"

        teks_merah = 0
        teks_hijau = 0
        teks_biru = 0

    # Pada background kanan bawah berubah warna menjadi warna biru
    if pos_x > 0 and pos_y < 0:
        glClearColor(0.0,0.0,1.0,1.0)
        warna_background = "Biru"

        teks_merah = 1
        teks_hijau = 1
        teks_biru = 1

    # Pada background kiri bawah berubah warna menjadi warna hitam
    if pos_x < 0 and pos_y < 0:
        glClearColor(0.0,0.0,0.0,1.0)
        warna_background = "Hitam"

        teks_merah = 1
        teks_hijau = 1
        teks_biru = 1
       

   

def update(value):
    glutPostRedisplay() #Digunakan untuk mengirimkan perintah saat mengaktifkan display secara berkala (looping).
    glutTimerFunc(10,update,0)

def main():
    glutInit(sys.argv)
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB) #Fungsi tersebut meminta window yang bersifat double buffered, dengan warna RGB.
    glutInitWindowSize(500,500) #digunakan untuk menentukan ukuran window.
    glutInitWindowPosition(100,100) #digunakan untuk menentukan letak posisi sebuah window
    glutCreateWindow("Event handling Mouse & Keyboard Font & Text") #digunakan untuk membuat window.

    glutDisplayFunc(display) # digunakan untuk memanggil fungsi display atau method untuk membuat objek primitive.


    glutSpecialFunc(input_keyboard)
    glutMouseFunc(input_mouse)

    glutTimerFunc(50, update, 0) #digunakan untuk memanggil fungsi animate.

   

    init()
    glutMainLoop() #merupakan event yang menandakan pemrosesan glut terjadi.
   
main()


Berikut Outputnya :







Terimakasih teman-teman semoga bermanfaat bagi kita semua.

Komentar