Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008
ISSN 1978-9483
PERANCANGAN POLIHEDRA DENGAN METODE JARING POLIGON Ina Agustina, Agus Iskandar Jurusan Sistem Informasi, Fakultas Teknologi Komunikasi dan Informatika, Universitas Nasional Jl. Sawo Manila, Pejaten Pasar Minggu No.61, Jakarta 12520 Abstract Conceptually polygon method is being used to design 3D object. By using Open GL facility we can design many complex polygon to create any object that has a large advantages. Keywords: Open GL, polygon, 3D object Abstrak Secara konseptual, jaring poligon digunakan di grafika computer untuk menghasilkan objek 3D. Manakala seniman patung mengunakan jaring kawat untuk menghasilkan objek 3D. jika seniman mengubah-ubah bentuk patung dengan jaring kawat, tetapi penciptaan objek 3D dengan computer dilakukan dengan memanipulasi jaring poligon baik dengan pemrograman dan juga pemahaman geometri 3D. jaring poligon adalah permukaan yang dibuat dari kumpulan muka-muka poligon. Kata kunci: Open GL, poligon, obyek 3D
I.
PENDAHULUAN
Ilustrasi yang terbaik untuk menggambarkan jaring poligon adalah dengan menggunakan kawat yang dihubung-hubungkan membentuk jaring kawat untuk membuat objek tertentu., misalnya objek orang (baca jaring kawat patung). Bentuk jaring kawat ini sama dengan seri dari jaring kawat poligon yang dihubungkan antara satu dengan yang lainnya. Kawat cukup fleksibel untuk membentuk objek lain yang lebih kompleks dan pejal. Seniman menggunakan tanah liat dan plester untuk menyelesaikan jaring kawat patung tersebut. Secara konseptual, jaring poligon digunakan di grafika computer untuk menghasilkan objek 3D. Manakala seniman patung mengunakan jaring kawat untuk menghasilkan objek 3D. jika seniman mengubah-ubah bentuk patung dengan jaring kawat, tetapi penciptaan objek 3D dengan computer dilakukan dengan memanipulasi jaring poligon baik dengan pemrograman dan juga pemahaman geometri 3D. jaring poligon adalah permukaan yang dibuat dari kumpulan muka-muka poligon. II.
TEORI DASAR
Pemodelan dengan Jaring Pilogon Pada bagian ini, akan dipelajari konsep dan istilah jaring, vector normal, muka (permukaan), dan pejal.Jaring dapat digunakan untuk membuat ‘kulit’ dari objek pejal. Jika jaring mentupi ruangan maka akan menghasilkan sebuah benda pejal. Ada dua cara untuk perwakilan jaring yaitu metoda daftar titk (vertex list method) dan metoda daftar muka (face list method). Kedua cara ini berbeda. 33
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008
ISSN 1978-9483
Masing-masing pilogon diwarnai dengan warna yang berbeda-beda se hingga dapat dilihat jaringannya. Masing-masing pilogon dapat dinyatakan dalam bentuk pejal atau tidak pejal tergantung pada coraknya. Pendefinisian Jaring Poligon Ada beberapa cara pendefinisian jaring. Untuk kubus dapat diwakili dengan membuat satu daftar yang berisi daftar masing-masing poligon, lokasi titik dan normal untuk masing-masing titik. Dengan perwakilan ini, kubus terdiri dari 24 titik, 24 normal dan 6 permukaan. Daftar ini dapat menciptakan data berlebih-lebihan karena ada beberapa titik normal yang didaftarkan lebih dari satu kali. Untuk itu, lebih baik digunakan metoda lain yaitu membuat 3 daftar (tidak dengan satu daftar). Ke tiga daftar tersebut adalah (1) daftar untuk titik, (2) daftar untuk permukaan dan (3) daftar normal. Dengan metoda ini, sebuah kubus terdiri dari (1) 8 buah titik, (2) 6 buah permukaan dan (3) 6 buah normal. (1) Daftar titik Titik x, y, z 0 -1.0,-1.0, 1.0 1 1.0,-1.0, 1.0 2 1.0, 1.0, 1.0 3 -1.0, 1.0, 1.0 4 -1.0,-1.0,-1.0 5 -1.0, 1.0,-1.0 6 1.0, 1.0,-1.0 7 1.0,-1.0,-1.0
(2) Daftar normal Normal nx, ny, nz 0 0.0, 0.0, 1.0 1 0.0, 0.0, -1.0 2 0.0, 1.0, 0.0 3 0.0, -1.0, 0.0 4 1.0, 0.0, 0.0 5 -1.0, 0.0, 0.0 (3) Daftar muka Muka titik 0(depan) 0,1,2,3 1(belakang) 4,5,6,7 2(atas) 5,3,2,6 3(bawah) 4,7,1,0 4(kanan) 7,6,2,1 5(kiri) 4,0,3,5
normal 0,0,0,0 1,1,1,1 2,2,2,2 3,3,3,3 4,4,4,4 5,5,5,5
Selain itu, diperlukan lintasan muka yaitu untuk menentukan : • Bagian dalam polygon • Bagian luar dari pejal • Letak arah normal Lintasan muka mengikuti arah jarum jam sebagaimana terlihat dari luar objek. Dalam polygon akan selalu ada pada sebelah kiri anda. 34
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008
ISSN 1978-9483
Penghitungan Normal Mengapa grafika computer membutuhkan normal? • Normal mengatakan pada anda letak bagian permukaan sebelah luar • Normal digunakan utnuk menghitung seberapa banyak sinar cahaya mengenai permukaan bagian luar • Normal menentukan seberapa licinnya permukaan dirender. Dua cara menentukan normal: Cara pertama: Tentukan perkalian silang dengan menggunakan tiga (3) titik pada sebuah bidang (permukaan). Oleh karena itu, jika vector sejajar dengan perkalian silang maka nilainya akan kecil dan tidak akurat. Selain itu. Polygon mungkin tidak planar sempurna. Cara kedua: gunakan metoda Newell N1 mx = S (yi - yberikut(i))(zi - zberikut(i)) t=0 N1 my = S t=0 N1 mz = S
(zi - zberikut(i))(xi - xberikut(i))
(xi - xberikut(i))(yi - yberikut(i))
t=0 Sekarang anda telah dapat menghitung normal, namun apa gunanya jika anda tidak dapat menggunakannya dalam grafika computer! OpenGL menggunakan vector normal untuk penentuan permukaan luar, penghalusan (smoothing), pencahayaan (lightning) dan pemberian bayangan (shading).Gambar 6.2 menunjukkan objek 3D yaitu sebuah kubus tanpa pencahayaan. Sedangkan Gambar 6.3 menunjukkan objek yang sama dengan pencahayaan. Untuk itu, pastikan anda menguasai cara menghitung vector normal.
Gambar 2.1.a Objek 3D pejal tanpa pencahayaan
Gambar 2.1.b Objek 3D pejal dengan pencahayaan 35
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008 III.
ISSN 1978-9483
METODE SIMULASI
Langkah-langkah pembuatan program ini hampir sama yang telah dibicarakan dalam Bab 2. Yang perlu diubah hanyalah isi dari fungsi Inisialisasi( ) dan Gambarku( ) yang terletak di class COpenGLku8Doc. Perubahannya adalah: void COpenGLku8Doc :: Inisialisasi( ) { glLoadIdentity( ); glClear(GL_COLOR_BUFFER_BIT); //hidupkan pencahayaan glEnable(GL_LIGHTNING); glEnable(GL_LIGHT0); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glClearColor(1, 1, 1, 0); glViewport(0, 0, 600, 600); GLfloat intensitasCahaya[ ] = {0.9f, 0.9f, 0.9f, 1.0f}; GLfloat posisiCahaya [ ] = {...................}; glLightfv(GL_LIGHT0, GL_POSITION, posisiCahaya); glLightfv(GL_LIGHT0, GL_POSITION, intensitasCahaya); glMatrixMode(GL_PROJECTION); glLoadIdentity( ); glOrtho( -2, 2, -2, 2, -2, 2.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity( ); } void COpenGLku8Doc :: GambarKu( ) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); GLfloat bahan_ambient[ ] = {0, 0.2f, 0.3f, 1}; GLfloat bahan_diffuse[ ] = {0.6f, 0.6f, 0.6f, 1.0f}; GLfloat bahan_specular[ ] = {1.0f, 1.0f, 1.0f, 1.0f}; GLfloat bahan_shininess[ ] = {90.0f}; glMaterialfv(GL_FRONT, GL_AMBIENT, bahan_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, bahan_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, bahan_specular); glMaterialfv(GL_FRONT, GL_SHININESS, bahan_shininess); glRotated(30, 0, 1, 1); glRotated(15, 1, 1, 0); glPushMatrix( ); glBegin(GL_QUADS); //Muka depan glNormal3f( 0.0f, 0.0f, 1.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glVertex3f( 1.0f, -1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glVerte x3f(-1.0f, 1.0f, 1.0f); //Muka belakang glNormal3f( 0.0f, 0.0f, -1.0f);
// permulaan // pengga mbaran Quads // Normal menuju Anda // Titik 1 (depan) // Titik 2 (depan) // Titik 3 (depan) // Titik 4 (depan)
glVertex3f(-1.0f, -1.0f, -1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
// Normal meninggalkan // Anda // Titik 1 (belakang) // Titik 2 (belakang) // Titik 3 (belakang) // Titik 4 (belakang)
//Muka atas glNormal3f( 0.0f, 1.0f, 0.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
// Normal berarah atas // Titik 1 (atas) // Titik 2 (atas) // Titik 3 (atas) // Titik 4 (atas)
36
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008 //Muka bawah glNormal3f( 0.0f, -1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glVertex3f( 1.0f, -1.0f, -1.0f); glVertex3f( 1.0f, -1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
// Normal berarah bawah // Titik 1 (bawah) // Titik 2 (bawah) // Titik 3 (bawah) // Titik 4 (bawah)
//Muka kanan glNormal3f( 1.0f, 0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
// Normal berarah kanan // Titik 1 (kanan) // Titik 2 (kanan) // Titik 3 (kanan) // Titik 4 (kanan)
//Muka kiri glNormal3f(-1.0f, 0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glEnd( );
ISSN 1978-9483
// Normal berarah kiri // Titik 1 (kiri) // Titik 2 (kiri) // Titik 3 (kiri) // Titik 4 (kiri)
glPopMatrix( ); glFlush( ); }
hasil keluaran dari program ini seperti pada gambar :
Gambar 3.1 Kubus dengan pencahayaan.
Property Jaring: • Kepadatan Menyatakan sebuah objek pejal jika permukaannya tertutup ruang positif dan terhingga. • Keterkaitan Antara bagian polygon yang satu dengan yang lain yang membentuk objek 3D dihubungkan satu sama lain. Atau dengan kata lain terikat satu sama lain dan jika tidak terhubung maka pastilah lebih dari satu objek. • Kesederhanaan 37
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008
• •
ISSN 1978-9483
Sederhana, jika pejal maka objek 3D tersebut tanpa lubang. Bidang Objek 3D dapat terdiri dari banyak bidang artinya setiap permukaan pada sebuah bagian objek mewakili sebuah bidang. Kecembungan Objek 3D dapat dibuat peck dengan menambahkan property cembung dan cekung.
Pendefinisian Polihedra Polihedra adalah sebuah jaring yang mempunyai ruang terhingga dan tertutup (contohnya: tidak ada celah di antaranya). OpenGL menyediakan sejumlah fungsi yang dapat menggambar polihedra sederhana yaitu tetrahedron, octahedron, dodecahedron dan isocahedron (Tabel 6.1.) Oleh karena itu, jika membuat objek pejal dengan bayak muka dan bervariasi maka dibutuhkan untuk mendefinisikan jarring khusus sesuai dengan kebutuhan. Pada gambar berikut ini, merupakan contoh gambar dari Polihedra Isocahedron Pejal Di mana pada gambar ini mempunyai 10 bidang sisi :
Gambar 3.2 Polihedra Isocahedron pejal.
IV.
ANALISA DAN PEMBAHASAN
Polihedra Polihedra adalah sebuah jarring yang mempunyai ruang terhingga dan tertutup (contohnya: tidak ada celah di antaranya). OpenGL menyediakan sejumlah fungsi yang dapat menggambar polihedra sederhana yaitu tetrahedron, octahedron, dodecahedron dan isocahedron (Tabel 6.1.) Oleh karena itu, jika membuat objek pejal dengan bayak muka dan bervariasi maka dibutuhkan untuk mendefinisikan jarring khusus sesuai dengan kebutuhan. Prisma adalah polihedra yang memiliki bentuk kesimetrisan tertentu dan oleh karena itu mudah dijelaskan. Prisma didefinisikan sebagai sapuan atau penaikan poligon secara garis lurus. Antiprisma (gambar 6.5)mempunyai poligon atas dan bawah yang sama, tetapi polygon bawah diputar sepanjang n/180 derajad.
38
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008
ISSN 1978-9483
Gambar 4.1 Polihedra Isocahedron pejal. Contoh program dengan openGL dan Visual C++ untuk menampilkan objek 3D Polihedra. Tetrahedron, Octahedron yaitu Tetrahedron, Octahedron, Dodecahedron dan Icosahedron dengan tampilan sketsa kawat saja. Langkah1: Ubahlah isi dari fungsi inisialisasi() dan Gambarku() yang terletak di class COpenGLku8Doc. Perubahannya adalah: void COpenGLku8Doc::Inisialisasi() { int w = 800, h = 600; glShadeModel (GL_FLAT); glClearColor (1.0, 1.0, 1.0, 0.0); glClearAccum (0.0, 0.0, 0.0, 0.0); glViewport (0, 0, w, h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective (60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); glMatrixMode (GL_MODELVIEW); } void COpenGLku8Doc::GambarKu() { glClear (GL_COLOR_BUFFER_BIT); glColor3f (0, 0, 1); glPushMatrix(); glTranslatef (0.0, 1.0, -8.0); glutWireTetrahedron(); glPopMatrix(); glPushMatrix(); glTranslatef (2.0, 1.0, -8.0); glutWireOctahedron(); glPopMatrix(); glPushMatrix(); glTranslatef (2.5f, -2.5f, -8.0); glutWireDodecahedron(); glPopMatrix(); glPushMatrix(); glTranslatef (0.0, 1.0, -8.0); glutWireIcosahedron(); glPopMatrix(); glFlush(); }
39
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008
ISSN 1978-9483
Hasil output program :
Gambar 4.2 Output ekskusi program. V.
KESIMPULAN
Polihedra adalah sebuah jaring yang mempunyai ruang terhingga dan tertutup. Polihedra merupakan penggambaran dari unsur jaring polygon, dengan menggunakan kawat (jaring) yang dihubung-hubungkan membentuk jaring kawat untuk membuat objek tertentu. Polihedra mempunyai beberapa jenis bentuk penggambaran, seperti tetrahedron, octahedron, dodecahedron, dan isocahedron. Pada pembuatan polihedra diatas, kita dapat menemui beberapa fungsi yang dapat menggambar polihedra dalam bentuk jaring maupun bentuk pejal berisi, yaitu:glutWireTetrahedron(),glutSolidTetrahedron(),glutWireOctahedron(),glutSolidOctahedron(), glutWireDodecahedron(),glutSolidDodecahedron(),glutWireIsocahedron(), glutSolidIsocahedron(). Selain beberapa fungsi untuk menggambar suatu bentuk polihedra, kita juga dapat menggambar bentuk objek dengan menggunakan fungsi-fungsi khusus seperti kubus, bola, dan teko dalam bentuk jaring maupun bentuk pejal. Fungsi-fungsi tersebut yaitu glutWireCube (Gl double isi),glutSolidCube(GLdoublesisi),glutWireSphere(GLdoubler,GLintiVer,GLintiHor),glutSolidSpher e(GLdoubler,GLintiVer,GLintiHor),glutWireTorus(GLdouble inR, GLdouble outR, GLintiV er, GLintiHor), glutSolidTorus(GLdouble inR, GLdouble outR, GLintiVer, GLintiHor). Sehingga Dengan menggunakan fungsi-fungsi tersebut kita dapat melihat objek-objek yang dapat dibangun oleh suatu polihedra. DAFTAR PUSTAKA [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]
Suyoto. _____. Teori dan Pemr ograman Grafika Komputer. _____._____ Compile program dengan Ctrl+F7, lalu Run program dengan Ctrl+F5. REFERENSI Basuki, Achmad dan Nana Ramadijanti, Grafika Komputer: Teori dan Implementasi, Andi Yogyakarta, 2006. Hill, F.S, Computer Graphic Using OpenGl, Second Edition, Prentice Hall, 2001. Kadir, Abdul, Pemrograman C++, Andi Yogyakarta, 2003. Bambang wirawan, Paulus, Grafik Komputer dengan C, Jakarta : Penerbit Andi, 2003. http :\\ www.eprogramming.com http :\\www.google.com \openGL http :\\www.google.com \yoav Lahav 40
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008
ISSN 1978-9483
VISUALISASI OBYEK 3D DENGAN METODE PROYEKSI GEOMETRI Rahmad Abdul Jabbar Jurusan Sistem Informasi, Fakultas Teknologi Komunikasi dan Informatika, Universitas Nasional Jl. Sawo Manila, Pejaten Pasar Minggu No.61, Jakarta 12520 Abstract Projection is method to displaying an 3D object on a define plane. On this paper we use OpenGL in order to design some of 3D object with a simple source code. Keywords: OpenGL, 3D obyek, projection. Abstrak Proyeksi dapat diartikan sebagai suatu cara untuk menampilkan objek 3D pada suatu bidang 2D. Dalam makalah ini akan diuraikan cara mengoperasikan openGL untuk mendesain berbagai contoh obyek 3D dengan piranti tersebut. Kata kunci: OpenGL, obyek 3D, proyeksi I. PENDAHULUAN Teknik -teknik yang dipelajari dalam grafika komputer adalah teknik-teknik bagaimana membuat atau menciptakan gamabar dengan menggunakan komputer. Ada perbedaan yang sangat mendasar antar foto dan gambar, dimana pada foto semua detail objek terlihat sedangkan gambar (baik gamabar manusia atau gamabar komputer) tidak dapat memperlihatkan semua detail yang dianggap penting dalam menunjukkan pola suatu gambar. Grafika komputer merupakan perangkat (tool) dasar yang digunakan untuk membuat gamabar dengan komputer. Dengan menggunakan perangkat ini, penciptaan gamabar dapat dilakukan, bahkan dimudahkan, dengan menggunakan komputer. Ada beberapa program sederhana sampai program yang sangat kompleks guna membuat gambar komputer, antara lain paint, Adobe Photoshop, Auto Cad, Macromedia Freehand MX, dan lain-lain. Kali ini kita akan membahas Visualaisasi 3 Dimensi dengan Proyeksi Geometri • Seni, entertainment, dan publishing seperti produksi film, animasi, spesial effect, game komputer, web browsing, buku, slide, dan majalah. • Image processing atau pengolahan citra digital, yang dalam hal ini grafika komputer dapat digunakan misalnya seperti dalam coding (permindahan data citra menjadi data vector) yang banayak digunakan untuk keperluan GIS. • Menampilkan proses yang sedang berjalan (process monitoring). • Menampilkan simulasi, yang dalam hal ini grafik yang dihasilkan berupa grafik visualisasi proses. Seperti dalam simulasi perempatan jalan, grafik komputer digunakan untuk melakukan visualisasi secara detail secara detail bagaimana kedatangan mobil, pengaturan lampu lalu lintas, dan semua item didalamnya.
41
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008 • •
ISSN 1978-9483
CAD (Computer Aided Design). Satu program CAD yang paling banyak digunakan dalam dunia teknik, yaitu AUTOCAD, dimana grafik komputer dapat menunjukka n rancangan atau design pola atau design layout. Visulisasi analisis sains, yang dalam hal ini grafik komputer dapat digunakan sebagai sarana untuk menunjukkan proses ilmiah.
II. LANDASAN TEORI 2.1 Objek Dalam 3 Dimensi Yang dimaksud dengan grafik 3 dimensi (3D) adalah setiap titik yang membentuk suatu objek yang diproses dan mempunyai 3 sumbu koordinat, yaitu x, y dan z. pada gambar dibawah ini dapat dibedakan komposisi sumbu koordinat antara grafik 2 dimensi dan grafik 3 dimensi.
Gambar 2.1 Sumbu grafik 2 dan 3 dimensi.
Elemen terkecil (titik) untuk menampilkan objek atau gambar pada grafik komputer 3D disebut Voxel, singkatan dari Volume Elemen. Elemen terkecil pada grafik 2D disebut Pixel, singkatan dari Picture Element. Bentuk dasar gambar geometri 3D anatar lain: 1. Titik (Voxel) 2. Garis 3. Bidang • Segi tiga • Segi empat • Lingkaran, dan lain-lain 4. Volume • Prisma • Piramid • Kotak • Bola • Dadu/Kubus, dan lain-lain. Titik yang terdapat didalam sistem koordinat 3D dapat dilihat pada gambar dibawah ini. Dimana titik P mempunyai 3 sumbu yang diwakili oleh variable x, y, dan z. Contoh: Sumbu x = 10, y = 11, z = 12
42
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008
ISSN 1978-9483
Y Maka titik P (x,y,z) ditulis seperti
P(10, 11, 12)
P(x,y,z) Z
X Gambar 2.2 Sketsa obyek 3D.
Untuk menggambar objek 3D yang sudah didefinisikan dapat dilakukan dengan memperhatikan bahwa: ü Objek 3D terdiri dari titik-titik dan face -face. ü Penggambaran dilakukan pada setiap face menggunakan polygon. ü Polygon dibentuk dari titik yang terdapat pada sebuah face. ü Titik-titk dinyatakan pada struktur 3D, sedangkan layar komputer dalam struktur 2D sehingga diperlukan konversi dari 3D menjadi 2D. ü Untuk menggambar objek 3D, untuk setiap face perlu dilakukan pengubahan titik 3D menjadi vector 3D, agar mudah ditransformasikan. ü Setelah proses pengolahan vector maka bentuk vector 3D menjadi 2D. ü Sumbu Z adalah sumbu yang searah dengan garis mata sehingga diperlukan transformasikan untuk menampilkan sumbu ini. Untuk hal ini perlu dilakukan rotasi sumbu. ü Dalam konversi, arah Z tidak diambil Konversi vector 3D menjadi titik 2D adalah perubahan struktur data dari vector 3D yang sudah diolah dengan transformasi menjadi struktur data titik 2D agar siap digambar kelayar komputer. Hal ini karena bagaimanapun juga layar komputer adalah 2D.
Gambar 2.3 Konversi dimensi. Implementasi konversi vector 3D menjadi 2D:
43
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008
ISSN 1978-9483
point3D_t vector2point2D vector3D_t vec) { point2D_t pnt; pnt.x=vec.v [0]; pnt.y=vec.v [1]; return pnt; } Seperti telah dibahas diatas, proses pengolahan (transformasi) tidak dapat dilakukan terhadap data titik, tetapi dilakukan terhadap data vector sehingga untuk mengolah atau melakukan transformasi terlebih dahulu data titik 3D diubah menjadi 2D dan baru kemudian ditransformasikan.
Vector3D_t point2vector(point3D_t pnt) { vector3D_t vec; vec.v [0] = pnt.x; vec.v [1] = pnt.y; vec.v [2] = pnt.z; vec.v [3] = 1.; return vec; } Proyeksi dapat diartikan sebagai suatu cara untuk menampilkan objek 3D pada suatu bidang 2D.Dalam konteks komputer grafik kita menghadapi permasalahan yang hampir sama dengan pelukis atau arsitek. Hanya saja komputer grafik memiliki kelebihan, yakni kita dapat langsung merekam data suatu objek dalam bentuk sebenarnya, yaitu 3D. Objek tersebut dapat kita manipulasi dengan tetap mempertahankan informasi tentang objek tersebut dengan tetap berbentuk 3D. Masalah baru timbul pada saat kita ingin menampilkan gambar tersebut, baik pada layar komputer maupun saat dicetak diatas kertas. Objek yang datanya berbentuk 3D harus kita tampilkan hanya 2 dimensi. Oleh karena itu kita harus melakukan konversi dari 3D ke 2D. konversi itu disebut proyeksi. Dalam melakukan proyeksi kita dapat memilih ke bidang mana objek 3D akan diproyeksikan. Pilihan tersebut adalah: • Bidang X dan Y • Bidang X dan Z • Bidang Y dan Z Untuk memproyeksikan objek pada bidang X dan Y dilakukan dengan mengambil data koordinat X dan Y sementara data bidang Z diabaikan. Begitu pula secra analog berlaku seterusnya untuk bidang X dan Z. proyeksi seperti ini sayangnya tidak mencerminkan gambar suatu objek 3D. untuk mendapatkan efek 3D dapat dilakukan berbagai cara, misalnya: Sebuah gambar kotak yang akan ditampilkan pertama-tama dirotasikan pada sumbu X sebesar 20 derajat. Setelah itu baru diproyeksikan. Dengan cara ini paling tidak kita sudah mendapatkan efe k 3D, Beragam bentuk proyeksi antara lain: • Paralel(orthogonal) • Perspektif 44
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008 •
Oblique
• • • • •
Cavalier Cabinet Axonometrik(Perspektif militer) Isometrik Diametrik
ISSN 1978-9483
Model-model proyeksi:
CARBINET
CAVALIER
ISOMETRIK
DIMETRIK
TRIMETRIK
AXONOMETRIK Gambar 2.4 Model-model proyeksi.
Proyeksi parallel merupakan teknik proyeksi yang paling sederhana dan mudah pengimplementasiannya. Biasanya proyeksi seperti ini dig unakan untuk keperluan gambar teknik, seperti untuk gambar teknik mesin, rumah, dan lainya. Proyeksi parallel dapat dilakukan pada 3 arah sumbu koordinat, yaitu pada sumbu x,y, dan z. Cara melakukan proyeksi orthographic adalah sebagai berikut: Ø Nilai sumbu x dikonversikan menjadi 0 Ø Nilai sumbu y dikonversikan menjadi 0 45
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008
ISSN 1978-9483
Ø Nilai sumbu z dikonversikan menjadi 0 Matriks proyeksi pada sumbu x ditulis: 0 0 0 0 1 0 T= 1 0 1 0 0 0
0 0 0 1
Matriks proyeksi pada sumbu y ditulis: 1 0 0 0 0 0 T= 1 0 1 0 0 0
0 0 0 1
Matriks proyeksi pada sumbu z ditulis:
T=
1 0 1 0
0 1 0 0
0 0 0 0
0 0 0 1
Untuk memperbaiki tampilan, selain menggunakan proyeksi parallel, dapat juga dilakukan dengan merotasi objek dengan sudut terte ntu seperti pada proyeksi oblique. Umumnya proyeksi ini dilakukan dari sumbu z dengan sudut ß pada salah satu sumbu lainya dan dengan faktor perpendekan K pada sumbu z. Matriks transformasi dengan sumbu z = 0 ditulis:
T=
1 0 0 0 1 0 k.cos(ß) k.sin(ß) 0 0 0 0
0 0 0 1
Proyeksi ini mempunyai sudut ß = 45º dan faktor perpendekan K = 1. sumbu miring yang ditampilakan biasanya adalah sumbu z. Matriks transformasi dengan sumbu z = 0 ditulis:
[T]=
1 0 0 1 cos(45) sin(45) 0 0
0 0 0 0
0 0 0 1
Sin 45º = Cos 45º = 1/v 2, dapat juga ditulis seperti: 1
0
0
0 46
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008
[T]=
0 1/v 2 0
1 1/v 2 0
0 0 0
ISSN 1978-9483
0 0 1
Mirip dengan Proyeksi cavalier, hanya saja bagian dari sumbu dalam proses transformasi mengecil. Proyeksi ini mempunyai sudut = 45º dan factor perpendekan K = ½. Sumbu miring yang ditampilkan biasanya adalah sumbu z. Matriks transformasi dengan sumbu z=0 ditulis:
[T]=
1 0 1/2v 2 0
0 1 1/2v 2 0
0 0 0 0
0 0 0 1
contoh: misal sebuah kotak seperti pada Gambar 13.5 dengan data koordinat setiap titiknya sebagai berikut: P(x,y,z) Y P1(0,0,0) P2(0,0,1) P3(0,1,0) P4(0,1,1) P5(1,0,0) X P6(1,0,1) Z P7(1,1,0) Gambar 2.4 Proyeksi cabinet P8(1,1,1). Untuk mendapatkan tampilan pada layar dengan proyeksi cabinet, langkah pertama adalah mengendalikan kedelapan titik yang membentuk kotak dengan matriks proyeksi cabinet. Dalam matriks, kita dapat melihat bahwa pada baris proyeksi arah kolom Z mempunyai nilai 0. itu berarti nilai perhitungan titik yang kita dapati sudah langsung diproyeksi dengan arah z dan hasil proyeksinya adalah pada bidang X dan Y. Proyeksi axonomatrik dapat diartikan sebagai suatu objek yang dirotasi pada satu atau beberapa sumbu dan setelah itu barulah objek tersebut diproyeksi secara orthogonal (paralel). Umumnya, sumbu objek yang diproyeksikan akan diperpendek. Ketiga sumbu x,y, dan z diperpendek. Artinya, bidang yang diproyeksi memotong ketiga sumbu dengan sudut yang sama. Objek dirotasi pada sumbu y dengan sudut 45º dan pada sumbu x dengan sudut 35,26º. Matriks tranformasi untuk proyeksi isometric:
47
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008 0,707107 [T]= 0 0,707107 0
0,408248 -0,577353 0.816597 -0,577345 0,408248 -0,577353 0 0
ISSN 1978-9483 0 0 0 0
Gambar 2.5 Matriks Transformasi
Ada dua sumbu koordinat yang diperpendek dengan ukuran yang sama dan pada umunya yang dipilih adalah sumbu X dan Y. bidang proyeksi berpotongan dengan 2 sumbu dengan besar sudut yang sama. Biasanya x dan y diperpendek dengan faktor ½ sumbu z. Artinya: Rotasi pada sumbu y sebaesar 22,20º dan Rotasi pada sumbu x sebaesar 22,70º . Matriks tras nformasi untuk proyeksi dimetrik: 0,925820 0,133631 [T]= 0 0.935413 0,377964 -0,327321 0 0
-0,353553 0,353553 0,366025 0
0 0 0 0
Gambar 2. 6 lemari dengan proyeksi Dimetrik. 48
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008
ISSN 1978-9483
III. ALGORITMA/PROGRAM /* * select.c * This is an illustration of the selection mode and * name stack, which detects whether objects which collide * with a viewing volume. First, four triangles and a * rectangular box representing a viewing volume are drawn * (drawScene routine). The green triangle and yellow * triangles appear to lie within the viewing volume, but * the red triangle appears to lie outside it. Then the * selection mode is entered (selectObjects routine). * Drawing to the screen ceases. To see if any collisions * occur, the four triangles are called. In this example, * the green triangle causes one hit with the name 1, and * the yellow triangles cause one hit with the name 3. */ #include
#include <stdlib.h> #include <stdio.h> /* draw a triangle with vertices at (x1, y1), (x2, y2) * and (x3, y3) at z units away from the origin. */ void drawTriangle (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2, GLfloat x3, GLfloat y3, GLfloat z) { glBegin (GL_TRIANGLES); glVertex3f (x1, y1, z); glVertex3f (x2, y2, z); glVertex3f (x3, y3, z); glEnd (); } /* draw a rectangular box with these outer x, y, and z values */ void drawViewVolume (GLfloat x1, GLfloat x2, GLfloat y1, GLfloat y2, GLfloat z1, GLfloat z2) { glColor3f (1.0, 1.0, 1.0); glBegin (GL_LINE_LOOP); glVertex3f (x1, y1, -z1); glVertex3f (x2, y1, -z1); glVertex3f (x2, y2, -z1); glVertex3f (x1, y2, -z1); glEnd (); glBegin (GL_LINE_LOOP); glVertex3f (x1, y1, -z2); glVertex3f (x2, y1, -z2); glVertex3f (x2, y2, -z2); glVertex3f (x1, y2, -z2); glEnd (); glBegin (GL_LINES); glVertex3f (x1, y1, -z1); glVertex3f (x1, y1, -z2); glVertex3f (x1, y2, -z1); glVertex3f (x1, y2, -z2); glVertex3f (x2, y1, -z1); glVertex3f (x2, y1, -z2); glVertex3f (x2, y2, -z1); glVertex3f (x2, y2, -z2); glEnd ();
/* 4 lines */
} /* drawScene draws 4 triangles and a wire frame
49
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008
ISSN 1978-9483
* which represents the viewing volume. */ void drawScene (void) { glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective (40.0, 4.0/3.0, 1.0, 100.0); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); gluLookAt (7.5, 7.5, 12.5, 2.5, 2.5, -5.0, 0.0, 1.0, 0.0); glColor3f (0.0, 1.0, 0.0); /* green triangle */ drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, -5.0); glColor3f (1.0, 0.0, 0.0); /* red triangle */ drawTriangle (2.0, 7.0, 3.0, 7.0, 2.5, 8.0, -5.0); glColor3f (1.0, 1.0, 0.0); /* yellow triangles */ drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, 0.0); drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, -10.0); drawViewVolume (0.0, 5.0, 0.0, 5.0, 0.0, 10.0); } /* processHits prints out the contents of the selection array */ void processHits (GLint hits, GLuint buffer[]) { unsigned int i, j; GLuint names, *ptr; printf ("hits = %d\n", hits); ptr = (GLuint *) buffer; for (i = 0; i < hits; i++) { /* for each hit */ names = *ptr; printf (" number of names for hit = %d\n", names); ptr++; printf(" z1 is %g;", (float) *ptr/0x7fffffff); ptr++; printf(" z2 is %g\n", (float) *ptr/0x7fffffff); ptr++; printf (" the name is "); for (j = 0; j < names; j++) { /* for each name */ printf ("%d ", *ptr); ptr++; } printf ("\n"); } } /* selectObjects "draws" the triangles in selection mode, * assigning names for the triangles. Note that the third * and fourth triangles share one name, so that if either * or both triangles intersects the viewing/clipping volume, * only one hit will be registered. */ #define BUFSIZE 512 void selectObjects(void) { GLuint selectBuf[BUFSIZE]; GLint hits; glSelectBuffer (BUFSIZE, selectBuf); (void) glRenderMode (GL_SELECT); glInitNames(); glPushName(0); glPushMatrix (); glMatrixMode (GL_PROJECTION); glLoadIdentity ();
50
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008
ISSN 1978-9483
glOrtho (0.0, 5.0, 0.0, 5.0, 0.0, 10.0); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); glLoadName(1); drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, -5.0); glLoadName(2); drawTriangle (2.0, 7.0, 3.0, 7.0, 2.5, 8.0, -5.0); glLoadName(3); drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, 0.0); drawTriangle (2.0, 2.0, 3.0, 2.0, 2.5, 3.0, -10.0); glPopMatrix (); glFl ush (); hits = glRenderMode (GL_RENDER); processHits (hits, selectBuf); } void init (void) { glEnable(GL_DEPTH_TEST); glShadeModel(GL_FLAT); } void display(void) { glClearColor (0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT | GL_D EPTH_BUFFER_BIT); drawScene (); selectObjects (); glFlush(); } void keyboard(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; } } /* Main Loop */ int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (200, 200); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); init(); glutDisplayFunc(display); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; }
IV. KESIMPULAN Komputer grafik ialah grafik yang dihasilkan oleh komputer. yang dimaksud grafik komputer 3D ialah dimana setiap titik yang membentuk suatu objek yang diproses dan mempunyai 3 sumbu koordinat. Proyeksi dapat diartikan sebagai suatu cara untuk menampilkan objek 3D pada suatu bidang 2D.Beragam bentuk proyeksi antara lain: • Paralel(orthogonal) • Perspektif • Oblique 51
Jurnal Basis Data, ICT Research Center UNAS Vol.3 No.1 Mei 2008 • • • • •
ISSN 1978-9483
Cavalier Cabinet Axonometrik(Perspektif militer) Isometrik Diametrik DAFTAR PUSTAKA
[1] Basuki, Achmad dan Nana Ramadijanti, Grafika Komputer: Teori danImplementasi, Andi Yogyakarta, 2006. [2] Hill, F.S, Computer Graphic Using OpenGl, Second Edition, Prentice Hall, 2001. [3] Kadir, Abdul, Pemrograman C++, Andi Yogyakarta, 2003. [4] Bambang wirawan, P aulus, Grafik Komputer dengan C, Jakarta : Penerbit Andi, 2003 [5] http :\ \ www.eprogramming.com [6] http :\ \www.google.com\openGL [7] http :\ \www.google.com\yoav Lahav
52