Langsung ke konten utama

Membuat Piramida 3D Menggunakan PyOpenGL

Bagaimana sih cara membuat piramida 3 dimensi? Langsung saja ya kita bahas.

Sebuah piramida terdiri dari : 1 alas, 4 sisi, dan 5 sudut. Berikut langkah-langkahnya :
1. Buat fungsi rgb() untuk memudahkan konversi format dari warna rgb ke format warna PyOpenGL.
# Fungsi konversi rgb
def rgb(n):
    return n / 255.0
2. Buat fungsi pivot() untuk tampilan garis pivot x,y,z untuk mempermudah dalam membuat bentuk 3D.
# Fungsi Pivot
def pivot():
    glBegin(GL_LINES)
    glColor3f(1,0,0) #merah x
    glVertex3f(10,0,0)
    glVertex3f(-10,0,0)
    glColor3f(0,1,0) #hijau y
    glVertex3f(0,10,0)
    glVertex3f(0,-10,0)
    glColor3f(0,0,1) #biru x
    glVertex3f(0,0,10)
    glVertex3f(0,-0,-10)    
    glEnd()
3. Buat fungsi piramida() untuk membuat bentuk piramida 3D.
# Bentuk Piramida 3D
def piramida():
    # Depan
    glBegin(GL_LINE_STRIP)
    glColor3f(rgb(231),rgb(1),rgb(10))
    glVertex3f(-1.0, -1.0, 1.0)
    glVertex3f(1.0, -1.0, 1.0)
    glVertex3f(0.0, 1.0, 0.0) # Point
    glVertex3f(-1.0, -1.0, 1.0)
    glEnd()

    # Belakang
    glBegin(GL_LINE_STRIP)
    glColor3f(rgb(231),rgb(1),rgb(10))
    glVertex3f(-1.0, -1.0, -1.0)
    glVertex3f(1.0, -1.0, -1.0)
    glVertex3f(0.0, 1.0, 0.0) # Point
    glVertex3f(-1.0, -1.0, -1.0)
    glEnd()

    # Kanan
    glBegin(GL_LINE_STRIP)
    glColor3f(rgb(166),rgb(0),rgb(0))
    glVertex3f(1.0, -1.0, 1.0)
    glVertex3f(1.0, -1.0, -1.0)
    glVertex3f(0.0, 1.0, 0.0) # Point
    glVertex3f(1.0, -1.0, 1.0)
    glEnd()

    # Kiri
    glBegin(GL_LINE_STRIP)
    glColor3f(rgb(166),rgb(0),rgb(0))
    glVertex3f(-1.0, -1.0, 1.0)
    glVertex3f(-1.0, -1.0, -1.0)
    glVertex3f(0.0, 1.0, 0.0) # Point
    glVertex3f(-1.0, -1.0, 1.0)
    glEnd()
4. Deklarasikan fungsi pivot() dan piramida() dalam fungsi mDisplay() agar bisa ditampilkan di window.
def myDisplay():
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity() 

    glTranslatef(0, 0, -7.0)
    glRotatef(45.0, 0.0, 1.0, 0.0)

    pivot()

    piramida()

    glutSwapBuffers()
    glFlush()
5.  Untuk membuat viewport, buatlah fungsi reshape()
def reshape(width, height):  
   aspect = width / height
   glViewport(0, 0, width, height)
   glMatrixMode(GL_PROJECTION) 
   glLoadIdentity()            
   gluPerspective(45.0, aspect, 0.1, 100.0)

Secara keseluruhan, source code akan seperti ini :
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *

        
def init():
    glClearColor(0.,0.,0.,0.)
    glEnable(GL_DEPTH_TEST)
    gluOrtho2D(-20.0, 20.0, -20.0, 20.0)

# Fungsi konversi rgb
def rgb(n):
    return n / 255.0

# Fungsi Pivot
def pivot():
    glBegin(GL_LINES)
    glColor3f(1,0,0) #merah x
    glVertex3f(10,0,0)
    glVertex3f(-10,0,0)
    glColor3f(0,1,0) #hijau y
    glVertex3f(0,10,0)
    glVertex3f(0,-10,0)
    glColor3f(0,0,1) #biru x
    glVertex3f(0,0,10)
    glVertex3f(0,-0,-10)    
    glEnd()

# Bentuk Piramida 3D
def piramida():
    # Depan
    glBegin(GL_POLYGON)
    glColor3f(rgb(231),rgb(1),rgb(10))
    glVertex3f(-1.0, -1.0, 1.0)
    glVertex3f(1.0, -1.0, 1.0)
    glVertex3f(0.0, 1.0, 0.0) # Point
    glVertex3f(-1.0, -1.0, 1.0)
    glEnd()

    # Belakang
    glBegin(GL_POLYGON)
    glColor3f(rgb(231),rgb(1),rgb(10))
    glVertex3f(-1.0, -1.0, -1.0)
    glVertex3f(1.0, -1.0, -1.0)
    glVertex3f(0.0, 1.0, 0.0) # Point
    glVertex3f(-1.0, -1.0, -1.0)
    glEnd()

    # Kanan
    glBegin(GL_POLYGON)
    glColor3f(rgb(166),rgb(0),rgb(0))
    glVertex3f(1.0, -1.0, 1.0)
    glVertex3f(1.0, -1.0, -1.0)
    glVertex3f(0.0, 1.0, 0.0) # Point
    glVertex3f(1.0, -1.0, 1.0)
    glEnd()

    # Kiri
    glBegin(GL_POLYGON)
    glColor3f(rgb(166),rgb(0),rgb(0))
    glVertex3f(-1.0, -1.0, 1.0)
    glVertex3f(-1.0, -1.0, -1.0)
    glVertex3f(0.0, 1.0, 0.0) # Point
    glVertex3f(-1.0, -1.0, 1.0)
    glEnd()

def myDisplay():
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity() 

    glTranslatef(0, 0, -7.0)
    glRotatef(45.0, 0.0, 1.0, 0.0)

    pivot()

    piramida()

    glutSwapBuffers()
    glFlush()

def reshape(width, height):  
   aspect = width / height
   glViewport(0, 0, width, height)
   glMatrixMode(GL_PROJECTION) 
   glLoadIdentity()            
   gluPerspective(45.0, aspect, 0.1, 100.0)

def main():
    glutInit(sys.argv)
    glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE)
    glutInitWindowSize(500,500)
    glutInitWindowPosition(100,100)
    glutCreateWindow("Piramida 3D")
    glutDisplayFunc(myDisplay)
    glutReshapeFunc(reshape)
   
    init()
    glutMainLoop()

main()
Outputnya adalah sebagai berikut :

Sekian dan selamat mencoba.

Komentar

Postingan populer dari blog ini

Membuat Lingkaran Menggunakan Algoritma Bresenham

Hai semua, kembali lagi dengan saya, kali ini saya akan memberitahu tentang bagaimana cara membuat lingkaran menggunakan algoritma Bresenham. Nah disini saya beri langkah-langkah beserta contoh source code. Langkah-langkah : 1. Menetapkan titik tengah (x_center, y_center) 2. Menetapkan jari-jari r 3. Menetapkan nilai x = 0, y = r 4. Menetepkan nilai parameter keputusan d = 3 – (2 * r) 5. Gambar titik awal dengan koordinat (x_center+x, y_center+y) 6. x = x+1 7. Jika d < 0, maka nilai d baru d = d + (4*x) + 6, jika tidak nilai d baru d =     d + 4 * (x – y) + 10 dan y = y-1 8. Gambar titik berikutnya dengan koordinat (x_center+x, y_center+y) 9. Jika x < = y ulangi langkah 6 sampai 8 Contoh 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(-100.0, 100.0, -100.0, 100.0) glBegin(GL_POINTS) glPointSize(5) def plot(x, y): glV...

Menggambar Rumah Menggunakan Python OpenGL

Halo semua, di postingan pertama ini, saya akan menjelaskan tentang bagaimana membuat gambar Rumah Sederhana menggunakan Python OpenGL. Disini perangkat yang digunakan adalah Python versi 3.7.1 dan Visual Studio Code. Berikut codenya : 1. Import Modul OpenGL from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * 2. Menyiapkan Lembar Kerja def init(): glClearColor(0.0, 0.0, 0.0, 0.0) gluOrtho2D(-100.0, 100.0, -100.0, 100.0) 3. Menuliskan Titik Koordinat Gambar def ploting(): glClear(GL_COLOR_BUFFER_BIT) # jendela 1 glColor3f(1, 0.7, 0.2) glBegin(GL_LINE_LOOP) glVertex(60, 10) glVertex(45, 10) glVertex(45, 40) glVertex(60, 40) glEnd() glFlush() glColor3f(1, 0.7, 0.2) glBegin(GL_LINE_LOOP) glVertex(61, 10) glVertex(44, 10) glVertex(44, 41) glVertex(61, 41) glEnd() glFlush() # jendela 2 glColor3f(1, 0.7, 0.2) glBegin(GL_LINE_LOOP) glVertex(-30, 20) g...