Prodi Teknik Informatika Fakultas Teknologi Industri Universitas Atma

  • Slides: 78
Download presentation
Prodi Teknik Informatika Fakultas Teknologi Industri Universitas Atma Jaya Yogyakarta Pertemuan 03: Grafika Komputer:

Prodi Teknik Informatika Fakultas Teknologi Industri Universitas Atma Jaya Yogyakarta Pertemuan 03: Grafika Komputer: Windows dan Viewport Dr. Suyoto

Agenda • • • Windows, Viewports dan Pemotongan Grafik Kura-kura Poligon Teratur Lingkaran dan

Agenda • • • Windows, Viewports dan Pemotongan Grafik Kura-kura Poligon Teratur Lingkaran dan Busur Kurva Parametrik Koordinat Polar

Fungsi yang Berguna //-------- set. Window ----------void set. Window(GLdouble left, Gldouble right, GLdouble bottom,

Fungsi yang Berguna //-------- set. Window ----------void set. Window(GLdouble left, Gldouble right, GLdouble bottom, GLdouble top) { gl. Matrix. Mode(GL_PROJECTION); gl. Load. Identity(); glu. Ortho 2 D(left, right, bottom, top); } //-------- set. Viewport ---------void set. Viewport(GLdouble left, Gldouble right, GLdouble bottom, GLdouble top) { gl. Viewport(left, bottom, right – left, top - bottom); }

float x, xmin = 0, xmax=1024; gl. Color 3 f(0, 0, 1); //warna garis

float x, xmin = 0, xmax=1024; gl. Color 3 f(0, 0, 1); //warna garis biru gl. Push. Matrix(); gl. Translated (0, 300, 0); gl. Begin(GL_POINTS); gl. Vertex 2 d(0, 0); for(x = xmin; x < xmax; x+=0. 005 ) { //gl. Vertex 2 d(x, 200*pow(2. 71, -x/300)*cos(4*3. 14*x/360)); gl. Vertex 2 d(x, 200*cos(2*2*3. 14*x/360)); } gl. End(); gl. Pop. Matrix();

Windows dan Viewports • Contoh: Zooming In – Untuk zoom in pada objek dan

Windows dan Viewports • Contoh: Zooming In – Untuk zoom in pada objek dan membuat animasi, kita butuhkan sejumlah frame dan menggambarnya dari satu bagian ke bagian yang lain.

Setting Window • Jika kita set ukuran window, dan kita ingin objek pemandangan yang

Setting Window • Jika kita set ukuran window, dan kita ingin objek pemandangan yang akan kita tangkap. • Objeknya terlalu besarkah atau terlalu kecil. • Jika terlalu kecil maka objek akan terpotong.

Setting Window • Untuk set window ke ukuran yang tepat, kita perlukan ukuran koordinat

Setting Window • Untuk set window ke ukuran yang tepat, kita perlukan ukuran koordinat yang kita tangkap. • Kemudian set perpanjangan koordinat ini ke minimum dan maksimum.

Setting Window • Program membutuhkan melalukan data dua kali: : 1. Eksekusi rutin penggambaran,

Setting Window • Program membutuhkan melalukan data dua kali: : 1. Eksekusi rutin penggambaran, tetapi tidak melakukan penggambaran. 2. Eksekusi rutin penggambaran sekali lagi, tetapi inilah saatnya untuk menggambar!

Set Viewport • Untuk menggambar dengan tampilan di viewport tidak terdistorsi, kita perlukan untuk

Set Viewport • Untuk menggambar dengan tampilan di viewport tidak terdistorsi, kita perlukan untuk memastikan bahwa baik window maupun viewport mempunyai aspect ratio yang sama. • Jadi

Set Viewport • Jika aspect ratio segiempat kurang dari 0, maka segiempat lebih tinggi

Set Viewport • Jika aspect ratio segiempat kurang dari 0, maka segiempat lebih tinggi dibandingkan lebarnya. • Contoh. W/H = 3/5 • Jika aspect ratio segiempat lebih besar 0, maka segiempat lebih lebar dibandingkan Tingginya. • Contoh. W/H = 5/3

Set Viewport a) R > W/H (dengan R aspect ratio dari jendela dunia) •

Set Viewport a) R > W/H (dengan R aspect ratio dari jendela dunia) • Jika jendela dunia ‘flatter’ daripada jendela layar, maka ada ruang yang tidak digunakan di atas dan atau dibawah. • Lebar jendela dunia akan dipetakan ke lebar layar: set. Viewport(0, W, 0, W/R);

Set Viewport b) R < W/H (dengan R aspect ratio dari jendela dunia) •

Set Viewport b) R < W/H (dengan R aspect ratio dari jendela dunia) • Jika jendela dunia ‘lebih tinggi’ daripada jendela layar maka akan ada ruang yang tidak terpakai. • Tinggi jendela dunia akan dipetakan ke tinggi jendela layar. set. Viewport(0, H*R, 0, H);

Pengubahan Ukuran Viewport • Dalam lingkungan windows environment, pengguna perlu mengubah ukuran dengan suka.

Pengubahan Ukuran Viewport • Dalam lingkungan windows environment, pengguna perlu mengubah ukuran dengan suka. • Jika ini terjadi, maka kita perlu memastikan bahwa yang digambar tidak berubah bentuk dan ukurannya.

Pengubahan Ukuran Viewport • Open. GL menyediakan fungsi resize untuk mengubah ukuran window. Ini

Pengubahan Ukuran Viewport • Open. GL menyediakan fungsi resize untuk mengubah ukuran window. Ini dapat dihubungkan dengan fungsi pengubahan ukuran yang anda buat sendiri. • glut. Reshape. Func( my. Reshape);

Pengubahan Ukuran Viewport void my. Reshape(GLsizei W, GLsizei H) { if(R > W/H) //use

Pengubahan Ukuran Viewport void my. Reshape(GLsizei W, GLsizei H) { if(R > W/H) //use global window aspect ratio set. Viewport(0, W, 0, W/R); else set. Viewport(0, H*R, 0, H); }

Agenda • Windows, Viewports dan Pemotongan • Pembuatan tool Penggambar yang Berguna. • Grafik

Agenda • Windows, Viewports dan Pemotongan • Pembuatan tool Penggambar yang Berguna. • Grafik Kura-kura

Windows dan Viewports • Sebelumnya kita melihat bahwa pada window Open. GL dengan x

Windows dan Viewports • Sebelumnya kita melihat bahwa pada window Open. GL dengan x dan y digambar sebagai nilai piksel positif. • Oleh karena itu, kita tidak tertarik untuk mempertahannya. • Kita lebih baik menggunakan koordinat dengan bebas sesuai dengan kondisi nyata. • Artinya harus dapat menampilkan nilai positif dan negatif.

Windows dan Viewports • Untuk itu kita perlu membedakan koordinat dunia, koordinat layar dan

Windows dan Viewports • Untuk itu kita perlu membedakan koordinat dunia, koordinat layar dan koordinat viewport. • Ini seperti….

Windows dan Viewports Dunia (apa yang kita lihat senyatanya) Jendela dunia (bagian kecil yang

Windows dan Viewports Dunia (apa yang kita lihat senyatanya) Jendela dunia (bagian kecil yang kita inginkan) Layar Viewport Jendela Layar

Windows dan Viewports • Jendela dunia adalah segiempat • Viewport adalah segiempat. • Keduanya

Windows dan Viewports • Jendela dunia adalah segiempat • Viewport adalah segiempat. • Keduanya tidak perlu mempunyai ukuran dan aspect ratio yang sama. • Koordinat dibutuhkan dijangkau, disusutkan dipindahkan untuk membuatnya cocok.

Windows dan Viewports Jendela dunia Contoh Viewports

Windows dan Viewports Jendela dunia Contoh Viewports

Windows dan Viewports Jendela dunia Viewport Ini disebut pemetaan (0, 0) (100, 0)

Windows dan Viewports Jendela dunia Viewport Ini disebut pemetaan (0, 0) (100, 0)

Windows dan Viewports • x’ = Ax + B dan y’ = Cy +

Windows dan Viewports • x’ = Ax + B dan y’ = Cy + D • Ini dibutuhkan untuk pemetaan.

Windows dan Viewports • Pemetaan melibatkan skala dan translasi. • Baik jendela dunia dan

Windows dan Viewports • Pemetaan melibatkan skala dan translasi. • Baik jendela dunia dan viewport dapat sembarang segiempat. • Biasanya viewport diset untuk seluruh jendela layar.

Windows dan Viewports W. t = Window atas W. l = Window kiri W.

Windows dan Viewports W. t = Window atas W. l = Window kiri W. b = Window bawah W. r = Window kanan V. t = Viewport atas V. l = Viewport kiri V. b = Viewport bawah V. r = Viewport kanan

Windows dan Viewports xmin, ymin, xmax, ymax = W. l, W. b, W. r,

Windows dan Viewports xmin, ymin, xmax, ymax = W. l, W. b, W. r, W. t SCREENWIDTH = V. r – V. l SCREENHEIGHT = V. t – V. b

Windows dan Viewports dx dsx • Pemetaan dibuat secara proporsional • Jarak sebuah titik

Windows dan Viewports dx dsx • Pemetaan dibuat secara proporsional • Jarak sebuah titik sepanjang sumbu x di jendela dunia proporsional dengan titik yang dibambar di sepanjang sumbu x di Viewport. • Berapa jauhkah x dari W. l? • dx = x – W. l • Sebagai proporsi keseluruhan panjang:

Windows dan Viewports • Jadi: • Atau disusun kembali menjadi: A C

Windows dan Viewports • Jadi: • Atau disusun kembali menjadi: A C

Windows dan Viewports • Dengan cara yang sama untuk y: • Atau disusun kembali

Windows dan Viewports • Dengan cara yang sama untuk y: • Atau disusun kembali menjadi: B D

Windows dan Viewports Contoh Jendela dunia Viewport World Window (10, 6) (-10, -6) 400

Windows dan Viewports Contoh Jendela dunia Viewport World Window (10, 6) (-10, -6) 400 Viewport 0 0 Berapakah A, B, C & D ? ? 600

Windows dan Viewports Viewport Jendela dunia 400 Contoh (10, 6) (-10, -6) A =

Windows dan Viewports Viewport Jendela dunia 400 Contoh (10, 6) (-10, -6) A = 600/20 = 30 B = 400/12 = 33. 3333 C = 0 – 30 * -10 = 300 D = 0 – 33. 3333 * -6 = 200 0 0 600 Jika benar, (-10, -6) harus dipetakan ke (0, 0) dan (10, 6) -> (600, 400) sx = A * -10 + C = 0 sy = B * -6 + D = 0 sx = A * 10 + C = 600 xy = B * 6 + D = 400

Windows dan Viewports • Apakah kita memerlukan perhitungan seperti ini setiap waktu dengan Open.

Windows dan Viewports • Apakah kita memerlukan perhitungan seperti ini setiap waktu dengan Open. GL? ?

Windows dan Viewports • Tidak • Open. GL melakukannya untuk kita • Tetapi yang

Windows dan Viewports • Tidak • Open. GL melakukannya untuk kita • Tetapi yang paling penting adalah kita paham apa yang sedang terjadi…. .

Windows dan Viewports • Setiap kali kita memanggil Open. GL untuk melukis titik (Contoh:

Windows dan Viewports • Setiap kali kita memanggil Open. GL untuk melukis titik (Contoh: gl. Vertex 2 f() etc. . ) koordinat titik dilalakan melalui set transformasi yang memtakan dari koordinat dunia ke koordinat viewport.

Windows dan Viewports • Pertama-tam kita set koordinat jendela dunia dengan: void gl. Ortho

Windows dan Viewports • Pertama-tam kita set koordinat jendela dunia dengan: void gl. Ortho 2 D(GLDouble left, GLDouble right, GLDouble bottom, GLDouble top); • Kemudian set viewport dengan: void gl. Viewport(GLint xmin, GLint ymin, GLint width, GLint height);

Windows dan Viewports void my. Init(void) { gl. Clear. Color(1. 0, 0. 0); gl.

Windows dan Viewports void my. Init(void) { gl. Clear. Color(1. 0, 0. 0); gl. Color 3 f(0, 0, 0); gl. Clear(GL_COLOR_BUFFER_BIT); gl. Matrix. Mode(GL_PROJECTION); gl. Load. Identity(); //set Pandangan Koordinat glu. Ortho 2 D(-10. 0, -6. 0, 6. 0); gl. Viewport(0, 0, 600, 400); }

Windows dan Viewports gl. Point. Size(10. 0); gl. Begin(GL_POINTS); gl. Vertex 2 i(-10, -6);

Windows dan Viewports gl. Point. Size(10. 0); gl. Begin(GL_POINTS); gl. Vertex 2 i(-10, -6); gl. Vertex 2 i(0, 0); gl. Vertex 2 i(10, 6); gl. End(); *Catatan: titik yang diberikan dalam Koordinat dunia dan Open. GL memetakannya ke koordinat Viewport.

Penggambaran Relatif • Penggambaran Relatif merujuk pada pergerakan titik gambar pada kanvas relatif ke

Penggambaran Relatif • Penggambaran Relatif merujuk pada pergerakan titik gambar pada kanvas relatif ke lokasi penggambaran. • Pikirkanlah ini seprti pergerakan pena pada kertas. • move. Rel() and line. Rel()

Grafik Kura-kura • Gambarlah garis dan titik pada layar sehingga menyerupai kura-kura. • Gunakan:

Grafik Kura-kura • Gambarlah garis dan titik pada layar sehingga menyerupai kura-kura. • Gunakan: – garis. Ke(float x, float y) – terus. Lurus(float panjang, int apa. Nampak) – dan lain-lain

Grafik Kura-kura Contoh: Polispiral for( int i=0; i<200; i++ ) { terus. Lurus(panjang, 1);

Grafik Kura-kura Contoh: Polispiral for( int i=0; i<200; i++ ) { terus. Lurus(panjang, 1); putar. Ke(sudut*i); panjang += inc; }

Contoh: Polispiral Grafik Kura-kura float sudut = 87, inc = 0. 05;

Contoh: Polispiral Grafik Kura-kura float sudut = 87, inc = 0. 05;

Contoh: Polispiral Grafik Kura-kura float sudut = 170, inc = 0. 1;

Contoh: Polispiral Grafik Kura-kura float sudut = 170, inc = 0. 1;

Contoh: Polispiral Grafik Kura-kura float sudut = 89. 5, inc = 0. 1;

Contoh: Polispiral Grafik Kura-kura float sudut = 89. 5, inc = 0. 1;

Poligon Teratur Berikut merupakan contoh poligon teratur.

Poligon Teratur Berikut merupakan contoh poligon teratur.

Poligon Teratur • Untuk menggambar poligon teratur dibutuhkan titik pusat, jejari dan sudut rotasi.

Poligon Teratur • Untuk menggambar poligon teratur dibutuhkan titik pusat, jejari dan sudut rotasi.

Poligon Teratur void ngon(int n, float cx, float cy, float radius, float rot. Angle)

Poligon Teratur void ngon(int n, float cx, float cy, float radius, float rot. Angle) { if(n < 3) return; //bad number of sides double angle = rot. Angle * 3. 14159265 / 180; //initial angle double angle. Inc = 2 * 3. 14159265 /n; //angle increment cvs. move. To(radius * cos(angle) + cx, radius * sin(angle) + cy); for(int k = 0; k < n; k++) // repeat n times { angle += angle. Inc; cvs. line. To(radius*cos(angle) + cx, radius*sin(angle) + cy); } }

Poligon Teratur ngon(6, 0. 0, 250. 0, 20. 0); ngon(10, 0. 0, 200. 0,

Poligon Teratur ngon(6, 0. 0, 250. 0, 20. 0); ngon(10, 0. 0, 200. 0, 30. 0); ngon(4, 0. 0, 150. 0, 10. 0); ngon(20, 0. 0, 100. 0, 5. 0);

Lingkaran dan Busur • Lingkaran dapat dibuat dengan poligon teratur tetapi dengan sejumlah besar

Lingkaran dan Busur • Lingkaran dapat dibuat dengan poligon teratur tetapi dengan sejumlah besar titik. void draw. Circle(Point 2 center, float radius) { const int num. Verts = 50; ngon(num. Verts, center. get. X(), center. get. Y(), radius, 0); }

Lingkaran

Lingkaran

Lingkaran dan Busur • Untuk melukis busur atau lingkaran dibutuhkan titik pusat, sudut awal

Lingkaran dan Busur • Untuk melukis busur atau lingkaran dibutuhkan titik pusat, sudut awal (a) dan sudut busur (b).

Lingkaran dan Busur Kode ini mirip dengan ngon( ) sehingga busar dapat digambar, yang

Lingkaran dan Busur Kode ini mirip dengan ngon( ) sehingga busar dapat digambar, yang berarti kita tidak menggambar 360 derajad. draw. Arc(Point 2 center, float radius, float start. Angle, float sweep) { // start. Angle dan sweep dalam derajad const int n = 30; // jumlah segmen float angle = start. Angle * 3. 14159265 / 180; // inisialisasi sudut dalam radian float angle. Inc = sweep * 3. 14159265 /(180 * n); // penaikan sudut float cx = center. get. X(), cy = center. get. Y(); pindah. Ke(cx + radius * cos(angle), cy + radius * sin(angle)); for(int k = 1; k < n; k++, angle += angle. Inc) garis. Ke(cx + radius * cos(angle), cy + radius * sin(angle)); }

Busur

Busur

Lingkaran dan Busur p. set(0. 0, 0. 0); draw. Arc(p, 50, 45, 90); draw.

Lingkaran dan Busur p. set(0. 0, 0. 0); draw. Arc(p, 50, 45, 90); draw. Arc(p, 40, 15, 90); draw. Arc(p, 30, 0, 90); draw. Arc(p, 20, 90);

Latihan: Lingkaran dan Busur Putar: airmata Tulis sebuah fungsi airmata() yang akan menggambarkan sebuah

Latihan: Lingkaran dan Busur Putar: airmata Tulis sebuah fungsi airmata() yang akan menggambarkan sebuah airmata.

Kurva Parametrik Sebuah kurva dapat dinyatakan: 1. Secara implisit § § § F(x, y)

Kurva Parametrik Sebuah kurva dapat dinyatakan: 1. Secara implisit § § § F(x, y) = 0; F(x, y) = (y – Ay)(Bx-Ax) – (x-Ax)(By-Ay) F(x, y) = 0 untuk semua titik pada kurva. F(x, y) > 0 untuk semua titik di luar kurva. F(x, y) < 0 untuk semua titik di dalam kurva.

Kurva Parametrik • F(x, y) = x 2 + y 2 - R 2

Kurva Parametrik • F(x, y) = x 2 + y 2 - R 2 • F(x, y) < 0 (didalam)

Kurva Parametrik • F(x, y) = x 2 + y 2 - R 2

Kurva Parametrik • F(x, y) = x 2 + y 2 - R 2 • F(x, y) > 0 (diluar)

Kurva Parametrik • F(x, y) = x 2 + y 2 - R 2

Kurva Parametrik • F(x, y) = x 2 + y 2 - R 2 • F(x, y) = 0 (pada lingkaran)

Kurva Parametrik • Masalah perwakilan secara implisit – Mungkin banyak nilai x dan y.

Kurva Parametrik • Masalah perwakilan secara implisit – Mungkin banyak nilai x dan y. – Beberapa fungsi mungkin hanya bergantung pada nilai x saja. – Beberapa fungsi mungkin hanya bergantung pada nilai y saja

Kurva Parametrik Nilai tunggal dalam y Nilai tunggal dalam x

Kurva Parametrik Nilai tunggal dalam y Nilai tunggal dalam x

Kurva Parametrik Kurva dapat digambarkan: 2. Secara Parametrik • • Titik berbeda pada sebuah

Kurva Parametrik Kurva dapat digambarkan: 2. Secara Parametrik • • Titik berbeda pada sebuah kurva dihasilkan untuk semuah parameter. Nilai parameter menyarankan pergerakan titik pada kurva seturut dengan waktu yang berjalan.

Kurva Parametrik waktu

Kurva Parametrik waktu

Kurva Parametrik waktu

Kurva Parametrik waktu

Kurva Parametrik waktu

Kurva Parametrik waktu

Kurva Parametrik waktu

Kurva Parametrik waktu

Kurva Parametrik waktu

Kurva Parametrik waktu

Kurva Parametrik waktu

Kurva Parametrik waktu

Kurva Parametrik waktu

Kurva Parametrik waktu

Kurva Parametrik • Lintasan pergerakan partikel sepanjang kurva ditetapkan oleh dua fungsi, x() and

Kurva Parametrik • Lintasan pergerakan partikel sepanjang kurva ditetapkan oleh dua fungsi, x() and y(). • Posisi dari partikel pada sembarang titik dan pada waktu tertentu adalah (x(t), y(t)).

Kurva Parametrik Contoh: Sebuah garis lurus dari A ke B pada t=0 partikel di

Kurva Parametrik Contoh: Sebuah garis lurus dari A ke B pada t=0 partikel di A dan pada t=1 partikel ada di B. B t=1 A t=0

Kurva Parametrik Jadi: x(t) = Ax + (Bx – Ax)t y(t) = Ay +

Kurva Parametrik Jadi: x(t) = Ax + (Bx – Ax)t y(t) = Ay + (By – Ay(t) Titik bergerak melalui semua titik pada garis A dan B pada t dari 0 ke 1. B t=1 A t=0

Kurva Parametrik Contoh: Elips H * sin(t) W * cos(t)

Kurva Parametrik Contoh: Elips H * sin(t) W * cos(t)

Kurva Parametrik //plot ellipse GLdouble width = 500. 0; GLdouble height = 200. 0;

Kurva Parametrik //plot ellipse GLdouble width = 500. 0; GLdouble height = 200. 0; GLdouble TWOPI = 2 * 3. 14159265; float interval = 2500. 0; gl. Push. Matrix(); gl. Translated (512, 300, 0); gl. Begin(GL_POINTS); gl. Color 3 f(0, 0, 1); //warna poligon biru for(GLdouble t = 0; t <= TWOPI; t += TWOPI/interval ) { gl. Vertex 2 d(width * cos(t), height * sin(t)); } gl. End(); gl. Pop. Matrix();

Kurva Parametrik

Kurva Parametrik

Koordinat Polar • Masing-masing titik pada kurva diwakili oleh jarak radial (r) dan sudut

Koordinat Polar • Masing-masing titik pada kurva diwakili oleh jarak radial (r) dan sudut (θ). r dan θ merupakan fungsi t yang dinyatakan dengan (r(t), θ(t)) • x(t) = r(t)cos(θ(t)) • y(t) = r(t)sin(θ(t))

Koordinat Polar • Untuk masing-masing titik x dan y dapat disederhanakan: – x =

Koordinat Polar • Untuk masing-masing titik x dan y dapat disederhanakan: – x = f(θ)cos(θ) – y = f(θ)sin(θ)

Koordinat Polar Contoh: Kurva bunga mawar gl. Begin(GL_POINTS); gl. Color 3 f(1, 0, 0);

Koordinat Polar Contoh: Kurva bunga mawar gl. Begin(GL_POINTS); gl. Color 3 f(1, 0, 0); //warna poligon merah draw. Polar(center, 270, 10); gl. Color 3 f(0, 1, 0); //warna poligon hijau draw. Polar(center, 260, 6); gl. Color 3 f(0, 0, 1); //warna poligon biru draw. Polar(center, 230, 3); gl. End();

Istirahat

Istirahat