Jumat, 18 Januari 2019

Pengenalan Komputer Grafik



Grafika komputer (Inggris: Computer graphics) adalah bagian dari ilmu komputer yang berkaitan dengan pembuatan dan manipulasi gambar (visual) secara digital. Bentuk sederhana dari grafika komputer adalah grafika komputer 2D yang kemudian berkembang menjadi grafika komputer 3D, pemrosesan citra (image processing), dan pengenalan pola (pattern recognition). Grafika komputer sering dikenal juga dengan istilah visualisasi data.

Sejarah grafika komputer :

Istilah ”Grafik Komputer”ditemukan tahun 1960 oleh William Fetter : pembentukan disain model cockpit (Boeing) dengan menggunakan pen plotter dan referensi model tubuh manusia 3 Dimensi.

Sejarah Perkembangan Komputer Grafik:

Awal tahun 60-an dimulainya model animasi dengan menampilkan simulasi efek fisik.
  • 1961: Edward Zajac menyajikan suatu model simulasi satelit dengan menggunakan teknologi Grafik Komputer.
  • 1963 : -ditemukan Sutherland (MIT)
  • -Sketchpad (manipulasi langsung, CAD)
  • -Alat untuk menampilkan Calligraphic (vector)
  • -Mouse oleh Douglas Englebert
  • 1968 : ditemukan Evans & Sutherland.
  • 1970: Pierre B´eezier mengembangkan kurva B´eezier.
  • 1972: ditayangkannya filmWestworld, sebagai film pertama yang menggunakan animasi komputer.
  • 1974: Ed Catmull mengembangkan z-buffer (Utah). Komputer animasi pendek, Hunger:Keyframe animation and morphing.
  • 1976: Jim Blinn mengembangkan texture dan bump mapping.
  • 1977: Film terkenal Star Wars menggunakan grafik komputer.
  • 1979: Turner Whitted mengembangkan algoritma ray tracing,untuk pesawat Death Star.
  • Pertengahan tahun 70-an hingga 80-an: Pengembangan Quest for realism radiosity sebagai main-stream aplikasi realtime.
  • 1982: Pengembangan teknologi grafik komputer untuk menampilkan partikel.
  • 1984: Grafik Komputer digunakan untuk menggantikan model fisik pada film The Last Star Fighter.
  • 1986: Pertama kalinya Film hasil produksi grafik komputer dijadikan sebagai nominasi dalam Academy Award: Luxo Jr. (Pixar).
  • 1989: Film Tin Toy (Pixar) memenangkan Academy Award.
  • 1995: Diproduksi fillm Toy Story (Pixar dan Disney) sebagai film3D animasi panjang pertama.
  • Akhir tahun 90-an, ditemukannya teknologi visualisasi interaktif untuk ilmu pengetahuan dan kedokteran, artistic rendering, image based rendering, path tracing, photon maps, dll.
  • Tahun 2000 ditemukannya teknologi perangkat keras untuk real-time photorealistic rendering
  • Kemajuan dalam komputer grafis adalah berasal dari seorang mahasiswa MIT, Ivan Sutherland. Pada tahun 1961 Sutherland menciptakan program komputer untuk menggambar yang disebut Sketchpad. Dengan menggunakan Light Pen, Sketchpad dapat menggambar bentuk sederhana pada layar komputer, menyimpan mereka dan bahkan bisa memanggil mereka lagi nanti. Light pen itu sendiri memiliki sel fotolistrik kecil di ujungnya. Sel ini dipancarkan pulsa elektronik setiap kali ditempatkan di depan layar komputer dan pistol elektron layar itu ditembakkan langsung dalam. Dengan waktu yang singkat pulsa elektronik ini tahu dimana lokasi electron gun, ini mudah untuk menentukan persis di mana pena ini di layar pada saat tertentu. Begitu yang ditentukan, komputer kemudian bisa menggambar kursor di lokasi itu.

Sutherland tampaknya terus mencari solusi yang sempurna untuk banyak masalah grafis yang dihadapinya. Bahkan saat ini, banyak standar grafis komputer interface mulai mendapatkan masalah dengan program Sketchpad awal. Salah satu contoh dari hal ini adalah dalam batasan menggambar. Jika seseorang ingin menggambar persegi misalnya, ia tidak perlu khawatir tentang menggambar empat baris sempurna untuk membentuk tepi kotak. Satu hanya dapat menentukan bahwa ia ingin menggambar kotak, dan kemudian tentukan lokasi dan ukuran kotak. Perangkat lunak kemudian akan membangun sebuah kotak yang sempurna, dengan dimensi yang tepat dan di lokasi yang tepat. Contoh lain adalah bahwa perangkat lunak Sutherland model objek – tidak hanya gambar objek. Dengan kata lain, dengan model mobil, orang bisa mengubah ukuran ban tanpa mempengaruhi sisa mobil. Itu bisa meregangkan tubuh mobil tanpa deformasi ban.

Revolusi perangkat Hardware

  1. Hukum Moore : “Setiap 12-18 bulan, kemampuan komputer meningkat dua kali lipat dalam hal harga/performance untuk setiap penggandaan jumlah transistor”.
  2. Memory grafik dan kecepatan jaringan meningkat secara eksponensial, Graphics chips meningkat setiap 6-9 bulan (contoh : Sony Playstation 2, nVidia GeForce FX, Nintendo GameCube, Microsoft Xbox).


Sistem Grafika computer dibedakan antara non-interaktif dan interaktif:

1. Grafika computer non interaktif: dibuat sebagai akhir dari proses dalam bentuk hardcopy.
  • Grafika dengan lineprinter: Sistem computer general purpose dengan perangkat lunak yang sesuai bias digunakan sebagai suatu system grafika (seperti di masa-masa awalnya grafika computer) yaitu dengan mengkombinasikan berbagai karakter dengan cara cetak-tumpuk untuk meniru pola shading (gradasi tingkat keabuan).
  • Grafika dengan plotter dan semcam: terutama untuk grafika “line-drawing”.Grafika dengan hi quality printers: laser, ink-jet, thermal, dsb.
a. Grafika interaktif dapat dibuat dan dimanipulasi secara interaktif pada layar peranti peraga. Peranti-peranti peraga interaktif yang paling umum digunakan: CRT (tabung sinar katoda). Lain-lain: DVST, plasma-panel, LED/LCD, laser, dsb.
Komponen Dasar Sistem Grafik Interaktif :
  • Masukan : mouse, tablet dan stylus, peralatan force feedback, scanner, live video stream, dll
  • Proses dan Penyimpanan
  • Keluaran : layar, printer berbasis kertas, perekam video, non-linear editor, dll
  • Tujuan dari grafika komputer ini adalah untuk memungkinkan manusia berkomunikasi lewat gambar, bagan-bagan, dan diagram.
Bagian dari grafika komputer meliputi:

  • Geometri: mempelajari cara menggambarkan permukaan bidang
  • Animasi: mempelajari cara menggambarkan dan memanipulasi gerakan
  • Rendering: mempelajari algoritma untuk menampilkan efek cahaya
  • Citra (Imaging): mempelajari cara pengambilan dan penyuntingan gambar

Beberapa perangkat Lunak Grafis meliputi:

  • Corel Draw
  • Auto CAD
  • 3D Studio MAX
  • Visio dll.

Aplikasi-aplikasi computer grafik :

Computer-Aided Design (CAD)

CAD adalah alat bantu berbasis komputer yang digunakan dalam proses analisis dam desain, khusunya untuk sistem arsitektural dan engineering. CAD banyak digunakan dalam mendesain bagunan, mobil, pesawat, komputer, alat-alat elektronik, peralatan rumah tangga, dan berbagai produk lainnya. Contoh aplikasinya: AutoCAD.

Computer-Aided Sofware Engineering (CASE)

CASE mirip dengan CAD tetapi digunakan dalam bidang sofware engineering. CASE digunakan dalam memodelkan user requirement, pemodelan basisdata, workflow dalam proses bisnis, struktur program, dan sebagainya. Contoh aplikasi: Rational Rose, SyBase Power Designer

Virtual Reality

Virtual Reality adalah lingkungan virtual yang seakan-akan begitu nyata di mana user dapat berinteraksi dengan objek-objek dalam suasana atau lingkungan 3 dimensi. Perangkat keras khusus digunakan untuk memberikan efek pemadangan 3 dimensi dan memampukan user beriteraksi dengan objek-objek yang ada dalam lingkungan. Aplikasi ini dapat memberikan keutungan berupa mengurangi resiko cedera selama latihan, mengurangi biaya penerbangan, melatih perwira sebelum melakukan terjun payung sesungguhnya.

Visualisasi Data

Visualisasi Data adalah teknik-teknik membuat image, diagram, atau animasi untuk mengkomunikasikan pesan. Visualisasi telah menjadi cara yang efektif dalam mengkomunikasikan baik data atau ide abstrak maupun nyata sejak permulaan manusia.

Pendidikan dan Pelatihan

Model-model yang dihasilkan melalui komputer yang tentunya menggunakan grafis biasa digunakan sebagai alat bantu pendidikan. Model-model seperti proses-proses fisika dan kimia, fungsi-fungsi psikologi, simulasi, dan sebagainya dapat membantu sesorang memahami bagaimana operasi atau proses yang terjadi dalam suatu sistem.

Computer Art

Computer art adalah penggunaan komputer grafis untuk menghasilkan karya-karya seni. Hasil dapat berupa kartun, potret, foto, layout media cetak, logo, lukisan abstrak, desain interior atau eksterior, dan lain sebagainya.

Hiburan

Komputer grafis juga digunakan secara luas pada bidang entertainment khususnya pertelevisian, motion pictures, animasi, video clips, dan sebagainya. Film-film animasi yagn berdar di pasaran seperti Shrek, Monster Inc., anime-anime Jepang, menggunakan komputer grafis.

Video Game

Video game adalah permainan yang melibatkan interaksi dengan user interface untuk menghasilkan umpan balik berupa visualisasi pada perangkat video. Aplikasi banyak beredar di pasaran mulai yang sederhana 2 dimensi, seperti tetris, hingga yang rumit, 3 dimensi, dan memerlukan resource banyak, seperti game sepakbola Winning Eleven. Dari yang yang standalone hingga online network, seperti Ragnarok. Dari PC, console, hingga mobile devices.

Pengolahan Citra

Pengolahan citra berkaitan dengan teknik-teknik untuk modifikasi dna intepretasi citra, meningkatkan kualitas citra, analisis citra, dan mengenali pola-pola visual yang ada dalam suatu citra. Contoh: perbaikan citra sehingga menjadi lebih jelas.

Computer Vision

Compute Vision adalah ilmu pengetahuan dan teknologi dari mesin-mesin yang dapat melihat. Sebagai disiplin ilmu, computer vision berkaitan dengan teori untuk membangun sistem buatan yang dapat menarik informasi dari citra-citra. Informasi tersebut kemudian dapat digunakan sebagai input dalam mengambil keputusan atau tindakan. Data citra yang diambil dapat berupa video, citra dari berbagai kamera, dan sebagainya.

Graphical User Interface

Graphical User Inteface adalah antarmuka grafis yang mempermudah interaksi manusia dengan komputer dan alat-alat yang dikendalikan oleh komputer. GUI sudah sering kita lihat berupa window-window yang digunakan pada sistem operasi Windows, Mac, maupun Linux.

Itulah sedikit informasi yang bisa saya berikan.

Minggu, 13 Januari 2019

Library Grafik


OPENGL

Pengertian OpenGL

OpenGL (Open Graphics Library) adalah suatu spefikasi grafik yang low-level yang menyediakan fungsi untuk mempermudah pekerjaan atau untuk keperluan – keperluan pemrograman grafis (Graphics Programming / GP), termasuk grafik primitif (titik, garis, dan lingkaran). OpenGL(Open Graphic Library) adalah sebuah library terdiri dari berbagai macam fungsi dan biasanya digunakan untuk menggambar sebuah objek 2D ata 3D. OpenGL bersifat Open-Source , multi-platform dan multi-language.

OpenGL juga merupakan suatu antarmuka pemrograman aplikasi (application programming interface (API) yang tidak tergantung pada piranti dan platform yang digunakan, sehingga OpenGL dapat berjalan pada sistem operasi Windows, UNIX, SGI, Linux, frreBSD dan sistem operasi lainnya.

OpenGL pada awalnya didesain untuk digunakan pada bahasa pemrograman C/C++, namun dalam perkembangannya OpenGL dapat juga digunakan dalam bahasa pemrograman yang lain seperti Java, Tcl, Ada, Visual Basic, Delphi, maupun Fortran. Namun OpenGL di-package secara berbeda-beda sesuai dengan bahasa pemrograman yang digunakan.

Sejarah OpenGL

Tahun 1980-an, mengembangkan perangkat lunak yang dapat berfungsi dengan berbagai hardware grafis adalah tantangan nyata. Pengembang perangkat lunak antarmuka dan kebiasaan menulis driver untuk setiap perangkat keras yang menjadikannya semakin mahal dan mengakibatkan banyak duplikasi.

OpenGL Dikembangkan oleh Silicon Graphics (SGI) pada tahun 1990-an. Pendahulu openGL adalah IRIS GL dari Silicon Grapics, yang pada awalnya berupa GL(Glut Library) 2D, yang berevolusi menjadi API program 3D untuk workstation canggih milik perusahaan tersebut.

OpenGL adalah hasil dari usaha SGI untuk mengembangkan dan meningkatkan kemampuan portable IRIS. API grafis yang baru akan menawarkan kemampuan IRIS GL tetapi dengan standar yang lebih terbuka, dengan input dari pembuatan hardware lain dan sistem operasi lain, dan akan memudahkan adaptasi ke hardware platform dan sistem operasi lain. SGI menganggap bahwa IrisGL API itu sendiri tidak cocok untuk membuka karena masalah lisensi dan paten. Juga, IrisGL memiliki fungsi-fungsi API yang tidak relevan dengan grafis 3D. Sebagai contoh, termasuk windowing, keyboard dan mouse API, sebagian karena dikembangkan sebelum Sistem X Window dan Sun’s NEWS sistem dikembangkan.

Untuk lebih mempopulerkan openGL SGI mengijinkan pihak lain untuk mengembangkan standart openGL,dan beberapa vendor menyambut hal tersebut dengan membentuk OpenGL Architecture Review Board (ARB) .

Pendiri openGL adalah SGI, Digital Equepment Corporation, IBM, Intel dan Microsoft, pada tanggal 1 juli 1992 OpenGL versi 1.0 diperkenalkan.

Tahun 1994 SGI mengeluarkan gaggasan yang disebut “OpenGL + +” yang mencakup unsur-unsur seperti grafik adegan-API (mungkin berbasis di sekitar mereka Performer teknologi). Spesifikasi itu beredar di kalangan beberapa pihak yang berkepentingan – tetapi tidak pernah berubah menjadi sebuah produk pada tahun 1995, yang akan menjadi pesaing utama dari OpenGL. Pada tanggal 17 Desember 1997 Microsoft dan SGI memprakarsai Fahrenheit proyek, yang merupakan upaya bersama dengan tujuan mempersatukan OpenGL dan Direct3D antarmuka (dan menambahkan adegan-API grafik juga). Pada tahun 1998 Hewlett-Packard bergabung dengan proyek ini. Ini awalnya menunjukkan beberapa janji untuk membawa dunia komputer grafis 3D interaktif API, melainkan karena kendala keuangan di SGI, alasan strategis di Microsoft, dan kurangnya dukungan industri , itu ditinggalkan pada tahun 1999.

OpenGL mengalami beberapa revisi yang sebagian besar ada penambahan ektensi secara berangsur-angsur pada main body dari API. Contohnya OpenGL 1.1 (1997) ada penambahan glBindTexture. OpenGL 2.0 (2004) memasukkan tambahan yang paling penting yaitu OpenGL Shading Language (GLSL).

GLUT (GL Utility Toolkit)

Pengertian

Dikarenakan OpenGL tidak menyediakan interface sistem window ataupun input, maka untuk tujuan ini aplikasi harus mengunakan keseragaman spesifik platform. Dengan demikian jika aplikasi yang diinginkan tidak hanya berjalan di satu platfrom saja, maka perlu menggunakan GLUT

GLUT merupakan pengembangan dari OpenGL yang didesain untuk aplikasi dengan level kecil hingga menengah dan menggunkan callback function untuk menambahkan interaksi dari user. GLUT menyediakan interface untuk menejemen window, menu, dan peralatan input (keyboard, dan mouse). GLUT juga menyediakan fungsi otomatis untuk menggambar objek primitif (garis, lingkaran, titik, persegi),objek 3 dimensi wire (kerangka) maupun yang solid, seperti cube (kubus), sphere (bola), dan teapot (poci teh), cone (kerucut), torus, dan lain-lain .

GLUT dikembangkan oleh Mark Kilgard, yaitu penulis OpenGL Programming for the X Window System dan The Cg Tutorial: The Definitive Guide to Programmable Real-Time Graphics, ketika dia masih bekerja di Silicon Graphics.

Dua tujuan GLUT ialah menciptakan fleksibitas code antar platform yang dapat dijalankan lebih dari satu sistem operasi (Windows, Linux, Mac OS X, FreeBSD, OpenBSD, NetBSD), dan untuk lebih mudah mempelajari OpenGL. Dengan menggunakan GLUT hanya memerlukan sedikit code dibandingkan dengan OpenGL, tanpa mengetahui spesifikasi sistem operasi, dikarenakan OpenGL adalah sebagai mesin.

Pemrograman Berbasis Event

GLUT pada dasarnya dibangun untuk menciptakan aplikasi grafis menggunakan pemrograman yang bersifat prosedural. Di dalamnya terdapat fungsi main loop yang diatur oleh GLUT dan looping yang terjadi dalam aplikasi bertujuan untuk penanganan fungsi-fungsi callback sebagai input dari user seperti fungsi redraw, mouse, keyboard, joystick, dan lain-lain.

Untuk pemrograman OpenGL menggunakan C++, diperlukan library tambahan yaitu :
  1.  glut.h yang dicopy ke drive:\ Program Files\Microsoft Visual Studio 2010\Vc\include\GL
  2.  glut32.lib yang dicopy ke drive:\ Program Files\Microsoft Visual Studio 2010\Vc\lib
  3.  glut32.dll yang dicopy ke drive:\ Windows\System

Menejemen Window

Ada 5 fungsi yang harus dipanggil untuk melakukan instalansi window yaitu:
  1. glutInit(int argc,char**argv), Fungsi ini menginisialisasi glut dan memproses argument command_line yg disertakan(jika ada). Fungsi ini harus di panggil pertama kali sebelum pemanggilan terhadap fungsi-fungsi yang lain.
  2. glutInitDisplayMode(unsigned intmode), Fungsi ini digunakan untuk menentukan apakah akan menggunakan model pewarnaan RGBA atau indek warna. Dengan fungsi ini juga bisa menentukan apakah akan menggunakan windows buffer single atau double.
  3. GlutInitWindowPosisition(int.x,int.y), Fungsi ini menentukan letak window dengan patokkannya ialah pada window kiri atas.
  4. glutInitWindowSize(int width,int height), fungsi ini menspesifikasikan ukuran window yang dibuat dalam pixel.
  5. glutCreateWindow(char *string), fungsi untuk membuat window dalam konteks openGL, dan akan menghasilkan identitas atau judul window tersebut.

 Windowing dengan GLUT

Display Callback

  1. glutDisplayFunc(void(*func)(void), Fungsi ini memanggil fungsi lain yg menentukan konten dari windows yg telah di buat sebelumnya.
  2.  glutPostRedisplay(void), Untuk mengubah konten window
  3. glutMainLoop(void), Fungsi untuk event perulangan, display pada callback akan terus ditampilkan selama aplikasi itu tidak ditutup.

Sabtu, 12 Januari 2019

PEMBUATAN PRIMITIVE DRAWING


Primitif Drawing

OpenGL memiliki beberapa obyek dasar yang disebut primitif.Gambar-gambar kompleks dibuat dari kombinasi obyek-obyek primitif ini. Primitif mudah digambar pada layar monitor karena menggunakan persamaan geometrik sederhana. Contoh primitif / grafik dasar adalah :
  1. Titik
  2. Garis
  3. Segitiga
  4. Polygon

Line (Garis)

Pengertian garis menurut Leksikon Grafika adalah benda dua dimensi tipis memanjang. Sedangkan Lillian Gareth mendefinisikan garis sebagai sekumpulan titik yang bila dideretkan maka dimensi panjangnya akan tampak menonjol dan sosoknya disebut dengan garis. Terbentuknya garis merupakan gerakan dari suatu titik yang membekaskan jejaknya sehingga terbentuk suatu goresan. Untuk menimbulkan bekas, biasa mempergunakan pensil, pena, kuas dan lain-lain. Bagi senirupa garis memiliki fungsi yang fundamental, sehingga diibaratkan jantungnya senirupa. Garis sering pula disebut dengan kontur, sebuah kata yang samar dan jarang dipergunakan.

Pentingnya garis sebagai objek/elemen senirupa, sudah terlihat sejak dahulu kala.Nenek moyang manusia jaman dulu, menggunakan garis ini sebagai media ekspresi senirupa di gua-gua.Mereka menggunakan garis ini untuk membentuk obyek-obyek ritual mereka.Sebagai contoh adalah lukisan di dinding gua Lascaux di Prancis, Leang-leang di Sulawesi, Altamira di Spanyol dan masih banyak lainnya.

Selain berupa lukisan, nenek moyang manusia juga menggunakan garis sebagai media komunikasi, seperti huruf paku peninggalan bangsa Phoenicia (abad 12 – 10 SM) yang berupa goresan-goresan.

Disamping potensi garis sebagai pembentuk kontur, garis merupakan elemen untuk mengungkapkan gerak dan bentuk.Baik bentuk dua dimensi maupun tiga dimensi.

Circle (Lingkaran)

Lingkaran adalah suatu garis lengkung yang kedua ujungnya dan semua titik yang terletak pada garis lengkung tersebut mempunyai jarak yang sama jauh terhadap suatu titik tertentu.

“Dalam geometri Euklid, sebuah lingkaran adalah himpunan semua titikpada bidang dalam jarak tertentu, yang disebut jari-jari, dari suatu titik tertentu, yang disebut pusat. Lingkaran adalah contoh dari kurva tertutup sederhana, membagi bidang menjadi bagian dalam dan bagian luar.”

Lingkaran didefiniskan sebagai garis melengkung yang kedua ujungnya bertemu pada jarak yang sama dari titik pusat. Lingkaran adalah contoh kurva tertutup sederhana yang merupakan himpunan titik pada ruang dua dimensi yang berjarak sama dengan suatu titik tertentu yang disebut pusat lingkaran. Lingkaran adalah bentuk sempurna dari semua benda yang ada di alam semesta karena lingkaran tidak mempunyai ujung dan pangkal.

Arc

Dalam geometri Euklides, sebuah arc adalah segmen tertutup kurva dapat diturunkan dalam dua dimensi pesawat; sebagai contoh, busur yang melingkar adalah segmen lingkaran.Jika busur segmen menempati lingkaran besar (atau elips besar), itu dianggap segmen besar-arc. Dalam objek 2D biasanya Digunakan untuk menggambar kurva/garis lengkung/busur.

Polygon

Poligon berasal dari kata polygon yang berarti poly : banyak dan gon(gone) : titik. Yang kita maksud disini adalah poligon yang digunakan sebagai kerangka dasar pemetaan yang memiliki titik titik dimana titik tersebut mempunyai sebuah koordinat X dan Y.

“Poligon (secara literal “banyak sudut”) merupakan bentuk datar yang terdiri dari garis lurus yang bergabung untuk membentuk rantai tertutup.

Poligon digunakan untuk merepresentasikan obyek-obyek duadimensi.Satu poligon paling sedikit dibatasi oleh tiga garis di antara tiga titik yang saling bertemu membentuk bidang.Grafik tidak hanya terdiri dari gambar-gambar statis. Grafik tersebut dapat dimanipulasi secara dinamis, yaitu :

1. Motion dynamics : obyek / background bergerak

2. Update dynamics : obyek berubah bentuk, warna, dll.

Itulah sedikit informasi yang bisa saya berikan.

Definisi Objek Grafik 2 Dimensi


Animasi 2D

Merupakan dimensi panjang dan lebar dalam satu bidang datar, jadi hanya ada panjang dan lebar saja tanpa adanya dimensi tebal. Bidang dua dimensi dapat digambarkan dengan sumbu X dan Y. Agar dapat tampil dengan sempurna, gambar yang akan ditampilkan dengan teknik ini harus memiliki nilai koordinat x dan y minimum 0 dan maksimum sebesar resolusi yang digunakan.

Definisi warna grafik 2 dimensi:

  • Warna terdiri dari 3 elemen warna yaitu red (r), green (g) dan blue (b) yang nilainya antara 0 dan 1
  • Membuat obyek 2 dimensi

Contoh obyek 2 dimensi

#include<GL/glut.h>
voiddisplay()
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 0.0);
glBegin(GL_POINTS);
glVertex3f (0.0, 0.0, 0.0);
glVertex3f (0.0, 0.8, 0.0);
glVertex3f (0.8, 0.0, 0.0);
glVertex3f (0.0, -0.8, 0.0);
glVertex3f (-0.8, 0.0, 0.0);
glEnd();
glFlush ();
}

voidkunci(unsigned char key, int x, int y)
{
switch(key)
{
/* aplikasi berhenti ketika tombol q ditekan */
case27 :
case’q’:
exit(0);
break;
}
glutPostRedisplay();
}

intmain(int argc, char *argv[])
{
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutCreateWindow(“Primitif”);
glutDisplayFunc(display);
glutKeyboardFunc(kunci);
glutMainLoop();
return0;
}

Definisi obyek grafik 2D


1. Obyek grafis 2D adalah sekumpulan titik-titik 2D yang dihubungkan dengan garis lurus baik berupa polyline,polygon atau kurva

2. Obyek grafik 2D didefinisikan sebagai sekumpulan titik 2D yang secara komputasi dinyatakan sebagai array 1D,atau linked-list

3. Definisi Warna obyek grafik 2D:

typedef struct {
float r;
float g;
float b;
} color_t;

4. Warna terdiri dari 3 elemen warna:

yaitu red (r), green (g) dan blue (b) yang nilainya antara 0 dan 1
void setColor(color_t col)
{
glColor3f(col.r, col.g, col.b);
}


5. Membuat struktur data obyek 2D
6. Macam-Macam objek 2D :
  • · Line
  •  Circle
  •  Arc
  •  Polygon
  •  Text
  •  Section
  •  Rectangle
  •  Ellips
  •  Donut
  •  Star
  •  Helix

Dari macam-macam objek 2d ini saya akan membahas 3 macam:

Circle

Circle atau lingkaran adalah object 2 dimensi yang memiliki ukuran diameter dan jari-jari. Circle atau lingkaran merupakan kumpulan titik-titik yang tak berhingga dan saling berhubung.

Line

Objek line/garis adalah objek salah satu 2 dimensi yang sangat mendasar dan sering digunakan untuk perancangan gambar kerja.Lineberasal dari 2 titik yang saling terhubung.

Polygon

Polygon adalah suatu fungsi yang mirip dengan polyline, hanya sajahasilnya adalah kurva tertutup. Pada polygon digunakan konsep array dalam menyatakan objek 2D sebagaikumpulan titik 2D. Polygon digunakan untuk merepresentasikan objek-objek duadimensi.
Membuat struktur data warna

Color, untuk memberi warna pada objek, seperti titik atau garis, dapat dilakukan dengan menggunakan fungsi àglColor3f(red,green,blue). Di mana red, green, blue berada pada 0 sampai dengan 1, yang menunjukkan skala pencerahan dari masing-masing skala. Beberapa fungsi color :
  1. glColor3f(0,0,0);//black
  2. glColor3f(0,0,1);//blue
  3. glColor3f(0,1,0);//green
  4. glColor3f(0,1,1)//cyan
  5. glColor3f(1,0,0)//red
  6. glColor3f(1,0,1)//magenta
  7. glColor3f(1,1,0);//yellow
  8. glColor3f(1,1,1);//white

Menerapkan Transformasi obyek 2D



1. Struktur data titik dan vector

Struktur data dari titik 2D> typedef struct {

float x,y;

} point2D_t;

Struktur data dari vektor 2D > typedef struct {

float v[3];

} vector2D_t;

2. Perubahan struktur data

Fungsi ini digunakan untuk memindahkan tipe data titik menjadi tipe data vektor.Hal ini sangat berguna untuk operasional matrik yang digunakan dalam melakukan transformasi dan pengolahan matrik pada grafika komputer.

Point 2 Vector :

vector2D_t point2vector(point2D_t pnt)
{
vector2D_t vec;
vec.v[1]=pnt.x;
vec.v[2]=pnt.y;
vec.v[3]=1.;
}


Point 2 Point :

Fungsi ini digunakan untuk memindahkan tipe data vektor menjadi tipe data titik. Hal ini sangat berguna untuk penyajian grafis setelah proses pengolahan matrik yang dikenakan pada obyek 2D. 

point2D_t vector2point(vector2D_t vec)
{
point2D_t pnt;
pnt.x=vec.v[1];
pnt.y=vec.v[2];
}


3. Translasi

Translasi adalah perpindahan obyek dari titik P ke titik P’ secara linier.

4. Scalling

Scaling m adalah perpindahan obyek dari titik P ke titik P’, dimana jarak titik P’ adalah m kali titik P

5. Rotasi

Rotasi adalah perpindahan obyek dari titik P ke titik P’, yang berupa pemindahan berputar sebesar sudut θ

6. Perkalian Matrix

Perkalian matrik dengan matrik menghasilkan matrik • Perkalian matrik dengan vektor menghasilkan vektor Perkalian matrik ini digunakan untuk operasional transformasi dari obyek 2D dan untuk komposisi (menggabungkan) tranformasi.
Perkalian matrik a dan matrik b menghasilkan matrik c yang dirumuskan dengan
dimana i dan j bernilai 0 s/d 2

7. Komposisi Transformasi

Komposisi transformasi adalah menggabungkan beberapa tranformasi, sehingga dapat menghasilkan bentuk transformasi yang lebih kompleks
Komposisi tranformasi dapat dilakukan dengan mengalikan matrik-matrik transformasi

PEMROGRAMAN GRAFIS 3D DENGAN OPENGL DAN GLUT



Sebuah dunia 3d terdiri dari 4 elemen, yaitu objek atau grup objek, material objek, pencahayaan, dan camera, Objek 3d dari OpenGL terdiri dari beberapa proses sebelum ditampilkan pada suatu window.

objek melewati modelview matrix -> clipping ->projection matrix -> viewport matrix -> window
sebuah matrik hanya merupakan operasi matematika matrix sederhana. Matrix-matrix mentransformasikan objek menjadi tampilan sesuai yang diinginkan.

code dibawah adalah contoh mengatur kamera:

void setCamera()
{
//set the camera
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(3.3,3.3,3.0,0,0.25,0,0.0,1.0,0.0);
}

Suatu kamera mempunyai prinsip dengan mata. Pada dunia 3d sebuah kamera mempunyai titik posisi dan titik arah pandang dalam koordinat 3d x,y,z. posisi kamera sama dengan posisi “dari”mana kita melihat objek. titik arah pandang adalah arah “ke”mana mata kita memandang.

Pada OpenGL pengaturan suatu proyeksi diatur dengan mengatur matrix modelview. bisa dilihat pada code diatas bahwa ddibawah matrix model view di load suatu matriks identitas.


void cube()
{
//menggambar kubus dan transformasi tarnslasi ke titik 0.5 0.5 0.5 dan skala 1 1 1
glPushMatrix();
glTranslated(0.5,0.5,0.5);//cube
glScaled(1.0,1.0,1.0);
glutSolidCube(1.0);
glPopMatrix();
}


fungsi diatas adalah fungsi untuk menggambar model kubus solid. GLUT menyediakan objek sederhana yang langsung bisa dipanggil dengan mudah kerangka kubus dgn memanggil fungsi glutWireCube(x). Pada code diatas sebelum fungsi pemanggil obejk kubus dipanggil terjadi 2 buah transformasi yaitu skala dan rotasi. Tanpa ada push dan pop serta transformasi secara default objek akan dirender pada skala default dan posisi default yaitu x,y,z = 0 0 0.

Operasi push dan pop matriks adalah operasi penambahan stack matriks pada modelview matriks untuk transformasi. tanpa push berarti menambahkan matriks, pada code diatas ditambahkan transalasi atau pergeseran dx,dy,dz = 0,5 0,5 0,5. operasi pop . Matriks tarnsformasi dirubah dengan menambahkan translate dan scale pada stack matriks model view sehingga objek kubus yang dipanggil melalui perhitungan tarnsformasi. glPop mengeluarkan matriks tarnsformasi keluar dari tumpukan sehingga mengambalikan matriks modelview menjadi matriks identitas.

code lengkap :

#include <Windows.h>
#include <iostream>
#include <gl\GL.h>
#include <gl\GLU.h>
#include <gl\glut.h>
#include <math.h>

void cube()
{
//menggambar kubus dan transformasi tarnslasi ke titik 0.5 0.5 0.5 dan skala 1 1 1
glPushMatrix();
glTranslated(0.5,0.5,0.5);//cube
glScaled(1.0,1.0,1.0);
glutSolidCube(1.0);
glPopMatrix();
}

void setMaterial()
{
//set properties of surfaces material
GLfloat mat_ambient[] = {0.7f,0.7f,0.7f,1.0f}; // ada 4 jenis material yang dipakai, dengan kombinasi warna tertentu
GLfloat mat_diffuse[] = {0.6f,0.6f,0.6f,1.0f};
GLfloat mat_specular[] = {1.0f,1.0f,1.0f,1.0f};
GLfloat mat_shininess[] = {50.0f};
glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);
glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);
}

void setLighting()
{
//set light sources
GLfloat lightIntensity[] = {0.7f,0.7f,0.7f,1.0f};//mensetting pencahayaan
GLfloat light_position[] = {2.0f,6.0f,3.0f,0.0f};
glLightfv(GL_LIGHT0,GL_DIFFUSE,lightIntensity);
glLightfv(GL_LIGHT0,GL_POSITION,light_position);
}


void setViewport()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
double winHt = 1.0;//half height of the window
glOrtho(-winHt*64/48,winHt*64/48,-winHt,winHt,0.1,100.0);
}


void setCamera()
{
//set the camera
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(3.3,3.3,3.0,0,0.25,0,0.0,1.0,0.0);
}


void displayObject()
{
setMaterial();
setLighting();
setViewport();
setCamera();
//startDrawing
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
cube();//memanggil fungsi menggambar kubus
glFlush();//mengirim smua objek untuk dirender
}


void main(int argc, char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(640,480);
glutInitWindowPosition(100,100);
glutCreateWindow(“simple 3d scene”);
glutDisplayFunc(displayObject);//fungsi dari display object yang menggabungkan kubus lighting material dan kamera
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glEnable(GL_NORMALIZE);
glClearColor(1.0f,1.0f,1.0f,0.0f);
glViewport(0,0,640,480);
glutMainLoop();
}


output :

voila sebuah kubus berwarna abu-abu tergambar. Namun kubus tersebut kurang tampak realistis karena proyeksi yang digunakan adalah ortogonal buka persepektif. Proyeksi perspektif akan membuat objek semakin realistis dengan menghadirkan efek jauh dekat objek.

Sekian dan Terimakasih. Semoga bermanfaat.

Tranformasi 3 Dimensi



Transformasi 3D pada dasarnya hampir sama dengan transformasi 2D, hanya pada 3D kita menghitung sumbu Z. Sama seperti pada 2D, ada tiga transformasi dasar yang dapat dilakukan terhadap verteks, yaitu:
  1. Translasi. 
  2. Pensekalaan. 
  3. Rotasi. 

Titik hasil transformasi dapat diperoleh melalui rumus affine transformation

Q = P * M + tr

Dimana:

Q: (Qx, Qy, Qz) menyatakan matrix 1×3 yang berisi titik hasil transformasi.

P: (Px, Py, Pz) menyatakan matrik 1×3 yang berisi titik yang akan ditransformasi.

tr: (trx, try, trz) menyatakan matriks 1×3 yang berisi banyaknya pergeseran sumbuk x,y, z.

M: Matriks transformasi berukuran 3×3 seperti berikut


Translansi

Translasi dilakukan dengan menggunakan matriks sebagai berikut:



Scalling (Penskalaan)

Penskalaan dilakukan dengan mengisi tr = (0,0,0) dan matriks M diatur seperti beikut.


Rotasi

Berbeda dengan rotasi di 2D yang menggunakan titik pusat(0,0) sebagai pusat perputaran,
rotasi 3D menggunakan sumbu koordinat sebagai pusat perputaran. Dengan demikian ada 3
macam rotasi yang dapat dilakukan, yaitu:
  1. Rotasi terhadap sumbu X 
  2. Rotasi terhadap sumbu Y 
  3. Rotasi terhadap sumbu Z 

Rotasi terhadap sumbu X, Y, dan Z diperlihakan seperti pada gambar berikut



Mengingat ada 3 buah sumbu rotasi maka matriks transformasi yang digunakan juga bergantung kepada sumbu putar. Adapun isi masing-masing transformasi sesuai dengan sumbu putar didefinisikan sebagai berikut:




Sekian dan terimakasih.