Bangun segitiga 3D (Piramida)


Pengertian 3D

Halo teman - teman kali kita akan membahas materi tentang 3D. Dalam ruang dua dimensi suatu titik akan berada pada suatu posisi yang dinyatakan oleh dua sumbu. Umumnya kita sebut sumbu x dan sumbu y. Dalam ruang tiga dimensi terdapat sumbu ketiga yang biasanya kita sebut sumbu z. Terdapat dua konvensi dalam merepresentasikan suatu titik: kaidah tangan kanan dan kaidah tangan kiri. Dalam kaidah tangan kanan jika sumbu x positif mengarah ke kanan dan sumbu y positif mengarah ke atas maka sumbu z positif mengarah mendekati kita sementara dalam kaidah lengan kiri sumbu z positif mengarah menjauhi kita.
3D Vertex
Semua vertex dari obyek yang pernah kita buat sebelumnya masih berada pada satu bidang z=0, atau obyek yang dimodelkan masih berupa model 2D karena kita hanya memberikan vertex property koordinat x dan y dengan menggunakan fungsi glVertex2f(). Untuk memodelkan obyek dalam 3D kita perlu memberi property koordinat z dengan menggunakan fungsi glVertex3f().
Apa itu Obyek 3-D?
Obyek 3 D adalah sekumpulan titik-titik 3-D (x,y,z) yang membentuk luasan- luasan (face) yang digabungkan menjadi satu kesatuan. Face adalah gabungan titik-titik (Vertex) yang membentuk luasan tertentu atau sering dinamakan dengan sisi.
Transformasi 3D
Pada obyek tiga dimensi dapat dilakukan 3 transformasi pokok yaitu penggeseran (translation), perputaran (rotasi) , pembesaran (scaling). Adapun jenis transformasi lain adalah pembebanan (shearing), dan pencerminan (mirroring).

Berikut Source Codenya :

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

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

# Piramida
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) #Membersihkan layar latar belakang dengan warna hitam.

    glMatrixMode(GL_MODELVIEW) # Untuk mengatur display objek
    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) # Untuk mengatur proyeksi
   glLoadIdentity()            
   gluPerspective(45.0, aspect, 0.1, 100.0)

def main():
    glutInit(sys.argv)
    glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE) #Ingin warna RGB, dengan double buffer dan depth
    glutInitWindowSize(500,500)
    glutInitWindowPosition(100,100)
    glutCreateWindow("Piramida 3D")
    glutDisplayFunc(myDisplay)
    glutReshapeFunc(reshape)
   
    init()
    glutMainLoop()

main()


Outputnya :




Komentar