Formulir Kontak

 

Quiz Object 2D dengan OpenGL [PYTHON]

Modul yang harus digunakan :
  • OpenGLContext
  • PyOpenGL
  • PyVRML97
  • pillow

Source Code :

from OpenGLContext import testingcontext


from random import randrange


from OpenGL.GL import *


from OpenGL.GLU import *


from OpenGL.GLUT import *

def init():


    glClearColor(0.00.00.00.0


    gluOrtho2D(-10.0100.0, -100.010.0)




def ploting():


    glClear(GL_COLOR_BUFFER_BIT)


    # Cerobong Atas


    glColor3f(0.50.50.5)


    glBegin(GL_POLYGON)


    glVertex2f(15.5, -5.0)


    glVertex2f(24.0, -5.0)


    glVertex2f(24.0, -3.5)


    glVertex2f(9.0, -3.5)


    glVertex2f(9.0, -5.0)


    glEnd()


    glFlush()


    # Badan Cerobong 


    glColor3f(1.00.00.0)


    glBegin(GL_POLYGON)


    glVertex2f(12.5, -20.0)


    glVertex2f(12.5, -5.0)


    glVertex2f(20.0, -5.0)


    glVertex2f(20.0, -13.0)


    glEnd()


    glFlush()


    # Atap Rumah


    glColor3f(1.00.50.6)


    glBegin(GL_LINE_STRIP)


    glVertex2f(5.0, -30.0)


    glVertex2f(2.0, -30.0)


    glVertex2f(40.06.0)


    glVertex2f(78.0, -30.0)


    glVertex2f(75.0,-30.0)


    glEnd()


    glFlush()


    # Bangunan


    glColor3f(0.10.10.1)


    glBegin(GL_POLYGON)


    glVertex2f(5.0, -30.0)


    glVertex2f(40.02.0)


    glVertex2f(75.0, -30.0)


    glVertex2f(75.0, -70.0)


    glVertex2f(5.0,-70.0)


    glVertex2f(5.0,-30.0)


    glEnd()


    glFlush()


    # Jendela Kiri


    glColor3f(1.00.50.5)


    glBegin(GL_LINE_STRIP)


    glVertex2f(15.0, -47.0)


    glVertex2f(25.0, -47.0)


    glVertex2f(25.0, -57.0)


    glVertex2f(15.0, -57.0)


    glVertex2f(15.0,-47.0)


    glEnd()


    glFlush()


    # Jendela Kiri segi


    glColor3f(1.01.01.0)


    glBegin(GL_LINE_STRIP)


    glVertex2f(20.0, -47.0)


    glVertex2f(20.0, -50.0)


    glVertex2f(25.0, -50.0)


    glEnd()


    glFlush()


    # Jendela Kiri bawah


    glColor3f(1.01.01.0)


    glBegin(GL_LINE_STRIP)


    glVertex2f(20.0, -50.0)


    glVertex2f(20.0, -57.0)


    glEnd()


    glFlush()


    # Jendela Atas


    glColor3f(1.00.250.6)


    glBegin(GL_LINE_STRIP)


    glVertex2f(35.0, -20.0)


    glVertex2f(45.0, -20.0)


    glVertex2f(45.0, -30.0)


    glVertex2f(35.0, -30.0)


    glVertex2f(35.0,-20.0)


    glEnd()


    glFlush()


    # Jendela Atas segi


    glColor3f(1.01.01.0)


    glBegin(GL_LINE_STRIP)


    glVertex2f(40.0, -20.0)


    glVertex2f(40.0, -23.0)


    glVertex2f(45.0, -23.0)


    glEnd()


    glFlush()


    # Jendela Atas bawah


    glColor3f(1.01.01.0)


    glBegin(GL_LINE_STRIP)


    glVertex2f(40.0, -23.0)


    glVertex2f(40.0, -30.0)


    glEnd()


    glFlush()


    # Jendela Kanan


    glColor3f(1.00.00.0)


    glBegin(GL_LINE_STRIP)


    glVertex2f(55.0, -47.0)


    glVertex2f(65.0, -47.0)


    glVertex2f(65.0, -57.0)


    glVertex2f(55.0, -57.0)


    glVertex2f(55.0,-47.0)


    glEnd()


    glFlush()


    # Jendela Kanan segi


    glColor3f(1.01.01.0)


    glBegin(GL_LINE_STRIP)


    glVertex2f(60.0, -47.0)


    glVertex2f(60.0, -50.0)


    glVertex2f(65.0, -50.0)


    glEnd()


    glFlush()


    # Jendela Kanan bawah


    glColor3f(1.01.01.0)


    glBegin(GL_LINE_STRIP)


    glVertex2f(60.0, -50.0)


    glVertex2f(60.0, -57.0)


    glEnd()


    glFlush()


    # Bagian Atas Pintu 1


    glColor3f(1.00.50.25)


    glBegin(GL_POLYGON)


    glVertex2f(36.0, -44.0)


    glVertex2f(44.0, -44.0)


    glVertex2f(44.0, -46.0)


    glVertex2f(36.0, -46.0)


    glVertex2f(36.0,-44.0)


    glEnd()


    glFlush()


    # Bagian Atas Pintu 2


    glColor3f(1.00.50.9)


    glBegin(GL_POLYGON)


    glVertex2f(35.0, -46.0)


    glVertex2f(45.0, -46.0)


    glVertex2f(45.0, -48.0)


    glVertex2f(35.0, -48.0)


    glVertex2f(35.0,-46.0)


    glEnd()


    glFlush()


    # Bagian Atas Pintu 3


    glColor3f(1.00.50.5)


    glBegin(GL_POLYGON)


    glVertex2f(33.0, -48.0)


    glVertex2f(47.0, -48.0)


    glVertex2f(47.0, -50.0)


    glVertex2f(33.0, -50.0)


    glVertex2f(33.0,-48.0)


    glEnd()


    glFlush()


    # Pintu


    glColor3f(1.00.00.0)


    glBegin(GL_POLYGON)


    glVertex2f(35.0, -50.0)


    glVertex2f(45.0, -50.0)


    glVertex2f(45.0, -70.0)


    glVertex2f(35.0, -70.0)


    glVertex2f(35.0,-50.0)


    glEnd()


    glFlush()


    # Pondasi Bawah


    glColor3f(0.50.50.5)


    glBegin(GL_POLYGON)


    glVertex2f(2.0, -70.0)


    glVertex2f(78.0, -70.0)


    glVertex2f(78.0, -73.0)


    glVertex2f(2.0, -73.0)


    glVertex2f(2.0,-70.0)


    glEnd()


    glFlush()


    # Tangga Pertama


    glColor3f(1.01.01.0)


    glBegin(GL_POLYGON)


    glVertex2f(34.0, -69.0)


    glVertex2f(46.0, -69.0)


    glVertex2f(46.0, -70.5)


    glVertex2f(34.0, -70.5)


    glVertex2f(34.0,-69.0)


    glEnd()


    glFlush()


    # Tangga kedua


    glColor3f(1.00.00.0)


    glBegin(GL_POLYGON)


    glVertex2f(33.0, -70.5)


    glVertex2f(47.0, -70.5)


    glVertex2f(47.0, -72.0)


    glVertex2f(33.0, -72.0)


    glVertex2f(33.0,-70.5)


    glEnd()


    glFlush()


    # Tangga ketiga


    glColor3f(1.01.01.0)


    glBegin(GL_POLYGON)


    glVertex2f(32.0, -72)


    glVertex2f(48.0, -72)


    glVertex2f(48.0, -73.5)


    glVertex2f(32.0, -73.5)


    glVertex2f(32.0,-72)


    glEnd()


    glFlush()


    # Tangga C 1


    glColor3f(1.01.01.0)


    glBegin(GL_LINE_STRIP)


    glVertex2f(32.0, -72)


    glVertex2f(48.0, -72)


    glVertex2f(48.0, -73.5)


    glVertex2f(32.0, -73.5)


    glVertex2f(32.0,-72)


    glEnd()


    glFlush()

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

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

# Fungsi untuk mendapatkan callback event handling Pada Mouse
def input_mouse(buttonstatexy):
    global merah, hijau, biru
    global bg_red, bg_green, bg_blue
    global light_red, light_green, light_blue
    global kt_red, kt_green, kt_blue

    
# Fungsi untuk mendapatkan callback event handling Pada Keyboard Tombol khusus
def input_keyboard_special_func(key,x,y):
    global pos_x, pos_y
    global warna_background
    global teks_merah, teks_hijau, teks_biru
 
    # Untuk mengubah posisi Rumahku dengan menekan
    # Tombol Key UP, Key DOWN, Key RIGHT, Key LEFT
    # saat ditekan nilai pada variable pos_x dan pos_y
    # akan berubah secara increment dan decremant dengan pertambahan 20
    if key == GLUT_KEY_UP:
        pos_y += 20
        print("Tombol Atas ditekan ""x : ", pos_x, " y : ", pos_y)
        print("Koor ""x : ", koordinat_x, " y : ", koordinat_y)
    elif key == GLUT_KEY_DOWN:
        pos_y -= 20
        print("Tombol Bawah ditekan ""x : ", pos_x, " y : ", pos_y)
        print("Koor ""x : ", koordinat_x, " y : ", koordinat_y)
    elif key == GLUT_KEY_RIGHT:
        pos_x += 20
        print("Tombol Kanan ditekan ""x : ", pos_x, " y : ", pos_y)
        print("Koor ""x : ", koordinat_x, " y : ", koordinat_y)
    elif key == GLUT_KEY_LEFT:
        pos_x -= 20
        print("Tombol Kiri ditekan ""x : ", pos_x, " y : ", pos_y)
        print("Koor ""x : ", koordinat_x, " y : ", koordinat_y)

# Fungsi untuk mendapatkan callback event handling Pada Keyboard Tombol yang akan mengembalikan nilai ascii
def input_keyboard_func(keyxy):

    global zoom_x, zoom_y
    global rotation

    dk = key.decode("utf-8")

    # Untuk mengatur Zoom In & Out pada gambar Tekan tombol a / s
    # Maka variable zoom_x dan zoom_y
    # akan berubah secara increment dan decrement
    # dengan pertamban 0.1
    if dk == 'a' or dk == 'A':
        zoom_x += 0.1
        zoom_y += 0.1
    elif dk == 's' or dk == 'S':
        zoom_x -= 0.1
        zoom_y -= 0.1

    # Untuk mengatur Rotasi ke kanan / kiri pada gambar Tekan tombol z / x
    # Maka variable rotation akan berubah secara increment dan decrement
    # dengan pertamban 10
    elif dk == 'z' or dk == 'Z':
        rotation -= 10
        print(rotation)
    elif dk == 'x' or dk == 'X':
        rotation += 10
        print(rotation)
    

def update(value):
    global koordinat_x, koordinat_y, pos_x, pos_y
    global angka
    global kt
    global kt_red, kt_green, kt_blue
    
    # Untuk mengatur posisi kotak
    # Secara Randaom
    koordinat_x = randrange(-800,100)
    koordinat_y = randrange(-100,800)

    # Untuk mendapatkan Poin
    # atau nilai koor_x, koor_y sama dengan pos_x, pos_y
  

# Fungsi untuk menampilkan Teks Pada Window
def drawText():
    glColor3f(teks_merah,teks_hijau,teks_biru)
    # Petunjuk Pemakaia
    drawBitmapText("GAMBAR : ",-460,440,0)
    drawBitmapText("Rumahku",-460,400,0)
    # Kontrol
    drawBitmapText("KONTROL :",-460,-200,0)
    drawBitmapText("- Untuk Scaling Tekan tombol => a/s a = zoom in, s = zoom out",-460,-240,0)
    drawBitmapText("- Untuk rotasi tekan tombol => z/x z = searah jarum jam, x = berlawanan",-460,-280,0)
    #INFORMASI
    drawBitmapText("INFORMASI : " ,-460,-320,0)
    drawBitmapText("-> Ganti Warna Klik Mouse Kanan dan Kiri",-460,-360,0)
    drawBitmapText("-> Untuk Menjalankan Objek Tekan Keyboard => KEY UP, KEY DOWN, KEY RIGHT, KEY LEFT " ,-460,-400,0)
    drawBitmapText("-> Angka => " + str(angka),-460,-440,0)
   

# Fungsi untuk menampilkan semua bentuk atau objek pada Window
def display():
    glClear(GL_COLOR_BUFFER_BIT)
    # Deklarasi Sektsa Rumahku
    glPushMatrix()
    shape()
    glPopMatrix()
    # Deklarasi Bentuk Kotak
    kotak()
    # Deklarasi untuk Teks
    drawText()

    glFlush()




def main():

    glutInit(sys.argv)
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB)
    glutInitWindowSize(900,600)
    glutInitWindowPosition(100,100)
    glutCreateWindow(" Pertemuan 10 . Quiz - Rumahku")

    glutSpecialFunc(input_keyboard_special_func)
    glutKeyboardFunc(input_keyboard_func)
    glutMouseFunc(input_mouse)

    glutTimerFunc(50, update, 0)
glutDisplayFunc(ploting)

    init()
    glutMainLoop()



main() 

Total comment

Author

kangmasrizqi

0   komentar

Posting Komentar

Cancel Reply