Grafika Komputer. Evangs Mailoa

dokumen-dokumen yang mirip
Topik bahasan: 1. Membuat objek mudah dan kompleks dengan jaring poligon 2. Merender jaring poligon sebagai wireframe dan atau pejal dengan OpenGL

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LAB. SHEET PRAKTIKUM GRAFIKA KOMPUTER

Tabel 1 Perintah-perintah OpenGL yang telah dipraktekan

Tabel 1 Perintah-perintah OpenGL yang telah dipraktekan

Tutorial 09. Lighting

BAB II LINGKUNGAN PEMROGRAMAN GRAFIK DENGAN OPEN GL

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LAB. SHEET PRAKTIKUM GRAFIKA KOMPUTER

DAFTAR PUSTAKA. (diakses 1 maret 2016)

LAMPIRAN SOURCE CODE

Program 1 /* Menampilkan Bayangan sebuah obyek sumber file */

Tutorial 04 Modeling & Transformasi Proyeksi

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LAB. SHEET PRAKTIKUM GRAFIKA KOMPUTER

Tutorial 06. Texture Mapping & Blending

LAPORAN PRAKTIKUM KOMPUTER GRAFIK

Gambar 1. Contoh tekstur makrostruktur

/*Bismillahirrohmanirrohim _Fatimah_Rombel 2_Projek_Akhir_Komgraf*/ #include <stdio.h> #include <stdlib.h> #include <string.

Gambar 1. Viewport pada layar

PETEMUAN KE-5 TRANSFORMASI-PANDANGAN (Viewing)

BAB IV IMPLEMENTASI DAN PENGUJIAN

Tutorial 08. Fog. mensimulasikan efek kabut membatasi ruang pandang pengguna agar komputasi grafis yang diperlukan dapat dibatasi.

Gambar 1. Viewport pada layar

Pengenalan OpenGL. Sintax Perintah OpenGL. Library yang Berhubungan dengan OpenGL

BAB IV IMPLEMENTASI DAN PENGUJIAN SISTEM

apa yang terjadi?. Kemudian lakukan pengantian beberapa bagian seperti sintak

PETEMUAN KE-3 PRIMITIVE DRAWING 2

PRIMITIVE DRAWING. Achmad Basuki Nana Ramadijanti

Pengenalan OpenGL. Sintax Perintah OpenGL. Library yang Berhubungan dengan OpenGL

Praktikum Komputer Grafik [MODUL] Genap 2013/2014. Laboratorium Multimedia 1/47

Praktikum Komputer Grafik [MODUL] Genap 2012/2013. Laboratorium Multimedia 1/35

Modul 1 Primitif Drawing

Laboratorium Teknologi Informasi & Aplikasi. Praktikum Komputer Grafik [MODUL] Genap 2015/2016. Lab TIA 1/59

Laboratorium Teknologi Informasi & Aplikasi. Praktikum Komputer Grafik [MODUL] Genap 2014/2015. Lab TIA 1/58

TUGAS PENGANTAR GRAFIK KOMPUTER DAN OLAH CITRA

BAB I PENGENALAN OPENGL

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LAB. SHEET PRAKTIKUM GRAFIKA KOMPUTER

Praktikum Komputer Grafik [MODUL] Ganjil 2012/2013. Laboratorium Multimedia 1/41

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LAB. SHEET PRAKTIKUM GRAFIKA KOMPUTER

PENGANTAR GRAFIKA KOMPUTER

TRANSFORMASI. Tujuan transfomasi adalah:

OPENGL DALAM MICROSOFT VISUAL STUDIO EXPRESS Created by: Gideon

PERANCANGAN POLIHEDRA DENGAN METODE JARING POLIGON

Transformasi Obyek (Lanjutan)

EC5130 Grafika Komputer dan Pemrograman GPU

ALGORITMA PERPOTONGAN OBJEK

Perulangan, Percabangan, dan Studi Kasus

C Programming (re-view)

Transformasi Obyek (Kasus 2D)

Struct Lanjutan: Studi Kasus

Binary Tree. Binary Tree dapat digambarkan berdasarkan kondisinya, sebagai berikut: Pointer ke akar (root) dari tree

File & Stream. Kegunaan File : file : ini. dengan. iostream.h) suatu. stream, Jika. dapat menghubungkan. mendeklarasikan. kita.

PEMBENTUKAN TRANSFORMASI OBJEK 2 DIMENSI DENGAN OPENGL

Binary Search Tree (BST)

Tipe Data, Variabel, Input/Output

MODUL 9 Material Texture

UNIVERSITAS WIDYATAMA JURUSAN TEKNIK INFORMATIKA - FAKULTAS TEKNIK Jl. Cikutra No.204 A BAndung UJIAN TENGAH SEMESTER TA.

Pewarnaan dan Perputaran Polygon Untuk Objek Gambar Segi Tiga dan Segi Empat Menggunakan Program OPENGL 32

Binary Tree. Binary Tree dapat digambarkan berdasarkan kondisinya, sebagai berikut: Pointer ke akar (root) dari tree

Pemrograman I Bab V Percabangan. Adam Mukharil Bachtiar, S.Kom. Universitas Komputer Indonesia

Primitive Drawing. Achmad Basuki Nana Ramadijanti

By SUGITO Call :

// Created by Andri Andriyan // Linked List. #include <stdlib.h> #include <conio2.h> #include <stdio.h>

Minggu ke-14 Typedef, Struct & Command Line Argument

Bahasa C-M6 By Jamilah, Skom 1

Membuat Binary Search Tree Menggunakan STL Vector C++

PRAKTIKUM 6 PENGULANGAN PROSES 2

Modul 6 Interaksi dengan Keyboard dan Mouse

Praktikum 7. Pengurutan (Sorting) Insertion Sort, Selection Sort POKOK BAHASAN: TUJUAN BELAJAR: DASAR TEORI:

KENDALI PROSES. 6.1 PENYELEKSIAN KONDISI (Selection)

Algoritma dan Struktur Data. Ramos Somya, S.Kom., M.Cs.

Struktur Program Bahasa C

MODUL 7 OBJEK 3D A. KOMPETENSI DASAR

SOAL C++ Created by Yuli Astuti,S.Kom Copyright 2009

BAB 12 MANIPULATION FILE

TEKNOLOGI AUGMENTED REALITY

BAB IV TOOLS UNTUK MENGGAMBAR (WINDOW DAN VIEWPORT)

Praktikum 9. Pengurutan (Sorting) Quick Sort, Merge Sort

Pemrograman I Bab III Tipe Data, Variabel, dan Operasi Perhitungan. Adam Mukharil Bachtiar, S.Kom. Universitas Komputer Indonesia

Praktikum Algoritma dan Struktur Data

Algoritma Shell Sort Ascending Dan Binary Sequential Search Menggunakan C

MODUL PRAKTIKUM STRUKTUR DATA

QUEUE (ANTREAN) Prinsip Antrean : FIFO (First In First Out) FCFS (First Come First Serve) Yang Tiba lebih awal Maka akan dilayani Terlebih Dahulu

Pohon Biner Bagian 2 (Pohon Seimbang, Pohon Biner Terurut, Pembangunan Pohon Biner dari Pita Karakter/String)

Pertemuan 7. Tipe Data Sederhana

Bahasa C Array. Slide diambil dari MK Dasar-Dasar Pemrograman Fasilkom UI Dimodifikasi dan disesuaikan dngn kebutuhan pengajaran di PTI-Undiksha

PERTEMUAN XI OPERASI FILE

SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER STMIK AMIKOM YOGYAKARTA

MODUL IV Analisis Kasus/Pemilihan

Linked List 6.3 & 7.3 NESTED LOOP

MODUL III CONTROL FLOW & FLOWCHART

PRAKTIKUM KONSEP PEMROGRAMAN MATERI DECISION DWI SETIYA NINGSIH. November 16, Page 1 of 16 PRAKTIKUM KONSEP PEMROGRAMAN MATERI

Kode : IF2121 NIM :... Matakuliah : Algoritma dan Struktur Data Nama :... Hari, Tanggal : Senin, 13 November 2017 Waktu : 150 Menit

BAB IV PENGULANGAN PROSES

Bab 1 Pengenalan GLUT

Algoritma dan Struktur Data. Ramos Somya

ANALISA TEKNIK CUBE MAPPING BERBASIS OPENGL

Chapter 1 KONSEP DASAR C

Pembuatan Objek Gelas Pada OGRE

INPUT & OUTPUT SEQUENCE STATEMENT SELECTION STATEMENT. Pengantar Logika & Teknik Pemrograman Politeknik Negeri Jakarta TA.

printf (" ======== Program untuk memilih nama bulan dalam setahun ======== \n \n");

Grafika Komputer. Evangs Mailoa

Transkripsi:

Grafika Komputer Evangs Mailoa

Kumpulan polygon atau permukaan yang secara bersama-sama membentuk kulit dari suatu obyek. Dinyatakan dengan daftar poligon-poligon yang disertai dengan arah dari permukaan tiap poligon. Arah permukaan dinyatakan dengan vektor normal.

Arah vektor dari sebuah obyek gudang

Secara lebih rinci arah permukaan dinyatakan dengan setiap vektor normal dari titik (verteks) dari permukaan tersebut. Contohnya, untuk suatu dinding sebelah kanan gudang yang menghadap ke n1, arah permukaannya dinyatakan dengan 4 vektor v1, v2,v3, dan v4 seperti yang terlihat pada gambar di samping.

Obyek sebuah gudang seperti pada gambar di atas terdiri dari 7 permukaan poligon dengan jumlah verteks semuanya 10 (masing-masing digunakan bersama oleh 3 permukaan). Untuk menyederhanakan masalah ukuran sisinya adalah 1 unit, dan karena tiap sisinya berupa bidang datar maka vektor normalnya cukup satu untuk tiap permukaan.

Daftar verteks (vectorlist), vektor normal (normallist), dan permukaan (facelist) dari obyek gudang tersebut dinyatakan dalam tabel tabel berikut. vertex x y z 0 0 0 0 1 1 0 0 2 1 1 0 3 0.5 1.5 0 4 0 1 0 5 0 0 1 6 1 0 1 7 1 1 1 8 0.5 1.5 1 9 0 1 1 Daftar vertek dari obyek Gudang (Vertexlist)

normal n x n y n z 0-1 0 0 1-0.707 0.707 0 2 0.707 0.707 0 3 1 0 0 4 0-1 0 5 0 0 1 6 0 0-1 Daftar vektor normal dari obyek Gudang (Vectorlist)

Daftar permukaan dari obyek gudang (facelist) face verteks normal 0 (kiri) 0,5,9,4 0,0,0,0 1(atap kiri) 3,4,9,8 1,1,1,1 2(atap kanan) 2,3,8,7 2,2,2,2 3(kanan) 1,2,7,6 3,3,3,3 4(bawah) 0,1,6,5 4,4,4,4 5(depan) 5,6,7,8,9 5,5,5,5,5 6(belakang) 0,4,3,2,1 6,6,6,6,6 Urutan verteks untuk tiap sisi dinyatakan berlawanan arah jarum jam dilihat dari luar permukaan.

Soliditas. Mesh menyatakan obyek yang padat bila seluruh permukaannya menutup suatu ruang positif dan terbatas. Keterhubungan. Suatu mesh terhubung jika ada jalur yang tidak terputus sepanjang sisi poligon diantara sembarang dua verteks. (Jika suatu mesh tidak terhubung, maka mesh tersebut menyatakan dua obyek). Kesederhanaan. Mesh disebut sederhana bila dia menyatakan obyek yang padat dan tidak berlubang. Kedatar (Planarity). Suatu mesh datar jika setiap permukaan obyek yang dinyatakanya terdiri dari bidang datar. Kecembungan (Convexity). Suatu mesh menyatakan obyek cembung bila garis yang menghubungkan dua titik sembarang pada permukaan obyek berada di dalam obyek.

Sebagai contoh kita akan membuat limas dengan titik-titik (0,0,0), (1,0,0), (0,1,0), dan (0,0,1). Gambar beserta struktur datanya adalah sebagai berikut.

//Program PoligonMesh #include <windows.h> #include <stdlib.h> #include <stdio.h> #include <fstream.h> #include <gl\gl.h> #include <gl\glut.h> #define MAX_LEN 50 int is_depth; /* depth testing flag */ typedef struct GLfloat x,y,z; GLint v; // 0 for vector, 1 for point Point3; typedef struct int vertindex; int normindex; VertexID; typedef struct int nverts; VertexID vert[5]; Face; typedef struct int numverts; Point3 * pt; int numnormals; Point3 *norm; int numfaces; Face * face; Mesh;

void draw(void) // use OpenGL to draw this mesh int f, v, in, iv; fstream instream; instream.open("kubus.txt", ios ::in); if(instream.fail()) return; // open the file GLint numvertex, numface, numnormal; instream >> numvertex >> numnormal >> numface;// read the number of polylines printf("\n numkvertex = %d, %d, %d",numvertex, numface, numnormal); Point3 pt[20], norm[10]; int i,j; for (i=0;i<numvertex;i++) instream >> pt[i].x >> pt[i].y >> pt[i].z; printf("\n titik = %f, %f, %f",pt[i].x, pt[i].y, pt[i].z);

for (i=0;i<numnormal;i++) instream >> norm[i].x >> norm[i].y >> norm[i].z; printf("\n norm = %f, %f, %f",norm[i].x, norm[i].y, norm[i].z); Face fc[20]; for (i=0;i<numface;i++) instream >> fc[i].nverts; printf("\n Jumlah Vertex= %d",fc[i].nverts); for (j=0;j<fc[i].nverts;j++) instream >> fc[i].vert[j].vertindex; printf("\n Vertex Index = %d",fc[i].vert[j].vertindex); for (j=0;j<fc[i].nverts;j++) instream >> fc[i].vert[j].normindex; printf("\n Norm Index = %d",fc[i].vert[j].normindex);

for( f = 0; f < numface; f++) // draw each face glbegin(gl_line_loop); glcolor3f(1.0, f/10, 0.0); for(v = 0; v < fc[f].nverts; v++) glend(); instream.close(); // for each one.. in = fc[f].vert[v].normindex ; // index of this normal iv = fc[f].vert[v].vertindex ; // index of this vertex glvertex3f(pt[iv].x, pt[iv].y, pt[iv].z);

void init(void) glclearcolor(0.0, 0.0, 0.0, 0.0); glmatrixmode(gl_projection); glloadidentity(); glortho(-3.2, 3.2, -2.4, 2.4, 1, 50); glmatrixmode(gl_modelview); glloadidentity(); glulookat(4,4,4,0,1,0,0,1,0); glenable(gl_depth_test); is_depth =1;

void display(void) if (is_depth) glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); else glclear(gl_color_buffer_bit); draw(); glutswapbuffers();

void keyboard(unsigned char key, int x, int y) switch (key) case 'x': case 'X': gltranslatef(5.0, 0.0, 3.0); break; case 'a': case 'A': gltranslatef(5.0, 0.0, 0.0); break; case 'd': case 'D': gltranslatef(-5.0, 0.0, 0.0); break; case 'w': case 'W': case 's': case 'S': case 'u' : case 'U' : case 'n' : case 'N' : gltranslatef(0.0, 0.0, 5.0); break; gltranslatef(0.0, 0.0, -5.0); break; gltranslatef(0.0,5.0,0.0); break; gltranslatef(0.0,-5.0, 0.0); break;

case 'o': case 'O': case 'm': case 'M': case 'l': case 'L': glrotatef(3.0, 1.0, 0.0, 0.0); // rotate up break; glrotatef(-3.0, 1.0, 0.0, 0.0); // rotate down break; glrotatef(3.0, 0.0, 1.0, 0.0); // rotate left case 't': case 'T': if (is_depth) is_depth = 0; gldisable(gl_depth_test); else is_depth = 1; glenable(gl_depth_test); display();

void resize(int width, int height) if (height == 0) height = 1; glmatrixmode(gl_projection); glloadidentity(); /* note we divide our width by our height to get the aspect ratio */ gluperspective(45.0, width / height, 1.0, 400.0); /* set initial position */ gltranslatef(0.0, -5.0, -150.0); glmatrixmode(gl_modelview);

int main (int argc, char **argv) glutinit(&argc, argv); glutinitdisplaymode(glut_double GLUT_RGB); glutinitwindowsize(600, 600); glutinitwindowposition(50, 50); glutcreatewindow("a 3D Object"); init(); glutdisplayfunc(display); glutkeyboardfunc(keyboard); /* set keyboard handler */ glutreshapefunc(resize); glutmainloop(); return 0;

Polyhedra adalah mesh dari polygon sederhana yang menutup ruang terbatas. Dengan kata lain Polyhedron menyatakan obyek padat tunggal. Dengan demikian : Setiap sisi (edge) digunakan bersama oleh dua muka. Minimal tiga sisi bertemu pada tiap titik (Vertex) Permukaan-permukaan obyek tidak saling menempel, kecuali pada sisi bersama. Contoh polihedra adalah PIRAMIDA. DONAT juga polihedra, tetapi bukan polihedra sederhana. GUDANG adalah polihedra yang terdiri dari dua subpolihedra, yaitu bagian gedung dan cerobong asapnya.

Mau bertanya..?