Materi Pemrograman Grafik

Posted by bibil23 on November 03, 2016 in | No comments
Download Filenya di sini 


Kompetensi Dasar :

           
Ø  Memahami Grafik Komputer & Pemakainya …………………………………………………. 2
Ø  Memahami Konsep Dasar Library Grafik………………………………………………………… 9
Ø  Memahami Pembuatan Primitif Drawing……………………………………………………….. 12
Ø  Memahami Grafik 2 Dimensi…………………………………………………………………………. 17
Ø  Menerapkan Tranformasi Objek 2 Dimensi……………………………………………………. 21
Ø  Menerapkan Pembuatan Model Objek 2 Dimensi…………………………………………. 28








Dewasa ini perkembangan computer begitu pesat yang didukung dari beberapa prosesor dan kartu grafis yang canggih untuk mendukung kebutuhan manusia khususnya dalam bidang teknologi. Salah satunya adalah dalam bidang grafik computer dan pengolahan citra.
Secara garis besar grafik computer merupakan proses untuk menciptakan suatu gambar bersadarkan ide atau deskripsi menjadi sebuah gambar,  sedangkan pengolahan citra (Image Prosesing) merupakan suatu perbaikan kualitas agar mudah di interpretasi oleh manusia atau computer.
Pada pengolahan citra dan grafik computer penerapannya tidak hanya pada teknik informasi saja, akan tetapi hampir semua bindang ilmu pengetahuan khususnya teknologi mengunakan grafik computer dan pengolahan citra seperti arsitektur, desain, simulasi dan lain-lain
Dalam makalah ini,  saya selaku penulis  akan mengulas sedikit mengenai pengolahan citra dan grafik computer, serta penerapannya dalam kedua bidang ilmu tersebut.


GRAFIKA KOMPUTER


Grafika Komputer adalah proses untuk menciptakan suatu gambar berdasarkan deskripsi obyek maupun latar belakang yang terkandung pada gambar tersebut.  Grafika komputer merupakan teknik untuk membuat gambar obyek sesuai dengan obyek tersebut di alam nyata (realism).
 Grafika komputer bertujuan menghasilkan gambar/citra (lebih tepat disebut grafik/picture) dengan primitif-primitif geometri seperti garis, lingkaran, dsb.  Primitif-primitif geometri tersebut memerlukan data deskriptif untuk melukis elemen-elemen gambar. Data deskriptif : koordinat titik, panjang garis, jari-jari lingkaran, tebal garis, warna, dsb. Grafika komputer berperan dalam visualisasi dan virtual reality.
Semakin canggih paralatan pendukung grafik komputer yang beredar di pasaran maka semakin banyak bidang yang memanfaatkan grafik komputer. Pada kehidupan sehari-hari semakin sering memanfaatkan grafik komputer dalam memvisualisasikan kegiatan-kegiatan yang sedang berlangsung di lingkungan tersebut. Berikut ini adalah beberapa contoh penerapan grafik computer berbagai bidang:


1.      Video Game

Video games merupakan permainan yang melibatkan interaksi dengan user interface untuk menghasilkan umpan balik berupa visualisasi pada perangkat video. Video games yang beredar di pasaran ada yang 2D dan ada yang 3D.
Dengan adanya kemajuan yang pesat dibidang grafik computer, video games saat ini kebanyak adalah 3D dan detail gambar yang dihasilkan sangat halus dan mirip dengan objek asli. Tapi tentunya untuk memainkan video games yang seperti ini diperlukan pula kemampuan computer yang bagus agar tidak terjadi lagging saat games ini dimainkan



2.      Dalam computer-aided design (CAD)
Grafika komputer bisa digunakan untuk merancang komponen-komponen dari sistem mekanis, elektris, elektro-mekanis maupun piranti lainnya. Sistem-sistem tersebut mencakup struktur bangunan, badan-badan mobil, pesawat terbang dan sebagainya. Penekanan di bidang tersebut adalah dihasilkannya citra dengan ketelitian yang sangat tinggi. Selain itu citra yang dihasilkan dari CAD bisa dipakai sebagai masukan bagi suatu sistem yang akan mengevaluasi model yang digambar sesuai kebutuhan.
CAD sangat membantu bagi para arsitek, karena jika dia melakukan kesalahan dalam pembuatan sebuah desain, dia tinggal mengeditnya supaya benar. Jika arsitek mengerjakan desain dengan cara primitive, jika terdapat kesalahan maka dia akan membuatnya dari ulang. Dalam hal perhitungannya pun, angka yang dihasilkan CAD pasti lebih absolute. Contohnya adalah Autocad, 3ds Max, dan lain-lain.



3.      Dalam bidang antarmuka grafis (Graphical User Interface/GUI)
grafika komputer seolah-olah menyediakan suatu bahasa antarmuka pemakai (user interface)  yang baru. Hal itu dikarenakan dialog antara pemakai dan komputer tidak lagi hanya dilakukan melalui suatu perintah yang harus diketikkan, tetapi pemakai juga bisa memilih suatu simbol atau icon yang tersedia untuk mengerjakan aktivitas yang diinginkan. Pemilihan icon bisa dilakukan menggunakan piranti pembantu seperti mouse, lighpen dan lainnya.



4.      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. Contoh: Simulasi SIM, Simulasi pesawat terbang aplikasi VR parachute trainer yang digunakan oleh U.S. Navy untuk latihan terjun payung. Aplikasi ini dapat memberikan keutungan berupa mengurangi resiko cedera selama latihan, mengurangi biaya penerbangan, melatih perwira sebelum melakukan terjun payung sesungguhnya.









PENGOLAHAN CITRA

Pengolahan citra adalah pemrosesan citra, khususnya menggunakan komputer, menjadi citra yang kualitasnya lebih baik dan sesuai dengan keinginan pemakai. Pengolahan citra bertujuan untuk memperbaiki kualitas citra agar mudah diinterpretasi oleh manusia atau mesin (dalam hal ini komputer).
Teknik-teknik pengolahan citra mentransformasikan citra ke citra yang lain. Jadi masukannya adalah citra dan keluarannya juga citra, namun citra keluaran atau hasil dari pengolahan citra mempunyai kualitas lebih baik dari pada citra masukan.
Berikut ini adalah contoh penerapan pengolahan citra dalam berbagai bidang:

1.      Identifikasi Objek
Yaitu pengolahan citra digital yang mampu mengidentifikasi jenis atau banyaknya objek dalam suatu citra contohnya adalah Aplikasi face detection, aplikasi ini mampu mengidentifikasi wajah seseorang 



2.      Bidang Kesehatan
Disini bidang kesehatan bertujuan untuk rontgen tubuh manusia yang berfungsi untuk  mengetahui penyakit yang ada didalam tubuh manusia. Dengan mengunakan sinar x yang di tembakan ke tubuh manusia sehingga menjadi protret tubuh manusia bagian dalam dan kemudian diolah untuk mempermudah para medis untuk melakukan analias terhadap penyakit.



3.      Teknologi Pengamanan
Suatu system mengalami kemajuan pesat akibat pesatnya perkembangan pengolahan citra pada bidang biometrika. Sebagai contoh pemanfaatan sidik jari, retina mata, wajah dan biometrika yang lainnya itu semua dipergunakan untuk mengidentifikasi seseorang pada sytem keamanan 



4.   Mikroskop Eletron

Adalah salah satu contoh dari pengolahan citra dalam bidang kedokteran, yang di maksud dengan mikroskop elektron adalah sebuah mikroskop yang dapat memperbesar detail sangat kecil dengan kekutan sehingga menyelesaikan tinggi akibat penggunaan elektron sebagai sumber penerangannya. Pembesaran dalam hal ini di tingkat hingga 2.000.000 kali. Adapun kegunaan dari mikroskop elektron yaitu digunakan dalam patologi anatomi. Patologi anatomi ini berfungsi untuk mengindentifikasi organel dalam sel namun kegunaanya telah sangat dikurangi dengan immunhistochemistry tetapi masih tak tergantikan untuk diagnosis penyakit ginjal, identifikasi sindrom silia immotile














   








Memahami Konsep Dasar Library Grafik

-      OpenGL adalah suatu library grafis standard yang digunakan untuk keperluan-keperluan pemrograman grafis, Selain OpenGL, library grafis yang banyak digunakan adalah DirectX.
-      OpenGL bersifat Open-Source, multi-platform dan multi-language. Saat ini semua bahasa pemrograman mendukung OpenGL. Dan OpenGL bisa bekerja dalam lingkungan Windows, Unix, SGI, Linux, free BSD dll.

4.1  LIBRARY OpenGL-GLUT

-      Library dasar dari OpenGL adalah GLUT, dengan fasilitas yang bisa dikembangkan.
-      Untuk sistem operasi Windows, library ini terdiri dari 3 files yaitu:
a. glut.h
b. glut32.lib
c. glut32.dll

5.          Instalasi GLUT  OpenGL

-      Copykanfile glut.h didalam folder c:\Program Files\Microsoft Visual Studio\VC98\Include\GL
-      Copykanfile glut32.lib didalamfolder c:\Program Files\Microsoft Visual Studio\VC98\lib
-      Copykanfile glut32.dll didalam folder c:\Windows\System32
 6.         Mengenal Pemrograman Grafis

-      Pemrograman grafis adalah pemrograman yang digunakan untuk menghasilkan gambar pada komputer menggunakan library yang ada.
-      Teknik-teknik pemrograman grafis ini didasari oleh teknik-teknik menggambar dengan pemakaian geometri sebagai dasar struktur datanya
-      Hasil pemrograman grafis adalah visualisasi grafis.

 7.         Struktur dasar Pemrograman Grafika menggunakan OpenGL

#include <GL/glut.h>
void userdraw(void)
{// Disinitempatuntukmenggambar}
void display(void) {
glClear(GL_COLOR_BUFFER_BIT);
userdraw();
glutSwapBuffers();
}
intmain(intargc,char**argv){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowPosition(100,100);
glutInitWindowSize(640,480);
glutCreateWindow(“Drawing by AchmadBasuki");
glClearColor(0.0,0.0,0.0,0.0);
gluOrtho2D(-320.,320.,-240.0,240.0);
glutIdleFunc(display); glutDisplayFunc(display);
glutMainLoop();
return 0;
}



7.1  #INCLUDE <GL/glut.h>

a. Pemrograman grafis menggunakan OpenGL-GLUT membutuhkan header glut.h yang ada di folder
c:\Program Files\Microsoft Visual Studio\VC98\bin\GL


7.2  GLvoid userdraw(void) {// Disini tempat untuk menggambar}

a. Fungsi userdraw adalah suatu fungsi untuk membuat kode program untuk menghasilkan suatu gambar #include <GL/glut.h>void userdraw(void) {// Disinitempatuntukmenggambar}

7.3  Glut InitWindowPosition(100,100); glut InitWindowSize(640,480);

a. Membuat windows dengan ukuran(640,480) dengan titik kiri atas jendela diletakkan pada posisi(100,100) dilayar komputer

7.4  Glut CreateWindow(“DrawingBy Rizky keyvin andrey");

a. Memberi judul pada windows dengan“Drawing By Rizky keyvin andrey”

7.5  glClearColor(1.0,1.0,1.0,0.0);

a. Mendefinisikan warna dari windows yang dibuat dengan warna(1,1,1) yaitu warna putih

7.6 gluOrtho2D(-320.,320.,-240.,240.);

a. Mendefinisikan besarnya sistem koordinat dengan range sumbux adalah[-320,320] dan range untuk sumbuy adalah[-240,240]








Memahami Pembuatan Primitif Drawing

MATERI
•Sistem Koordinat 2D
•Menggambar Titik
•Menggambar Garis
•Menggambar Polyline
•Menggambar Polygon
•Mengubah Warna

 1.         SIMTEM KOORDINAT 2D


1.1  CONTOH SISTEM KOORDINAT DALAM OpenGL

glutInitWindowPosition(100,100);
glutInitWindowSize(640,480);


 gluOrtho2D(-320.,320.,-240.,240.);


                                        

 2.       MENGGAMBAR TITIK
a.   glVertex2i(x,y)
Untuk menggambar titik diposisi(x,y) dimana x dan y didefinisikan sebagai bilangan bulat(integer)

b.  glVertex2f(x,y)
glVertex2d(x,y)
Untuk menggambar titik diposisi(x,y) dimana x dan y didefinisikan sebagai bilangan pecahan(float/double)
Menggunakan library glBegin(GL_POINTS)

2.1  CONTOH MENGGAMBAR TITIK

a. glBegin(GL_POINTS);
glVertex2i(100,50);
glVertex2i(100,130);                     
glVertex2i(150,130);
glEnd();
b. drawDot(100,50);
drawDot(100,130);
drawDot(150,130);









2.2  FUNGSI UNTUK MENGGAMBAR TITIK

a. void drawDot(intx, inty)
{ glBegin(GL_POINTS);
glVertex2i(x,y);
glEnd();
}
Fungsi ini digunakan bila x dan y didefinisikan sebagai integer

b. void drawDot(floatx, float y)
{ glBegin(GL_POINTS);
glVertex2f(x,y);
glEnd();
}
Fungsi ini digunakan bila x dan y didefinisikan sebagai float

2.3  MENGUBAH UKURAN TITK
a. drawDot(100,50);
drawDot(100,130);
glPointSize(4);
drawDot(150,130);


 3.         MENGGAMBAR GARIS

Untuk membuat garis diperlukan libraryGL_LINES dengan menyatakan titik awal dan titik akhir dari garis.
a. glBegin(GL_LINES);
glVertex2f(100,100);
glVertex2f(200,150);
glEnd();






3.1  FUNGSI UNTUK MENGGAMBAR GARIS
a. void drawLine(intx1,int y1,int x2,int y2)
{   glBegin(GL_LINES);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glEnd();
}

b. void drawLine(floatx1,float y1,float x2,float y2)
{   glBegin(GL_LINES);
glVertex2f(x1,y1);
glVertex2f(x2,y2);
glEnd();
}

3.2  CONTOH MENGGAMBAR GARIS

a. drawLine(100,100,200,150);



 4.         MENGGAMBAR POLYLINE

Polyline adalah sekumpulan garis yang terhubung satu dengan yang lainnya hingga membentuk sebuah obyek gambar

a. glBegin(GL_LINE_STRIP);
glVertex2f(x1,y1);
glVertex2f(x2,y2);
glVertex2f(x3,y3);
……………………………………………
glVertex2f(xn,yn);
glEnd();
   

4.1  CONTOH MENGGAMBAR POLYLINE
a. glBegin(GL_LINE_STRIP);
glVertex2f(100,100);
glVertex2f(200,150);

glVertex2f(300,50);
glEnd();


 5.         MENGGAMBAR POLYGON

Polygon adalah sekumpulan garis yang terhubung satu dengan yang lainnya dan berbentuk kurva tertutup hingga membentuk sebuah obyek gambar.

a. glBegin(GL_LINE_LOOP);
glVertex2f(x1,y1);
glVertex2f(x2,y2);
glVertex2f(x3,y3);
……………………………………………
glVertex2f(xn,yn);
glEnd();

5.1  CONTOH MENGGAMBAR POLYGON
a. glBegin(GL_LINE_LOOP);
glVertex2f(100,100);
glVertex2f(200,150);
glVertex2f(300,50);
glEnd();


 6.         MENGUBAH WARNA

a. glColor3f(red,green,blue);

red, green, blue nilainya antara 0 sampai dengan 1, letaknya sebelum obyek digambar


b. glColor3f(0.,0.,0.);//black
glColor3f(0.,0.,1.);//blue glColor3f(0.,1.,0.);//green
glColor3f(0.,1.,1.);//cyan glColor3f(1.,0.,0.);//red glColor3f(1.,0.,1.);//magenta glColor3f(1.,1.,0.);//yellow
glColor3f(1.,1.,1.);//white

6.1  CONTOH MENGUBAH WARNA
a. glColor3f(0,0,0);
drawDot(100,50);
glColor3f(1,0,0);
drawDot(100,130);
glColor3f(0,0,1);
drawDot(150,130);


6.2  CONTOH GAMBAR

•Buatlah latar belakang windows menjadi hitam dengan mengubah afungsi glClearColor menjadi glClearColor(0.0,0.0,0.0,0.0); pada main()
•Isikanprogram berikutpadauserdraw()

a. float x,y;
for(inti=0;i<1000;i++){ x=640*(float)rand()/RAND_MAX-320;
y=480*(float)rand()/RAND_MAX-240;
drawDot(x,y);
}


Memahami Grafik 2 Dimensi
Objek grafik 2 dimensi adalah sekumpulan titik-titik 2 dimensi yang dihubungkan dengan garis lurus, baik berupa polyline, polygon atau kurva. Objek grafik 2 dimensi didefinisikan sebagai kumpulan titik 2dimensi yang secara komputasi dinyatakan sebagai array 1D, atau linkedlist sesuai dengan struktur data yang digunakan dalam menyatakan kumpulan titik 2D ini. 
Objek grafik dimensi juga adalah gambar 2 dimensi yang  sumbu x dan sumbu y, atau sumbu koordinat cartesius dua dimensi. Dua sumbu yang saling bertegak lurus antar satu dengan yang lain, yang keduanya terletak dalam satu bidang (bidang xy).
Sedangkan Grafik komputer 2D adalah sebuah generasi gambar digital berbasis komputer, yang kebanyakan mengambil objek-objek dua dimensi (2D). Model Grafik 2D merupakan kombinasi dari model geometri (juga disebut sebagai grafik vektor), gambar digital (raster graphics), fungsi matematika, dan sebagainya. Komponen-komponen ini dapat dimodifikasi dan dimanipulasi oleh transformasi geometri dua dimensi, seperti translasi, rotasi, dan dilatasi. 
Model-model yang digunakan pada disain grafis 2D biasanya tidak mendukung bentuk-bentuk tiga-dimensi, atau fenomena yang bersifat tiga dimensi, seperti pencahayaan, bayangan, pantulan, refraksi, dan sebagainya. Namun demikian, mereka dapat membuat model berlapis-lapis (layer); nyata, translusen, dan transparan, yang dapat ditumpuk dalam urutan tertentu. Urutan tersebut biasanya didefinisikan dengan angka (kedalaman lapisan, atau jarak dari si penglihat).
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
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBcuDcNCvqFXFA5uJZDybNpG3iTjIXwGcRiTHKdWYYXJLcf6d3AW6J9rwgcQH5dxo4GKZeda92UrWRn7CWcJot653q4-_0OYZLdMZqvLceA5G6Tnz5p6qQc7hyphenhyphenI3G4gIWM1daz8bgbXuk5/s1600/c.jpg
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

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9LI02wrXNvHaLH-upSUTTcww3MWT2yXPlyxW5hSgroZB7IW1vkTbVz6A7_gpbsoingOza7DDfj6fx09EYUS4Q78qkrz9XiuE6UlUNtpxpfeDUSHldO8OldmIsjiPQvwRcnyA9ikIAoPIg/s1600/l.png

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

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWbHZvwWR7zToVVfTmr2cyo3vCyXdJHsdjjsA01seYB6khJg8rzaR-1tih-9lPqxJ_Kf6GTlsJL01iyBM8lULj22qKEq-I0iInYfrhY7GbdOPvBkpwgmWGBr4yG7L1eVmT7ZWvux0fwYf2/s1600/p.png
Polygon adalah suatu fungsi yang mirip dengan polyline, hanya saja hasilnya adalah kurva tertutup. Pada polygon digunakan konsep array dalam menyatakan objek 2D sebagaikumpulan titik 2D. Polygon digunakan untuk merepresentasikan objek-objek dua dimensi. Suatu poygon paling sedikit dibatasi oleh tiga garis yang saling terhubung di antara ketiga titik tersebut.

Adapun langkah-langkah untuk mendefinisikan objek grafik 2 dimensi :
1.    Mendefinisikan struktur dari titik 2D
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi14SN3X9u3l1ggmBTW6cJT-NorANOyRTJIkViN1V_PHqzJ7UM-HrAVGCQpItRWzFY3o5U0A85lI-0mocPA2ej2cRejg7_OY3mS0PmtsIJlj_FWLeEEmXV19iE7mBPXBt9yVrZh6fA4Vj5x/s1600/mf.png

Sistem Koordinat OpenGL 


2.    Mendefinisikan struktur warna
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.
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyiWhC1tWTQvw8C4q1io5DyMsCTjaOffwhIDGecd8FDiMrejT9F9TR30o-3zcnBBy53H39Ng8AMdUGO5FwwbwBzK-5dvkb-RNSy8uGh-2aennkRbkYsjOi3vKhxL3eFwfTlhRM8NigRPvW/s1600/mn.png







3.    Mendefinisikan struktur dari objek grafik 2D
Fungsi gluOrtho2D (left,right,bottom,top) " gluOrtho2D(-320,320,-240,240)

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi07-_aD6BBk_6NUieBL7KeEfqMwBsObgAVvChLTSerQTW-zCr3LrS_1zYptXccxDfxMFS6YMWntVqKfjB2IWPNVm12AtGa34i9pk8ZJ_PuutP7G61GGL2HN2Dp7Q4SzyWbcCX6Y2CXK_hz/s1600/bn.png

Objek primitive (Lanjutan)
a. Triangle "GL_TRIANGLES
Triangle atau segitiga adalah tiga buah titik yang terhubung menjadi suatu segitiga dengan blok di tengahnya.
b. Quads " GL_QUADS
Quad atau segempat adalah empat buah titik yang terhubung menjadi suatu segempat dengan blok di tengahnya.
c. Polygon " GL_POLYGON
Polygon merupakan suatu fungsi yang mirip dengan polyline, tetapi menghasilkan kurva tertutup dengan blok warna (fill).







Menerapkan Tranformasi Objek 2 Dimensi

Grafika computer merupakan bidang yang menarik minat banyak orang. Salah satu sub bagian dari grafika adalah pemodelan objek.Dalam pemodelan objek 2D, berbagai objek dimodifikasi dengan melakukan berbagai operasi fungsi atau operasi transformasi geometri. Transformasi ini dapat berupa transformasi dasar ataupun gabungan dari berbagai transformasi geometri. Transformasi ini dikenal dengan Transformasi affine. Pada dasarnya,transformasi merupakan suatu operasi modifikasi bentuk objek tanpa merusak bentuk dasar dari objek. Salah satu contoh transformasi adalah transformasi dari window ke viewport.

Pada Viewport, Objek yang akan digambar pada layar biasanya mempunyai ukuran yang jauh lebih besar dibanding dengan ukuran layar, sehingga perlu dilakukan pemetaan transformasi yang memungkinkan objek tersebut bisa seluruhnya digambar dilayar, tetapi pada layar dengan koordinat yang terbatas, dan biasanya dibatasi oleh sebuah kotak yang disebut windows, sedangkan layarnya tersebut disebut Viewport. 





1. Langkah-Langkah Transformasi Viewing 2 Dimensi
1) Pembentukan scene pada WC menggunakan output primitif atribut.
2) Untuk mendapatkan orientasi tertentu dari window, maka ditentukan sistem VC 2 dimensi pada WC. Frame digunakan untuk melengkapi penentuan orientasi dari windows persegi empat . Setelah frame dibentuk dapat ditransformasikan ke dalam WC untuk menampilkan koordinat.
3) Kemudian viewport ditentukan dalam normalized NVC (pada batasan antara 0 dan 1) dan memetakan deskripsi VC dari scene pada Normalized Coordinate.
4) Akhirnya dilakukan clipping (pemotongan) pada semua gambar yang ada diluar viewport.
2. Macam-macam transformasi:
1) Transformasi Objek, yang ditransformasikan titik-titik yang menyusun objek tersebut.
2) Transformasi Koordinat, yang diubah system koordinatnya sehingga objek mengalami transformasi dikarenakan perubahan system koordinat tersebut.
3. Tujuan Transformasi :
1) Merubah atau menyesuaikan komposisi pandangan.
2) Memudahkan membuat objek yang simetris
3) Melihat objek dari sudut pandang berbeda
4) Memindahkan satu atau beberapa objek dari satu tempat ke tempat lain, biasanya digunakan pada animasi computer.
4. Transformasi dasar pada objek dua dimensi terdiri dari :

a. TRANSLASI

Translasi merupakan suatu proses yang menyebabkan perpindahan objek dari satu titik ke titik lain.Translasi dilakukan dengan penambahan translasi padasuatu titik koordinat dengan translasi vector yaitu (trx,try), dimana trx adalah translation vector menurut sumbu x sedangkan try adalah translasi vector terhadap sumbu y.
Koordinat baru titik yang ditranslasi dapat diperoleh dengan menggunakan rumus:
x  = x + trx
y  = y + try
imana (x,y) adalah koordinat asal suatu objek dan (x,y) adalah koordinat baru objek tersebut setelah ditranslasi.Translasi adalah transformasi dengan bentuk yang tetap memindahkan objek apa adanya. Dengan demikian setiap titik dari objek akan ditranslasi dengan besaran yang sama.




a. SKALA

Transformasi skala adalah perubahan ukuran suatu objek. P

b. ROTASI

Rotasi merupakan bentuk transformasi berupa pemutaran objek, dilakukan dengan menambahkan besaran pada absis X dan ordinat Y. Rotasi dua dimensi pada suatu objek akan memindahkan objek tersebut menurut garis melingkar. Pada bidang xy.




c. SHEARING

Shearing mempunyai beberapa pengertian, antara lain :
· Shearing adalah bentuk transformasi yang membuat distorsi dari bentuk suatu objek, seperti menggeser sisi tertentu.
· Shearing adalah suatu proses untuk mentransformasikan objek dengan cara “membebani” objek tersebut kea rah tertentu, sehingga dihasilkan suatu objek yang distorsi.
Dua macam shear yang umum adalah shear menurut sumbu x dan shear menurut sumbu y.




6. SISTEM KOORDINAT HOMOGEN
Sistem koordinat homogen adalah system koordinat yang mempunyai satu dimensi lebih tinggi dari system koordinat yang ditinjau. Digunakan untuk menyatakan semua proses transformasi dengan perkalian matrix termasuk pergeseran.


7. PEMBATALAN TRANSFORMASI AFFIN
Transformasi dari titik P ke titik Q dengan persamaan Q = PM + trdapat dibatalkan atau dikembalikan dengan menggunakan persamaan P = ( Q – tr )M-1 dengan catatan bahwa M adalah marix non singular (mempunyai determinan tidak sama dengan nol).
Untuk objek dua dimensi dapat dilakukan dengan matrix 2x2 karena pembatalan transformasi tidak perlu dengan bantuan koordinat homogen.


interface: 



 



Source code Program : 



Unit1.cpp 


//---------------------------------------------------------------------------
#include // membaca file vcl untuk memulai pembuatan program pada Borland C++ Builder
#include //membaca file header math yang berhubungan dengan perhitungan
#pragma hdrstop à library yang sudah disediakan oleh Borland C++ Builder
#include "Unit1.h" // membaca file Unit1.h
#pragma package(smart_init) // library yang sudah disediakan oleh Borland C++ Builder
#pragma resource "*.dfm" // library yang sudah disediakan oleh Borland C++ Builder
TForm1 *Form1;
struct Elemen { float x,y ;} ; //objek berbentuk struktur dengan variabel X dan Y yang bertipe float
Elemen Objek[6]; //deklarasi elemen
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
// memanggil fungsi TForm1
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{ int i;
Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);
Image1->Canvas->MoveTo(Objek[5].x,Objek[5].y); //move to memmindahkan garis
for (i=1;i<=5;i++){ Image1->Canvas->LineTo(Objek[i].x,Objek[i].y);};
} //line to menambah garis
//========================================================================
void __fastcall TForm1::FormActivate(TObject *Sender)
{ Objek[1].x = 100; Objek[1].y = 50;
Objek[2].x = 50; Objek[2].y = 100;
Objek[3].x = 100; Objek[3].y = 100;
Objek[4].x = 100; Objek[4].y = 150;
Objek[5].x = 150; Objek[5].y = 100;
FormShow(Sender);
}
// memanggil fungsi FormActivate untuk membuat objekdengan menentukan titik-titik objek pada koordinat x dan y
//========================================================================
void __fastcall TForm1::ButtonatasClick(TObject *Sender)
{
int i;
for (i=1;i<=5;i++){ Objek[i].y-=5;};
FormShow(Sender);
}
// memanggil fungsi ButtonatasClick
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonkananClick(TObject *Sender)
{
int i;
for (i=1;i<=5;i++){ Objek[i].x+=5;};
FormShow(Sender);
}
// memanggil fungsi ButtonkananClick
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonkiriClick(TObject *Sender)
{
int i;
for (i=1;i<=5;i++){ Objek[i].x-=5;};
FormShow(Sender);
}// memanggil fungsi ButtonkiriClick
//----------------------------------------- ----------------------------------
void __fastcall TForm1::ButtonbawahClick(TObject *Sender)
{
int i;
for (i=1;i<=5;i++){ Objek[i].y+=5;};
FormShow(Sender);
}// memanggil fungsi ButtonbawahClick
//---------------------------------------------------------------------------
void __fastcall TForm1:: Button1Click (TObject *Sender)
{
Elemen TempObjek[6];
int i; float Sdt;
for (i=1;i<=5;i++)
{ Objek[i].x=Objek[i].x-Image1->Width / 2;
Objek[i].y=Objek[i].y-Image1->Height / 2;
Sdt=10*M_PI/180;
TempObjek[i].x=(Objek[i].x*cos(Sdt)-Objek[i].y*sin(Sdt));
TempObjek[i].y=(Objek[i].x*sin(Sdt)+Objek[i].y*cos(Sdt));
Objek[i]=TempObjek[i];
Objek[i].x=Objek[i].x+Image1->Width / 2;
Objek[i].y=Objek[i].y+Image1->Height / 2;
} FormShow(Sender);
}// memanggil fungsi Button1Click
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Elemen TempObjek[6];
int i,n,m; float Sdt;
for (i=1;i<=5;i++)
{
n = Objek[3].x;
m = Objek[3].y;
Objek[i].x=Objek[i].x-n;
Objek[i].y=Objek[i].y-m;
Sdt=10*M_PI/180;
TempObjek[i].x=(Objek[i].x*cos(Sdt)-Objek[i].y*sin(Sdt));
TempObjek[i].y=(Objek[i].x*sin(Sdt)+Objek[i].y*cos(Sdt));
Objek[i]=TempObjek[i];
Objek[i].x=Objek[i].x+n;
Objek[i].y=Objek[i].y+m;
}
FormShow(Sender);
}// memanggil fungsi Button2Click
//---------------------------------------------------------------------------
UNIT.H


// File ini berisi event handler untuk mengatasi sebuah event dari komponen yang ditempatkan pada sebuah form.
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPanel *Panel1;
TButton *Buttonkiri;
TButton *Buttonatas;
TButton *Buttonbawah;
TButton *Buttonkanan;
TImage *Image1;
TButton *Button1;
TButton *Button2;
void __fastcall FormShow(TObject *Sender);
void __fastcall FormActivate(TObject *Sender);
void __fastcall ButtonatasClick(TObject *Sender);
void __fastcall ButtonkananClick(TObject *Sender);
void __fastcall ButtonkiriClick(TObject *Sender);
void __fastcall ButtonbawahClick(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


OUTPUT : 



 



















Menerapkan Pembuatan Model Objek 3 Dimensi

Objek tiga dimensi jelas memiliki banyak perbedaan dengan objek dua dimensi. Dengan koordinat x, y, z yang diperlukan, membuat pengerjaan objek tiga dimensi menjadi lebih rumit. Dalam pembuatannya, diperlukan koordinat untuk menentukan sudut pandang pengamat, kedalaman yang diperlukan, dan transformasi objek untuk mempermudah pengerjaan.
OpenGL dirancang sebagai perangkat yang instan dan tidak tergantung pada sistem operasi dan bahasa pemrograman apapun. Perintah yang terdapat pada OpenGL tetap sama pada semua sistem operasi karena OpenGL tidak mengimplementasikan window khusus untuk merancang suatu objek seperti program visual lainnya. Sebagai gantinya, diharuskan untuk membuat window sendiri menurut sistem operasi yang digunakan dan bahasa pemrograman yang dipakai.

1. Kubus 3D
#include
GLfloat light_diffuse[] = {1.0, 0.0, 0.0, 1.0};
//GLfloat light_diffuse[] = {0.9f, 0.9f, 0.9f, 1.0f};
GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0};
//GLfloat light_position[] = {2.0f, 2.0f, 2.0f, 0.0f};
void gambar3D(void)
{
glBegin(GL_QUADS);
// muka depan
glNormal3f( 0.0f, 0.0f, 1.0f); //Normal menuju Kita
glVertex3f(-1.0f, -1.0f, 1.0f); //Titik 1 (depan)
glVertex3f( 1.0f, -1.0f, 1.0f); //Titik 2 (depan)
glVertex3f( 1.0f, 1.0f, 1.0f); //Titik 3 (depan)
glVertex3f(-1.0f, 1.0f, 1.0f); //Titik 4 (depan)
// muka belakang
glNormal3f( 0.0f, 0.0f,-1.0f); //Normal menjauh Kita
glVertex3f(-1.0f, -1.0f,-1.0f); //Titik 1 (belakang)
glVertex3f(-1.0f, 1.0f, 1.0f); //Titik 2 (atas)
glVertex3f( 1.0f, 1.0f, 1.0f); //Titik 3 (atas)
glVertex3f( 1.0f, 1.0f,-1.0f); //Titik 4 (atas)
// muka atas
glNormal3f( 0.0f, 1.0f, 1.0f); //Normal berarah atas
glVertex3f(-1.0f, 1.0f,-1.0f); //Titik 1 (atas)
glVertex3f(-1.0f, 1.0f, 1.0f); //Titik 2 (atas)
glVertex3f( 1.0f, 1.0f, 1.0f); //Titik 3 (atas)
glVertex3f( 1.0f, 1.0f,-1.0f); //Titik 4 (atas)
//muka bawah
glNormal3f( 0.0f, -1.0f, 0.0f); //Normal berarah bawah
glVertex3f(-1.0f, -1.0f,-1.0f); //Titik 1 (bawah)
glVertex3f( 1.0f, -1.0f,-1.0f); //Titik 2 (bawah)
glVertex3f( 1.0f, -1.0f, 1.0f); //Titik 3 (bawah)
glVertex3f(-1.0f, -1.0f, 1.0f); //Titik 4 (bawah)
//muka kanan
glNormal3f( 1.0f, 0.0f, 0.0f); //Normal berarah kekanan
glVertex3f( 1.0f, -1.0f,-1.0f); //Titik 1 (kanan)
glVertex3f( 1.0f, 1.0f,-1.0f); //Titik 2 (kanan)
glVertex3f( 1.0f, 1.0f, 1.0f); //Titik 3 (kanan)
glVertex3f( 1.0f, -1.0f, 1.0f); //Titik 4 (kanan)
//muka kiri
glNormal3f(-1.0f, 0.0f, 0.0f); //Normal berarah ke kiri
glVertex3f(-1.0f, -1.0f,-1.0f); //Titik 1 (kiri)
glVertex3f(-1.0f, -1.0f, 1.0f); //Titik 2 (kiri)
glVertex3f(-1.0f, 1.0f, 1.0f); //Titik 3 (kiri)
glVertex3f(-1.0f, 1.0f,-1.0f); //Titik 4 (kiri)
glEnd();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gambar3D();
glutSwapBuffers();
}
void inisialisasi(void)
{
//pencahayaan
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
//Buffer
glEnable(GL_DEPTH_TEST);
//setup kubus
glMatrixMode(GL_PROJECTION);
gluPerspective(40.0,1.0,1.0,10.0);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.0, 0.0, 5.0, // melihat pada (0,0,5)
0.0, 0.0, 0.0, // center pada (0,0,0)
0.0, 1.0, 0.0); // arah Y
/* Mengatur posisi sudut */
//glTranslatef(0.0, 0.0, -1.0);
glRotatef(30, 0.0, 1.0, 1.0);
glRotatef(15, 1.0, 1.0, 0.0);
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("Grafika Komputer 3 Dimensi");
glutDisplayFunc(display);
inisialisasi();
glutMainLoop();
return 0;
}



Gambar 1. Kubus

2. Prisma 3D
#include
GLfloat light_diffuse[] = {5.0, 4.0, 4.0, 5.0};
//GLfloat light_diffuse[] = {0.9f, 0.9f, 0.9f, 1.0f};
GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0};
//GLfloat light_position[] = {2.0f, 2.0f, 2.0f, 0.0f};
void gambar3D(void)
{
glBegin(GL_QUADS);
// muka belakang
glNormal3f( 0.0f, 0.0f,0.0f); //Normal menjauh Kita
glVertex3f(-1.0f, 1.0f,0.0f); //Titik 1 (belakang)
glVertex3f(1.0f, 1.0f, 0.0f); //Titik 2 (belakang)
glVertex3f( 1.0f, -1.0f, 0.0f); //Titik 3 (belakang)
glVertex3f( -1.0f, -1.0f,0.0f); //Titik 4 (belakang)
//muka kanan
glNormal3f( 1.0f, 0.0f, 0.0f); //Normal berarah kekanan
glVertex3f( 0.0f, 1.0f,1.0f); //Titik 1 (kanan)
glVertex3f( 1.0f, 1.0f,0.0f); //Titik 2 (kanan)
glVertex3f( 1.0f, -1.0f, 0.0f); //Titik 3 (kanan)
glVertex3f( 0.0f, -1.0f, 1.0f); //Titik 4 (kanan)
//muka kiri
glNormal3f(-1.0f, 0.0f, 0.0f); //Normal berarah ke kiri
glVertex3f(-1.0f, 1.0f,0.0f); //Titik 1 (kiri)
glVertex3f(0.0f, 1.0f, 1.0f); //Titik 2 (kiri)
glVertex3f(0.0f, -1.0f, 1.0f); //Titik 3 (kiri)
glVertex3f(-1.0f, -1.0f,0.0f); //Titik 4 (kiri)
//atas
glNormal3f(0.0f, 1.0f, 0.0f); //Normal berarah ke atas
glVertex3f(-1.0f, 1.0f,0.0f); //Titik 1 (atas)
glVertex3f(1.0f, 1.0f, 0.0f); //Titik 2 (atas)
glVertex3f(0.0f, 1.0f, 1.0f); //Titik 3 (atas)
//bawah
glNormal3f(0.0f, -1.0f, 0.0f); //Normal berarah ke bawah
glVertex3f(-1.0f, -1.0f,0.0f); //Titik 1 (bawah)
glVertex3f(0.0f, -1.0f, 1.0f); //Titik 2 (bawah)
glVertex3f(1.0f, -1.0f, 0.0f); //Titik 3 (bawah)
glEnd ();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gambar3D();
glutSwapBuffers();
}
void inisialisasi(void)
{
//pencahayaan
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
//Buffer
glEnable(GL_DEPTH_TEST);
//setup prisma
glMatrixMode(GL_PROJECTION);
gluPerspective(40.0,1.0,1.0,10.0);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.0, 0.0, 5.0, // melihat pada (0,0,5)
0.0, 0.0, 0.0, // center pada (0,0,0)
0.0, 1.0, 0.0); // arah Y
/* Mengatur posisi sudut */
//glTranslatef(0.0, 0.0, -1.0);
glRotatef(45, 1.0, 0.0, 1.0);
//glRotatef(15, 1.0, 1.0, 1.0);
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("Grafika Komputer 3 Dimensi");
glutDisplayFunc(display);
inisialisasi();
glutMainLoop();
return 0;
}



Gambar 2. Prisma

3. Antiprisma
#include
GLfloat light_diffuse[] = {0.0, 1.0, .0, 0.0};
//GLfloat light_diffuse[] = {0.9f, 0.9f, 0.9f, 1.0f};
GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0};
//GLfloat light_position[] = {2.0f, 2.0f, 2.0f, 0.0f};
void gambar3D(void)
{
glBegin(GL_TRIANGLES);
// muka belakang
glNormal3f( 0.0f, 0.0f,1.0f); //Normal menjauh Kita
glVertex3f(1.0f, 0.0f,-1.0f); //Titik 1 (belakang)
glVertex3f(-1.0f, 0.0f, -1.0f); //Titik 2 (belakang)
glVertex3f( 0.0f, 1.0f, 0.0f); //Titik 3 (belakang)
// muka depan
glNormal3f( 0.0f, 0.0f, 1.0f); //Normal menuju Kita
glVertex3f(-1.0f, 0.0f, 1.0f); //Titik 1 (depan)
glVertex3f( 1.0f, 0.0f, 1.0f); //Titik 2 (depan)
glVertex3f( 0.0f, 1.0f, 0.0f); //Titik 3 (depan)
//muka kanan
glNormal3f( 1.0f, 0.0f, 0.0f); //Normal berarah kekanan
glVertex3f( 1.0f, 0.0f,1.0f); //Titik 1 (kanan)
glVertex3f( 1.0f, 0.0f,-1.0f); //Titik 2 (kanan)
glVertex3f( 0.0f, 1.0f, 0.0f); //Titik 3 (kanan)
//muka kiri
glNormal3f(-1.0f, 0.0f, 0.0f); //Normal berarah ke kiri
glVertex3f(-1.0f, 0.0f,-1.0f); //Titik 1 (kiri)
glVertex3f(-1.0f,0.0f, 1.0f); //Titik 2 (kiri)
glVertex3f(0.0f, 1.0f, 0.0f); //Titik 3 (kiri)
//bawah
glNormal3f(0.0f, 0.0f, 0.0f); //Normal berarah ke bawah
glVertex3f(-1.0f, 0.0f,1.0f); //Titik 1 (bawah)
glVertex3f(1.0f, 0.0f, 1.0f); //Titik 2 (bawah)
glVertex3f(1.0f, 0.0f, -1.0f); //Titik 3 (bawah)
glVertex3f(-1.0f, 0.0f, -1.0f); //Titik 4 (bawah)
glEnd();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gambar3D();
glutSwapBuffers();
}
void inisialisasi(void)
{
glClearColor(1.0,1.0,1.0,0.0);
//pencahayaan
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
//Buffer
glEnable(GL_DEPTH_TEST);
//setup antiprisma
glMatrixMode(GL_PROJECTION);
gluPerspective(40.0,1.0,1.0,10.0);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.0, 0.0, 5.0, // melihat pada (0,0,5)
0.0, 0.0, 0.0, // center pada (0,0,0)
0.0, 1.0, 0.0); // arah Y
/* Mengatur posisi sudut */
//glTranslatef(0.0, 0.0, -1.0);
glRotatef(45, 1.0, 0.5, 1.0);
glRotatef(15, 1.0, 1.0, 1.0);
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("AntiPrisma");
glutDisplayFunc(display);
inisialisasi();
glutMainLoop();
return 0;
}
Gambar 3. Antiprisma



4. Tetrahedron
//-----------------------------------------------------------------------------
#include
GLfloat light_diffuse[] ={0.0,1.0,0.0,1.0};
//GLfloat light_diffuse[] ={0.9f,0.9f,0.9f,1.0f};
GLfloat light_position[] ={1.0,1.0,1.0,0.0};
//GLfloat light_position[] ={2.0f,2.0f,2.0f,0.0f};
void gambar3D(void)
{
glBegin(GL_QUADS);
// Muka Depan
glNormal3f(0.0f,0.0f, 1.0f);//normal menuju kita
glVertex3f(-1.0f,-1.0f, 1.0f);//Titik 1 (depan)
glVertex3f(1.0f,-1.0f, 1.0f);//Titik 2 (depan)
glVertex3f(1.0f,1.0f, 1.0f);//Titik 3 (depan)
// Muka Belakang
glNormal3f(0.0f,0.0f, -1.0f);//normal menjauh kita
glVertex3f(-1.0f,-1.0f, -1.0f);//Titik 1 (belakang)
glVertex3f(-1.0f,1.0f, -1.0f);//Titik 2 (belakang)
glVertex3f(1.0f,1.0f, -1.0f);//Titik 3 (belakang)
//Muka Atas
glNormal3f(0.0f,1.0f, 1.0f);//normal berarah atas
glVertex3f(-1.0f,1.0f, -1.0f);//Titik 1 (atas)
glVertex3f(-1.0f,1.0f, 1.0f);//Titik 2 (atas)
glVertex3f(1.0f,1.0f, 1.0f);//Titik 3 (atas)
//Muka Bawah
glNormal3f(0.0f,-1.0f, 1.0f);//normal berarah bawah
glVertex3f(-1.0f,-1.0f, -1.0f);//Titik 1 (bawah)
glVertex3f(1.0f,-1.0f, -1.0f);//Titik 2 (bawah)
glVertex3f(1.0f,-1.0f, 1.0f);//Titik 3 (bawah)
//Muka Kanan
glNormal3f(1.0f,0.0f, 0.0f);//normal berarah kekanan
glVertex3f(1.0f,-1.0f, -1.0f);//Titik 1 (kanan)
glVertex3f(1.0f,1.0f, -1.0f);//Titik 2 (kanan)
glVertex3f(1.0f,1.0f, 1.0f);//Titik 3 (kanan)
//Muka Kiri
glNormal3f(-1.0f,0.0f, 0.0f);//normal berarah kekiri
glVertex3f(-1.0f,-1.0f, -1.0f);//Titik 1 (kiri)
glVertex3f(-1.0f,-1.0f, 1.0f);//Titik 2 (kiri)
glVertex3f(-1.0f,1.0f, 1.0f);//Titik 3 (kiri)
glEnd();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,0);
gambar3D();
glutSwapBuffers();
}
void inisialisasi(void)
{
//Pencahayaan
glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
//Buffer
glEnable(GL_DEPTH_TEST);
//setup tetrahedron
glMatrixMode(GL_PROJECTION);
gluPerspective(60.0,1.0,1.0,10.0);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.0,0.0,5.0, //Melihat pada (0,0,5)
0.0,0.0,0.0,//center pada (0,0,0)
0.0,1.0,0.0);//arah Y
/*Mengatur posisi sudut*/
glTranslatef(0.0,0.0,-1.0);
glRotatef(-29, 1.0,-1.0,1.0);
glRotatef(15, 0.0,1.0,0.0);
}
int main(int argc,char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutCreateWindow("Grafika Komputer 3 Dimensi");
glutDisplayFunc(display);
inisialisasi();
glutMainLoop();
return 0;
}
//--------------------------------------------------------
Gambar 4. Tetrahedron
5. Octahedron
#include
GLfloat light_diffuse[] = {12.0, 1.0, 5.0, 2.0};
//GLfloat light_diffuse[] = {0.9f, 0.9f, 0.9f, 1.0f};
GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0};
//GLfloat light_position[] = {2.0f, 2.0f, 2.0f, 0.0f};
void gambar3D(void)
{
glBegin(GL_TRIANGLES);
// muka belakang atas
glNormal3f( 0.0f, 0.0f,1.0f); //Normal menjauh Kita
glVertex3f(1.0f, 0.0f,-1.0f); //Titik 1 (belakang)
glVertex3f(-1.0f, 0.0f, -1.0f); //Titik 2 (belakang)
glVertex3f( 0.0f, 1.0f, 0.0f); //Titik 3 (belakang)
// muka depan atas
glNormal3f( 0.0f, 0.0f, 1.0f); //Normal menuju Kita
glVertex3f(-1.0f, 0.0f, 1.0f); //Titik 1 (depan)
glVertex3f( 1.0f, 0.0f, 1.0f); //Titik 2 (depan)
glVertex3f( 0.0f, 1.0f, 0.0f); //Titik 3 (depan)
//muka kanan atas
glNormal3f( 1.0f, 0.0f, 0.0f); //Normal berarah kekanan
glVertex3f( 1.0f, 0.0f,1.0f); //Titik 1 (kanan)
glVertex3f( 1.0f, 0.0f,-1.0f); //Titik 2 (kanan)
glVertex3f( 0.0f, 1.0f, 0.0f); //Titik 3 (kanan)
//muka kiri atas
glNormal3f(-1.0f, 0.0f, 0.0f); //Normal berarah ke kiri
glVertex3f(-1.0f, 0.0f,-1.0f); //Titik 1 (kiri)
glVertex3f(-1.0f,0.0f, 1.0f); //Titik 2 (kiri)
glVertex3f(0.0f, 1.0f, 0.0f); //Titik 3 (kiri)
// muka belakang bawah
glNormal3f( 0.0f, 0.0f,1.0f); //Normal menjauh Kita
glVertex3f(1.0f, 0.0f,-1.0f); //Titik 1 (belakang)
glVertex3f(-1.0f, 0.0f, -1.0f); //Titik 2 (belakang)
glVertex3f( 0.0f, -1.0f, 0.0f); //Titik 3 (belakang)
// muka depan bawah
glNormal3f( 0.0f, 0.0f, 1.0f); //Normal menuju Kita
glVertex3f(-1.0f, 0.0f, 1.0f); //Titik 1 (depan)
glVertex3f( 1.0f, 0.0f, 1.0f); //Titik 2 (depan)
glVertex3f( 0.0f, -1.0f, 0.0f); //Titik 3 (depan)
//muka kanan bawah
glNormal3f( 1.0f, 0.0f, 0.0f); //Normal berarah kekanan
glVertex3f( 1.0f, 0.0f,1.0f); //Titik 1 (kanan)
glVertex3f( 1.0f, 0.0f,-1.0f); //Titik 2 (kanan)
glVertex3f( 0.0f, -1.0f, 0.0f); //Titik 3 (kanan)
//muka kiri bawah
glNormal3f(-1.0f, 0.0f, 0.0f); //Normal berarah ke kiri
glVertex3f(-1.0f, 0.0f,-1.0f); //Titik 1 (kiri)
glVertex3f(-1.0f,0.0f, 1.0f); //Titik 2 (kiri)
glVertex3f(0.0f, -1.0f, 0.0f); //Titik 3 (kiri)
glEnd();
glBegin(GL_QUADS);
//bawah
glNormal3f(0.0f, 0.0f, 0.0f); //Normal berarah ke bawah
glVertex3f(-1.0f, 0.0f,1.0f); //Titik 1 (bawah)
glVertex3f(1.0f, 0.0f, 1.0f); //Titik 2 (bawah)
glVertex3f(1.0f, 0.0f, -1.0f); //Titik 3 (bawah)
glVertex3f(-1.0f, 0.0f, -1.0f); //Titik 4 (bawah)
glEnd();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gambar3D();
glutSwapBuffers();
}
void inisialisasi(void)
{
glClearColor(1.0,1.0,1.0,0.0);
//pencahayaan
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
//Buffer
glEnable(GL_DEPTH_TEST);
//setup tetahedron
glMatrixMode(GL_PROJECTION);
gluPerspective(40.0,1.0,1.0,10.0);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.0, 0.0, 5.0, // melihat pada (0,0,5)
0.0, 0.0, 0.0, // center pada (0,0,0)
0.0, 1.0, 0.0); // arah Y
/* Mengatur posisi sudut */
//glTranslatef(0.0, 0.0, -1.0);
glRotatef(45, 1.0, 0.0, 0.0);
//glRotatef(15, 1.0, 1.0, 1.0);
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("Tetrahedron");
glutDisplayFunc(display);
inisialisasi();
glutMainLoop();
return 0;
}



Gambar 5. Octahedron





6. Objek Bebas
#include
GLfloat light_diffuse[] = {0.0, 0.1, 1.0, 1.0};
GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0};
void octahedron(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
GLfloat intensitasCahaya[]={0.9f, 0.9f, 0.9f, 1.0f};
GLfloat posisiCahaya[]={2.0f, 2.0f, 2.0f, 0.0f};
glLightfv(GL_LIGHT0, GL_POSITION, posisiCahaya);
glLightfv(GL_LIGHT0, GL_DIFFUSE, intensitasCahaya);
GLfloat bahan_ambient[]={0.0f, 0.5f, 0.6f, 1.0f};
GLfloat bahan_diffuse[]={12.0, 1.0, 5.0, 2.0};
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);
glPushMatrix();
glTranslatef(2.0, 1.0, -8.0);
glutSolidOctahedron();
glPopMatrix();
glFlush();
}
void icosahedron(void)
{
GLfloat intensitasCahaya[]={0.9f, 0.9f, 0.9f, 1.0f};
GLfloat posisiCahaya[]={2.0f, 2.0f, 2.0f, 0.0f};
glLightfv(GL_LIGHT0, GL_POSITION, posisiCahaya);
glLightfv(GL_LIGHT0, GL_DIFFUSE, intensitasCahaya);
GLfloat bahan_ambient[]={0.0f, 0.5f, 0.6f, 1.0f};
GLfloat bahan_diffuse[]={0.0, 1.0, 0.0, 0.0};
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);
glPushMatrix();
glTranslatef(-4, -2.5f, -8.0);
glutSolidIcosahedron();
glPopMatrix();
glFlush();
}
void dodecahedron(void)
{
GLfloat intensitasCahaya[]={0.9f, 0.9f, 0.9f, 1.0f};
GLfloat posisiCahaya[]={2.0f, 2.0f, 2.0f, 0.0f};
glLightfv(GL_LIGHT0, GL_POSITION, posisiCahaya);
glLightfv(GL_LIGHT0, GL_DIFFUSE, intensitasCahaya);
GLfloat bahan_ambient[]={0.0f, 0.5f, 0.6f, 1.0f};
GLfloat bahan_diffuse[]={10.0, 1.0, 0.0, 1.0};
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);
glPushMatrix();
glTranslatef(2.5f, -2.5f, -8.0);
glutSolidDodecahedron();
glPopMatrix();
glFlush();
}
void tetahedron(void)
{
GLfloat intensitasCahaya[]={0.9f, 0.9f, 0.9f, 1.0f};
GLfloat posisiCahaya[]={2.0f, 2.0f, 2.0f, 0.0f};
glLightfv(GL_LIGHT0, GL_POSITION, posisiCahaya);
glLightfv(GL_LIGHT0, GL_DIFFUSE, intensitasCahaya);
GLfloat bahan_ambient[]={0.0f, 0.5f, 0.6f, 1.0f};
GLfloat bahan_diffuse[]={9.0, 0.0, 0.0, 1.0};
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);
glPushMatrix();
glTranslatef(-4.0, 1.0, -8.0);
glRotatef(60, 1.0, 0.0, 0.0);
glutSolidTetrahedron();
glPopMatrix();
glFlush();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
octahedron();
icosahedron();
dodecahedron();
tetahedron();
glutSwapBuffers();
}
void inisialisasi(void)
{
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);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glEnable(GL_NORMALIZE);
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutCreateWindow("Grafika Komputer 3 Dimensi");
glutDisplayFunc(display);
inisialisasi();
glutMainLoop();
return 0;
}




GRAFIKA 3 DIMENSI

MATERI

•Sistem Koordinat
•Titik 3 Dimensi
•Definisi Obyek 3 Dimensi
•Implementasi Definisi Dari Struktur Face
•Implementasi Definisi Dari Struktur Obyek 3D
•Contoh Pernyataan Obyek Limas Segiempat
•Implementasi Pernyataan Obyek 3 Dimensi
•Implementasi Konversi Vektor 3D Menjadi Titik 2D
•Implementasi Konversi Titik 3D Menjadi Vektor 3D
•Implementasi Cara Menggambar Obyek 3D
•Implementasi Tilting


 1.         SISTEM KOORDINAT 3 DIMENSI



  2.         TITIK 3 DIMENSI
a. Titik 3D dinyatakan dengan P(x,y,z)

Typedef struct
{  
float x,y,z;
}   point3D_t

  3.         DEFINISI OBYEK 3 DIMENSI
a. Obyek face yang digabungkan





b. Face adalah

          


  4.         IMPLEMENTASI DEFINISI DARI STRUKTUR FACE

a. Typedef struct
{ int NumberofVertices;
 short intpnt[32];
} face_t;

NumberofVerticesmenyatakan jumlah titik pada sebuah face

pnt[32] menyatakan nomor-nomor titik yang digunakan untuk membentuk face, dengan maksimum 32 titik
  5.         IMPLEMENTASI DEFINISI DARI STRUKTUR OBYEK 3D

a. Typedef struct
{ int NumberofVertices;
 point3D_t pnt[100];
int NumberofFaces;
face_t fc[32];
} object3D_t;

NumberofVertices menyatakan jumlah titik yang membentuk obyek.
pnt[100] menyatakan titik-titik yang membentuk face, dengan maksimum 100 titik
NumberofFaces menyatakan jumlah face yang membentuk obyek
Fc[32]menyatakan face-face yang membentuk obyek

  6.         CONTOH PERNYATAAN OBYEK LIMAS SEGIEMPAT
a. Titik-titikyang membentukobyek:
Titik0 (0,150,0)
Titik1 (100,0,0)
Titik2 (0,0,100)
Titik3 (-100,0,0)
Titik4 (0,0,-100)

b. Face yang membentuk obyek:
Face 0 0,2,1
Face 1 0,3,2
Face 2 0,4,3
Face 3 0,1,4
Face 4 1,2,3,4






  7.         IMPLEMENTASI PERNYATAAN OBYEK 3 DIMENSI
a. object3D_t prisma={5,
{{0,100,0},{100,0,0},{0,0,100},
{-100,0,0},{0,0,-100}},5,{{3,{0,1,2}},
{3,{0,2,3}},{3,{0,3,4}},{3,{0,4,1}},
{4,{1,4,3,2}}}};

Pernyataan ini ditulis pada fungsi userdraw sebagai nilai dari obyek 3D yang akan digambarkan

  8.         IMPLEMENTASI KONVERSI VEKTOR 3D MENJADI TITIK 2D
a. point2D_t Vector2Point2D(vector3D_t vec)
{ point2D_t pnt;
pnt.x=vec.v[0];
pnt.y=vec.v[1];
return pnt;
}

  9.         IMPLEMENTASI KONVERSI TITIK 3D MENJADI VEKTOR 3D
a. 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;
}








  10.       IMPLEMENTASI CARA MENGGAMBAR OBYEK 3D
a. mat=tilting;
for(i=0;i<prisma.NumberofVertices;i++)
{vec[i]=Point2Vector(prisma.pnt[i]);
vec[i]=mat*vec[i];
}for(i=0;i<prisma.NumberofFaces;i++)

{for(j=0;j<prisma.fc[i].NumberofVertices;j++)
vecbuff[j]=vec[prisma.fc[i].pnt[j]];
for(j=0;j<prisma.fc[i].NumberofVertices;j++)
titik2D[j]=Vector2Point2D(vec[prisma.fc[i].pnt[j]]);
drawPolygon(titik2D,prisma.fc[i].NumberofVertices);
}
mat=tilting;
for(i=0;i<prisma.NumberofVertices;i++)
{vec[i]=Point2Vector(prisma.pnt[i]);
vec[i]=mat*vec[i];
}

Deklarasimat sebagai matrik tilting menyatakan bahwa obyek yang digambar mengikuti pergerakan sumbu koordinat(tilting).
Setiap titik diubah menjadi vektor dengan memperhatikan matrik transformasi yang dinyatakan dala mat.










  11.      IMPLEMENTASI TILTING
Tilting adalah matrik rotasi dari sumbu koordinat dan semua obyek yang digambar didalamnya.
a.    float theta=0.5;
matrix3D_t tilting=rotationXMTX(theta)*rotationYMTX(-theta);

Dalam deklarasi ini, matrik tilting adalah rotasi terhadap sumbu Y sebesar-0.5 rad dan rotasi terhadap sumbu X sebesar0.5 rad.
b.  for(i=0;i<prisma.NumberofFaces;i++)
{for(j=0;j<prisma.fc[i].NumberofVertices;j++)
vecbuff[j]=vec[prisma.fc[i].pnt[j]];
for(j=0;j<prisma.fc[i].NumberofVertices;j++)
titik2D[j]=Vector2Point2D(vec[prisma.fc[i].pnt[j]]);
drawPolygon(titik2D,prisma.fc[i].NumberofVertices);
}

           Untuk setiap face pada obyek 3D:

(1)Ambilvektordarisetiaptitikpadaface tersebut
(2)Konversikansetiapvektor3D menjadititik2D
(3)Dari hasilkonversidigambarkanpolygon


Download Materi Pemrograman Grafik

0 komentar:

Posting Komentar