1 / 78

Pertemuan 03: Grafika Komputer: Windows dan Viewport

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 Busur Kurva Parametrik Koordinat Polar.

Download Presentation

Pertemuan 03: Grafika Komputer: Windows dan Viewport

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. Fungsi yang Berguna //--------------- setWindow --------------------- void setWindow(GLdouble left, Gldouble right, GLdouble bottom, GLdouble top) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(left, right, bottom, top); } //---------------- setViewport ------------------ void setViewport(GLdouble left, Gldouble right, GLdouble bottom, GLdouble top) { glViewport(left, bottom, right – left, top - bottom); }

  4. float x, xmin = 0, xmax=1024; glColor3f(0,0,1); //warna garis biru glPushMatrix(); glTranslated (0, 300, 0); glBegin(GL_POINTS); glVertex2d(0, 0); for(x = xmin; x < xmax; x+=0.005 ) { //glVertex2d(x, 200*pow(2.71, -x/300)*cos(4*3.14*x/360)); glVertex2d(x, 200*cos(2*2*3.14*x/360)); } glEnd(); glPopMatrix();

  5. 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.

  6. 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.

  7. 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.

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

  9. 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

  10. 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

  11. 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:setViewport(0,W,0,W/R);

  12. 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. setViewport(0,H*R,0,H);

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

  14. Pengubahan Ukuran Viewport • OpenGL menyediakan fungsi resize untuk mengubah ukuran window. Ini dapat dihubungkan dengan fungsi pengubahan ukuran yang anda buat sendiri. • glutReshapeFunc( myReshape);

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

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

  17. Windows dan Viewports • Sebelumnya kita melihat bahwa pada window OpenGL 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.

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

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

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

  21. Jendela dunia Windows dan Viewports Contoh Viewports

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

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

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

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

  26. 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

  27. dx dsx Windows dan Viewports • 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:

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

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

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

  31. Windows dan Viewports Viewport Jendela dunia 400 Contoh (10,6) 0 (-10,-6) 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 A = 600/20 = 30 B = 400/12 = 33.3333 C = 0 – 30 * -10 = 300 D = 0 – 33.3333 * -6 = 200

  32. Windows dan Viewports • Apakah kita memerlukan perhitungan seperti ini setiap waktu dengan OpenGL??

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

  34. Windows dan Viewports • Setiap kali kita memanggil OpenGL untuk melukis titik (Contoh: glVertex2f() etc..) koordinat titik dilalakan melalui set transformasi yang memtakan dari koordinat dunia ke koordinat viewport.

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

  36. Windows dan Viewports void myInit(void) { glClearColor(1.0,1.0,1.0,0.0); glColor3f(0,0,0); glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); //set Pandangan Koordinat gluOrtho2D(-10.0, 10.0, -6.0, 6.0); glViewport(0,0,600,400); }

  37. Windows dan Viewports glPointSize(10.0); glBegin(GL_POINTS); glVertex2i(-10,-6); glVertex2i(0,0); glVertex2i(10,6); glEnd(); *Catatan: titik yang diberikan dalam Koordinat dunia dan OpenGL memetakannya ke koordinat Viewport.

  38. Penggambaran Relatif • Penggambaran Relatif merujuk pada pergerakan titik gambar pada kanvas relatif ke lokasi penggambaran. • Pikirkanlah ini seprti pergerakan pena pada kertas. • moveRel() and lineRel()

  39. Grafik Kura-kura • Gambarlah garis dan titik pada layar sehingga menyerupai kura-kura. • Gunakan: • garisKe(float x, float y) • terusLurus(float panjang, int apaNampak) • dan lain-lain

  40. Grafik Kura-kura Contoh: Polispiral for( int i=0; i<200; i++ ) { terusLurus(panjang, 1); putarKe(sudut*i); panjang += inc; }

  41. Grafik Kura-kura Contoh: Polispiral float sudut = 87, inc = 0.05;

  42. Grafik Kura-kura Contoh: Polispiral float sudut = 170, inc = 0.1;

  43. Grafik Kura-kura Contoh: Polispiral float sudut = 89.5, inc = 0.1;

  44. Poligon Teratur Berikut merupakan contoh poligon teratur.

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

  46. Poligon Teratur void ngon(int n, float cx, float cy, float radius, float rotAngle) { if(n < 3) return; //bad number of sides double angle = rotAngle * 3.14159265 / 180; //initial angle double angleInc = 2 * 3.14159265 /n; //angle increment cvs. moveTo(radius * cos(angle) + cx, radius * sin(angle) + cy); for(int k = 0; k < n; k++) // repeat n times { angle += angleInc; cvs.lineTo(radius*cos(angle) + cx, radius*sin(angle) + cy); } }

  47. Poligon Teratur ngon(6,0.0,0.0,250.0, 20.0); ngon(10,0.0,0.0,200.0, 30.0); ngon(4,0.0,0.0,150.0, 10.0); ngon(20,0.0,0.0,100.0, 5.0);

  48. Lingkaran dan Busur • Lingkaran dapat dibuat dengan poligon teratur tetapi dengan sejumlah besar titik. void drawCircle(Point2 center, float radius) { const int numVerts = 50; ngon(numVerts, center.getX(), center.getY(), radius, 0); }

  49. Lingkaran

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

More Related