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 :
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.
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
glutInitWindowPosition(100,100)
glutCreateWindow("Piramida 3D")
glutDisplayFunc(myDisplay)
glutReshapeFunc(reshape)
init()
glutMainLoop()
main()
Outputnya :
Komentar
Posting Komentar