grafika komputer - evangsmailoa.files.wordpress.com · mengenal viewport dan world coordinate ......

Post on 08-Mar-2019

502 Views

Category:

Documents

16 Downloads

Preview:

Click to see full reader

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

top related