grafika komputer - evangsmailoa.files.wordpress.com · mengenal viewport dan world coordinate ......
TRANSCRIPT
Grafika Komputer
Evangs Mailoa
Mengenal ViewPort dan World Coordinate
• Selama ini kita menggunakan sumbu koordinat denganperhitungan banyaknya pixel.
• Padahal dalam matematika atau dunia nyata, mungkinada fungsi yang tingginya maksimum 2.45 dan minimum – 1.75, yang tidak harus bilangan bulat positif.
• Semua ini dinyatakan dalam koordinat Cartesius. Karenaitu perlu adanya transformasi dari koordinat layar kekoordinat nyata (World Window) dan ViewPort.
• Konsep dasar dari world window dan viewport adalah sebagai berikut:
Mengenal ViewPort dan World Coordinate
• World coordinate dinyatakan dengan w, batas kiri (left), kanan (right), atas (top), dan bawah (bottom), masing-masing dinyatakan dengan w.l, w.r, w.t, w.b.
• Koordinat viewport dinyatakan dengan v, batas kiri (left), kanan (right), atas (top), dan bawah (bottom),masing-masing dinyatakan dengan v.l, v.r, v.t, v.b.
Mengenal ViewPort dan World Coordinate
Pemetaan dari World Coordinate ke ViewPort
Sumbu sx terhadap x dan sumbu sy terhadap y, dinyatakan dengan :
sx = Ax + Csy = By + D
untuk suatu konstanta A, B, C, dan DKonstanta A dan B menskala sumbu x dan y, sedangkan C dan D menggeser obyek
lWrW
lVrVA
..
..
bWtW
bVtVB
..
..
C = V.l – A W.l
D = V.b – B W.b
Contoh pemetaan Window dan Viewport
Perhatikan gambar berikut:
(w.l,w.r,w.t,w.b) = (0.0, 2.0, 0.0, 1.0) dan(v.l, v.r, v.t, v.b) = (40, 400, 60, 300)
Dengan menggunakan rumus sebelumnya, didapat
A= 180, B = 240, C = 40 dan D = 60
Pemetaan Window dan Viewport
Sehingga pemetaan dari world ke viewport menggunakan persamaanberikut ini.
sx= 180x + 40sy= 240y + 60
Dalam OpenGL, pemetaan tersebut dinyatakan dengan
glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(0.0, 2.0, 0.0, 1.0); // mengatur windowglViewport(40, 400, 60, 300); // mengatur viewport
Silahkan lihat pada contoh-contoh program materi sebelumnya, perintah-perintah ini adalah bagian dari fungsi init()
Tugas
Buatlah program untuk menampilkankonfigurasi hexagon (6-gon/segi enam) seperti gambar disamping ini
TugasUntuk menggambar poligon beraturan (n-gon) perlu diketahuiprinsip dasarnya sebagai berikut
Setiap titik sudut n-gon ( Pi ) mempunyai koordinat :
untuk i = 0, 1, …, n-1
dimana = 3.14159265
)2
sin,2
cos(n
iR
n
iRPi
Listing Program
Sebagai bantuan, fungsi untuk membuat n-gon dapat memodifikasi program contoh 2 materi 2, pada fungsi display diberikan perintah-perintah berikut ini.
glBegin(GL_LINE_STRIP);
glColor3f(0.0, 0.0, 1.0); /* hexagon */
glVertex2f(10.0, 0.0);
glVertex2f(10 * cos(2*3.14159265*1/6), 10 * sin(2*3.14159265*1/6));
glVertex2f(10 * cos(2*3.14159265*2/6), 10 * sin(2*3.14159265*2/6));
glVertex2f(10 * cos(2*3.14159265*3/6), 10 * sin(2*3.14159265*3/6));
glVertex2f(10 * cos(2*3.14159265*4/6), 10 * sin(2*3.14159265*4/6));
glVertex2f(10 * cos(2*3.14159265*5/6), 10 * sin(2*3.14159265*5/6));
glEnd();
Listing Program
Atau cara yang lebih baik dan fleksibel adalah dengan membuat fungsi berikut:
void ngon(int n, float cx, float cy, float radius, float rotAngle)
{
double angle , angleInc;
int k;
if(n < 3) return; // jumlah sisi tidak memenuhi syarat
angle = rotAngle * 3.14159265 / 180; // initial angle
angleInc = 2 * 3.14159265 /n; //angle increment
glVertex2f(radius * cos(angle) + cx, radius * sin(angle)+cy);
for(k = 0; k < n; k++) // repeat n times
{
angle += angleInc;
glVertex2f(radius * cos(angle) + cx, radius * sin(angle) + cy);
}
}
Mau bertanya..?
HOMEWORK! (Tugas Mandiri 4)
• Fungsi ngon dapat dimodifikasisehingga dapat menampilkanbentuk lain seperti gambar disamping. Buatlah programnya!
• Coding harus dilampirkan dan
hasil exe harus diprintscreen
• Dikumpulkan dalam kertas A4 dengan font Calibri, 12pt. Maksimal 2 halaman!
• Dikumpulkan minggu depan