Skip to main content

Membuat Lingkaran Tak Beraturan Menggunakan PyOpenGL

Library Yang Digunakan

  • PyOpenGL_accelerate-3.1.5
  • OpenGLContext 2.3.0
  • PyVRML97 2.3.1
  1. Tambahkan Library OpenGLContext
  2. from OpenGL.GL import *
    from OpenGL.GLU import *
    from OpenGL.GLUT import *
  3. Tambahkan variable global untuk mengatur warna pada teks serta tulisan
  4. # Koordinat x dan y untuk posisi kotak
    pos_x = 0
    pos_y = 0

    # Warna Kotak
    red = 0
    green = 0
    blue = 0

    # Warna Teks
    txtred = 1
    txtgreen = 1
    txtblue = 1

    # Teks Warna Objek
    warna_objek = "Hitam"

    # Teks Warna Background
    warna_background = "Hitam"
  5. Tambahkan fungsi drawBitmap Text(), reshape(), dan drawText untuk memproyeksikan teks pada window
  6. 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 drawText():
        glColor3f(txtred,txtgreen,txtblue)
        drawBitmapText("Warna",-460,-350,0)
        drawBitmapText("Objek : " + warna_objek,-460,-400,0)
        drawBitmapText("Background : " + warna_background ,-460,-450,0)
  7. Membuat fungsi untuk membuat lingkaran
  8. # Membuat bentuk lingkaran
    def segitiga():
        global pos_x, pos_y
        glColor3f(red,green,blue)

        glBegin(GL_LINE_LOOP)
        # 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()
  9. Membuat fungsi display untuk melakukan perulangan lingkaran sehingga membentuk lingkaran tak berarturan
  10. def display():
        glClear(GL_COLOR_BUFFER_BIT)

        glColor3f(1.0,0.7,0.0)
        for i in range(0,19):
            s = 20
            glRotatef(s, 0.0, 0.0,1.0)
            segitiga()
            drawText();
           
        glFlush()
  11. Membuat fungsi input mouse untuk mengubah objek sesuai dengan klik yang ditekan
  12. def input_mouse(button, state, x, y):
        global red, green, blue
        global warna_objek
     
        # Klik kanan = objek merah hijau/biru
        if button == GLUT_RIGHT_BUTTON and state == GLUT_DOWN:
            if green < 1:
                red = 0
                green = 1
                blue = 0
                warna_objek = "Hijau"
            elif blue < 1:
                red = 0
                green = 0
                blue = 1
                warna_objek = "Biru"
            print("Klik Kanan ditekan ", "(", x, ",", y, ")")
        # Klik kiri = objek merah hitam/merah
        elif button == GLUT_LEFT_BUTTON and state == GLUT_DOWN:
            if red < 1:
                red = 1
                green = 0
                blue = 0
                warna_objek = "Merah"
            else:
                red = 0
                green = 0
                blue = 0
                warna_objek = "Hitam"
            print("Klik Kiri ditekan ", "(", x, ",", y, ")")
  13. Membuat fungsi untuk input keyboard
  14. def input_keyboard(key,x,y):
        global pos_x, pos_y
        global warna_background
        global txtred, txtgreen, txtblue
  15. Code untuk membuat posisi kotak berubah
  16.  # Untuk mengubah posisi objek
        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)
  17. Membuat warna background window berbeda tiap kotak
  18. # Ubah warna bg 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)
            warna_background = "Merah"
            txtred = 0
            txtgreen = 0
            txtblue = 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)
            warna_background = "Hitam"
            txtred = 1
            txtgreen = 1
            txtblue = 1

        # Background Kanan Atas berubah warna menjadi Hijau
        if pos_x > 0 and pos_y > 0:
            glClearColor(0.0, 1.0, 0.0, 1.0)
            warna_background = "Hijau"
            txtred = 0
            txtgreen = 0
            txtblue = 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)
            warna_background = "Biru"
            txtred = 1
            txtgreen = 1
            txtblue = 1
  19. Membuat fungsi update
  20. def update(value):
        glutPostRedisplay()
        glutTimerFunc(10,update,0)
  21. membuat fungsi main
  22. def main():
        glutInit(sys.argv)
        glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB)
        glutInitWindowSize(500,500)
        glutInitWindowPosition(100,100)
        glutCreateWindow("Quiz_17102036")
        glutDisplayFunc(display)
        glutSpecialFunc(input_keyboard)
        glutMouseFunc(input_mouse)
        glutTimerFunc(50, update, 0)
        init()
        glutMainLoop()
    main()
OUTPUT JIKA DIRUN



Comments

Popular posts from this blog

Membentuk bentuk Piramida 3D menggunakan PyOpenGL

Pada postingan ini saya akan membuat bentuk piramida 3D menggunakan PyOpenGL Source Code: 1. Buat fungsi import modul from OpenGL.GL import* from OpenGL.GLU import:* from OpenGL.GLUT import* 2. Membuat variabel untuk mengatur sisi piramida_a dan sisi piramida_b. Kemudian mengatur latar belakang warna dan membuat ordo 2D piramida_a = 0 piramida_b = 0       def init():     glClearColor(0.,0.,0.,0.)     glEnable(GL_DEPTH_TEST)     gluOrtho2D(-20.0, 20.0, -20.0, 20.0) 3. Membuat fungsi myDisplay untuk membuat beberapa bagian piramid yaitu bagian bawah, bagian depan, bagian kiri, bagian kanan dan bagian belakang def myDisplay():     global piramida_a, piramida_b     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)     glMatrixMode(GL_MODELVIEW)     glLoadIdentity()     glTranslatef(0, 0, -5.0);     glRotatef( piramida_a, 1.0, 0.0, 0.0 )   ...

Event Handling Keyboard & Mouse dengan PyOpenGl

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 be...

Membuat bentuk Matahari dengan PyOpenGL

Software yang digunakan: IDLE Pyhton 3.8.2 (IDLE) SOURCE CODE : from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * def init():     glClearColor(0.0, 0.0, 0.0, 0.0)     gluOrtho2D(-500.0, 500.0, -500.0, 500.0) # untuk membuat matahari kita akan gunakan bentuk segitiga yang di rotaasi sebanyak 18 kali dengan jarak sudut tiap rotasi sebanyak 20 derajat. def plotpoints():     glColor3f(1.,1.0,0.)     for i in range(0,19):         s = 20         glRotatef(s, 0.0, 0.0,1.0)         segitiga()            glFlush() # fungsi untuk membuat bentuk segitiga def segitiga():     glBegin(GL_TRIANGLES)     glVertex2f(-50.0,0.0)     glVertex2f(50.0,0.0)     glVertex2f(0.0,200.0)     glEnd() NOTE: Jika ingin bentuk segitiga bergaris gunakan GL_LINE_LOOP Jika ingin bentuk segitiga yang ada isi...