sheet komgraf

4
KUL 8. VIEWING Viewing: mentransformasikan objek 3D di alam nyata menjadi 2 dimensi. Viewing secara klasik membutuhkan tiga elemen dasar, yaitu : (1) Satu atau lebih objek. (2) Viewer dg projection surface (bidang projeksi)-nya. (3) Projectors yg memetakan objek-objek terhadap bidang proyeksi. Projections: Yaitu memetakan suatu titik A ke A’ pada bidang proyeksi. Projection meliputi 2 hal berikut (1) Projection surface : Bidang proyeksi, bisa berupa bidang datar(planar) maupun tidak datar (non planar). (2) Projector : Garis-garis proyeksi yang menghubungkan titik ke pusat proyeksi, bisa berupa garis lurus (geometric) maupun garis berkurva lengkung. Planar Geometric Projections: teknik proyeksi untuk memproyeksikan objek pada suatu media proyeksi berupa planar/bidang datar dengan projector berupa garis lurus (geometric). Planar geometric projection ini memiliki dua jenis proyeksi, yaitu (1) Perspective: mengerucut konvergen pada pusat projeksi. (2) Parallel: garis-garis proyektor sejajar. Non planar projection: proyeksi pada bidang tidak datar. Ada 3 aspek yang terlibat dalam proses viewing, (1)Memposisikan kamera atau benda: Mengatur matrix model-view. (2) Setting up lens: menyeting ukuran lensa, pilih setingan matrix, dan jarak. (3) Clipping: Menentukan seberapa besar benda yg akan masuk ke bidang view(setting glViewport). Camera Modeling in OpenGL: (1) Posisikan benda&kamera glMatrixMode(GL_Modelview) . (2) Setting projectionnya (perspektif atau paralel) glMatrixMode(GL_PROJECTION ). (3) Tentukan seberapa besar objek yg masuk ke daerah view glViewport(0,0,xres,yres). The OpenGL Camera: (1) matriks default dari model_view dan projections matriks adalah matriks identitas. (2) Lokasi viewer default berada pada titik 0,0 (negatif z). (3)Default view volume adalah berbentuk ruang kubus berukuran 2 satuan dari pusat. Objek di luar view volume ini tidak akan tergambar. Parallel Projection: Proyeksi yg akan menghasilkan objek 2 dimensi yg sesuai dg ukuran aslinya. Untuk mengimplementasikannya gunakan glOrtho(Xmin, Xmax, Ymin, Ymax, Zmin, Zmax); (1) Orthographic Projection: Arah sinar proyeksi tegak lurus terhadap bidang proyeksi. Kelebihan: mempertahankan distances dan angles (i) Shapes preserved. (ii) Dapat digunakan bagi aktifitas pengukuran, seperti rencana pembangunan gedung (volume) dan Pengukuran manual. Kekurangan: (i) Tidak dapat melihat penampilan objek secara nyata karena banyak sisi yang berasal dari view berbeda yang tersembunyikan, sehingga u/ melengkapi informasi ini sering digunakan proyeksi isometric. Orthographic projections ada 4 macam : Front elevation, side elevation, top, dan axonometric (miring). (1.1) Axonometric Projections: Bidang projeksi atau objek dirotasi sedemikian rupa sehingga memperlihatkan sisi yang tersembunyi. Disebut Axonometric Projections-Isometric jika bidang proyeksi beririsan dengan axes pada jarak yang sama untuk x,y,z dari pusat. Disebut Axonometric Projections-Dimetric jika hanya 2 bidang proyeksi beririsan dengan axes pada jarak yang sama untuk x,y,z dari pusat. Disebut Axonometric Projections- Trimetric jika bidang proyeksi beririsan dengan axes pada jarak yang tidak sama untuk x,y,z dari pusat. Kekurangan dan kelebihan: (1) garis akan diskalakan (menjadi lebih pendek) akan tetapi info faktor skala dapat digunakan. (2) Info garis dipertahankan namun angle tidak. (3) Proyeksi objek lingkaran tergambar sebagai ellips. (4) Dapat melihat lebih banyak sisi suatu benda. (5) Dimungkinkan terjadinya ilusi optic. (6) Parallel lines appear to diverge/menyebar. (7) Tidak terlihat nyata karena objek yang dekat akan diskalakan seperti objek yang jauh. (8) Digunakan pada aplikasi CAD. (2) Oblique Projections: Arah sinar proyeksi miring/oblique terhadap bidang proyeksi. Kekurangan dan kelebihan: (1) Dapat memilih suatu nilai sudut terhadap suatu sisi tertentu sehingga detailitas sisi tersebut semakin jelas. (2) Sisi yang sejajar terhadap projeksi dapat dilihat dan pada saat yang sama kita dapat pula melihat bagian sisi lain sekelilingnya. (3) Pada kehidupan nyata teknik ini tidak dapat dihasilkan oleh kamera sederhana. Perspective Projection: Melihat benda yg mengkerucut kearah viewernya. Jadi ukurannya tidak sama dg aslinya (gambarnya lebih kecil). Cara mengimplementasi di OpenGL: (1) glFrustum(Xmin, Xmax, Ymin, Ymax, Zmin, Zmax);. (2) gluPerspective(fov, aspect, near, far);. Fov = Ѳ(sudut). aspect=w/h w= lebar benda yg diproyeksikan, h=tinggi. Near=jarak terdekat. Far=Jarak ke titik terjauh. Keunggulan dan kelemahan: (1) Objek yang jauh terlihat kecil Looks realistic. (2) Jarak yg diproyeksikan tdk sama dgn yg sebenarnya. (3) sulit jika dilakukan dengan menggunakan tangan. Positioning the Camera : (1) Mengubah-ubah posisi kamera. (2) ada 2 cara untuk mengubah ukuran objek/pose objek/transformasi objek: (a) Memundurkan objek dg translatef dan rotatef glTranslatef(- 10, -2, -10);. (b) mengubah posisi kamera didepan objek sesuai koordinat gluLookAt(10, 2, 10, … ); gluLookAt(eyex, eyey, eyez, lookx, looky, lookz, upx, upy, upz);. Eye=posisi si kamera (x,y,z). Look=posisi benda yg akan dilihat(x,y,z). Up= Garis normal dr kamera/bidang tegak lurusnya. The Viewport: Mendefinisikan area penglihatan memetakan koordinat 3D kedalam koordinat 2D. Titik-titik viewport didefinisikan dari parameter proyeksi: glFrustrum(left, right, bottom, top, near, far);glFrustrum(l,r,b,t,n, f); gluPerspective(fovy, aspect, near, far); gluPerspective(fv, a, n, f); Viewport to Window Transformation: glViewport(int x, int y, int width, int height);. Rumus dimension in pixels of the viewport Biasanya window digambar kembali setelah ada event yang me-resize window (minimize/maximize window) to ensure a correct mapping between viewport and window dimensions -> callback reshape function. static void reshape(int width, int height) {glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION ); glLoadIdentity(); gluPerspective(85.0, 1.0, 5, 50);} Aspect Ratio: Hubungan antara ketinggian dan lebar dari sebuah gambar (w/h). Aspect ratio dg viewport harus match agar terhindar dari ditorsi(pemampatan gambar). KUL 9. INPUT&INTERACTION Karaketristik komputer grafik interaktif -Ivan Sutherland (MIT 1963) : (1) User melihat object pada display. (2) User menunjuk (picks) object dengan input device (light pen, mouse, trackball). (3) Perubahan object (moves, rotates, morphs). (4) pengulangan. Alat input dapat dibedakan berdasarkan: (1) Physical properties: (a) Light Pen: Alat input menyerupai pena yang memancarkan sinar untuk dituliskan langsung pada layar monitor atau pada bidang datar yang khusus. Light pen memiliki sensor yang dapat mengirimkan sinyal cahaya yang kemudian direkam dan dihubungkan dengan kabel ke komputer untuk diintrepretasikan. (b) TrackBall: Berfungsi seperti mouse tapi penggunaannya dengan memutar bola. Punya tombol left & right click. (c) SpaceBall: Jika Trackball biasa digunakan pada aplikasi 2 dimensi, maka Spaceball digunakan pada aplikasi 3 dimensi, virtual reality dan pemodelan. (2) Logical Devices : Input dari sudut pandang logika program C+ +: cin >> x; C: scanf (”%d”, &x); Alat input seperti tablet akan memberikan data input berupa current position ke computer. Sedangkat alat input berupa mouse, trackball, and joy stick akan memberikan incremental inputs (or velocities) ke computer. Pada incremental device (ex:mouse), inputannya berupa position dan velocity. Graphical Logical Devices: Pada API sebelum Open GL, yaitu GKS dan PHIGS, didefinisikan enam tipe logical input (1) Locator: return a position in coordinat system. (2) Pick: return ID of an object. (3) Keyboard: return strings of characters. (4) Stroke: return array of positions. (5) Valuator: analog input (ex: slidebar), return floating point number. (6) Choice: return one of n items (ex: radio button). Trigger & Measure: Input devices menggunakan trigger untuk mengirim sinyal ke OS, seperti (a) menekan tombol pada mouse(memberikan informasi lokasi)/ keyboard (mengembalikan kode ASCII). keyboard: Measure string, Trigger when press “enter” or “return”. Mouse: Measure screen position, Trigger when press button. Input Mode: Logical input device bisa dioperasikan dalam 3 mode, yaitu: Sample mode, Request mode, dan Event mode. Sample Mode: Tidak ada trigger. Pengembalian Measured data dilakukan secara langsung. Contohnya seperti current cursor position tanpa menunggu trigger Request Mode: seperti “scanf” : Collect measure, waiting for trigger, menekan backspace(erase), edit. Event Mode: Aplikasi dapat mengaktifkan beberapa input device secara simultan. Setiap trigger menghasilkan event dimana measure akan ditempatkan pada event queue u/ kemudian diperiksa oleh program. Ada banyak input device yg digunakan secara bersamaan. Event Types: (1) Window: resize, expose, iconify. (2) Mouse: click one or more buttons. (3) Motion: move mouse. (4) Keyboard: press or release a key. (5) Idle: nonevent. GLUT Event Loop: Ketika ada looping, GLUT akan (1) memeriksa event queue. (2) Untuk setiap event pada queue, GLUT mengeksekusi fungsi callback jika fungsi tsb sudah didefinisikan sebelumnya. (3) Jika definisi fungsi callback belum didefinisikan maka event tsb diabaikan. glutMainLoop(); untuk menempatkan program pada infinite event loop. GLUT Callback Function: glutDisplayFunc, glutMouseFunc, glutReshapeFunc, glutKeyboardFunc, glutIdleFunc. GLUT Defined Mouse Constants : GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON, GLUT_UP, GLUT_DOWN Reshape Callback: Dipanggil ketika ada perubahan pada window event. (1) Redraw, resize. (2)Aspect ratio. (3) Attribute of new primitive. (4) Use. glutReshapeFunc(reshape_fu nction); Keyboard Callback: Dipanggil ketika tombol key ditekan. glutKeyboardFunc(keyboad_f unction); Display callback: Callback display func dieksekusi ketika GLUT memerintahkan window u/ di refresh atau ketika (1) window pertama kali dibuka. (2) Ketika window direshape. (3) Ketika user ingin merubah display. glutDisplayFunc(mydisplay) Posting redisplays: Dipakai ketika display dipanggil berkali- kali, biasanya digunakan pd program animasi. glutPostRedisplay(); Ada 2 jenis Buffering: (1) Single buffering: layernya cuma ada 1. (2) Double buffering: Layernya ada 2 (front and back). Back=yang menggambar (redraw). Front=yg menampilkan gambar dilayar utama. Idle callback: Dieksekusi ketika tidak ada event di event queue. glutIdleFunc(myidle) KUL10-Fractal&particle system FRACTAL – Merupakan objek geometri yg terbentuk dr pengulangan pola geometri tertentu(tersusun atas bntk yg seragam). Pola diulang sampai level tertentu maupun tak hingga. Geometri Euclidian: Trapezoid; Segitiga; Persegi; Persegi panjang; Segi lima; Segi enam; Lingkaran; Silinder. Secara intuitif geometri euclidian hanya tepat u/ memodelkan objek2 artifisial cth: gedung, rumah,monitor, drum. Objek di alam umumnya memiliki bentuk ireggular, pola geometrinya tdk seragam kadang bahkan ada yg tdk beraturan Ada juga sifat infinit detail infinit length. U/ kebanyakan objek alam geometri euclidian kurang cocok. Cara membuat fractal: 1. segitiga sierpinsky Buat segitiga sama sisi; : Buat 3 segitiga yg lebih kecil dg ukuran lebar & tinggi setengahnya. lalu susun dg mempertemukan ujung2 segitiga; Lakukan langkah yg sama u/ tiap area segitiga yg terbentuk. Kodingan: void divide_triangle(point2 a, point2 b, point2 c, int m) { /* triangle subdivision using vertex numbers */ point2 v0, v1, v2; int j; if(m>0) { for(j=0; j<2; j+ +)v0[j]=(a[j]+b[j])/2; for(j=0; j<2; j++) v1[j]=(a[j]+c[j])/2; for(j=0; j<2; j++) v2[j]=(b[j]+c[j])/2; divide_triangle(a, v0, v1, m-1); divide_triangle(c, v1, v2, m-1); divide_triangle(b, v2, v0, m-1);} else(triangle(a,b,c)); /* draw triangle at end of recursion */}. 2. Koch Snowflake – Buat segitiga; Bagi tiap sisi jadi 3, lalu buat segitiga lg pd bgian tengah sisi tsb ke arah luar; Lanjutkan langkah tsb u/ tiap sisi sampai level tertentu. Kodingan: GLvoid display( GLvoid ){glClear( GL_COLOR_BUFFER_BIT );/* Do all your OpenGL rendering here */ glBegin(GL_LINES);//koch snowflake mOldX = 0.0; mOldY = 0.0;drawKoch(60.0, 1.0, maxLevel );mOldX = 0.5;mOldY = sqrt(3)/2.0;drawKoch(- 60.0, 1.0, maxLevel);mOldX = 1.0;mOldY = 0.0;drawKoch(-180.0, 1.0, maxLevel);glEnd();glFlush( );}GLvoid drawKoch(GLdouble dir, GLdouble len, GLint n) {GLdouble dirRad = 0.0174533 * dir; /* convert to radians */ GLfloat newX = mOldX + len * cos(dirRad);GLfloat newY = mOldY + len * sin(dirRad);if (n == 0) {glVertex2f(mOldX, mOldY);glVertex2f(newX, newY);mOldX = newX;mOldY = newY;}else{n--;/* reduce the order */len /= 3.0; /* reduce the length */drawKoch(dir, len, n);dir += 60.0;drawKoch(dir, len, n);dir -= 120.0;drawKoch(dir, len, n);dir += 60.0;drawKoch(dir, len, n);}}. 3. Dragon Curve: Gambar segmen garis vertikal. Tandai titik awal (misalnya, atas) & titik akhir segmen . Putar 90 derajat (berlawanan) dg titik akhir lalu gambar bersama gambar asli & gambar yg sdh diputar. Tandai titik akhir dr gambar yg sudah diputar tadi. Putar lagii gambar 90 derajat, & gabungkan gambar asli dg gambar yg sdh diputar. Proses ini dpt diulangi sebanyak yg diinginkan. U/ bantu melakukan proses, perhatikan bahwa titik akhir dr gambar asli akan disesuaikan dg titik awal dr gambar yg sdh diputar. x w =( x n +1) ( width 2 ) +xy w =( y n +1) ( height 2 ) +y

Upload: weni-handayani

Post on 22-Jun-2015

328 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Sheet komgraf

KUL 8. VIEWINGViewing: mentransformasikan objek 3D di alam nyata menjadi 2 dimensi. Viewing secara klasik membutuhkan tiga elemen dasar, yaitu : (1) Satu atau lebih objek. (2) Viewer dg projection surface (bidang projeksi)-nya. (3) Projectors yg memetakan objek-objek terhadap bidang proyeksi. Projections: Yaitu memetakan suatu titik A ke A’ pada bidang proyeksi. Projection meliputi 2 hal berikut (1) Projection surface : Bidang proyeksi, bisa berupa bidang datar(planar) maupun tidak datar (non planar). (2) Projector : Garis-garis proyeksi yang menghubungkan titik ke pusat proyeksi, bisa berupa garis lurus (geometric) maupun garis berkurva lengkung.Planar Geometric Projections: teknik proyeksi untuk memproyeksikan objek pada suatu media proyeksi berupa planar/bidang datar dengan projector berupa garis lurus (geometric). Planar geometric projection ini memiliki dua jenis proyeksi, yaitu (1) Perspective: mengerucut konvergen pada pusat projeksi. (2) Parallel: garis-garis proyektor sejajar.Non planar projection: proyeksi pada bidang tidak datar.Ada 3 aspek yang terlibat dalam proses viewing, (1)Memposisikan kamera atau benda: Mengatur matrix model-view. (2) Setting up lens: menyeting ukuran lensa, pilih setingan matrix, dan jarak. (3) Clipping: Menentukan seberapa besar benda yg akan masuk ke bidang view(setting glViewport).Camera Modeling in OpenGL: (1) Posisikan benda&kamera glMatrixMode(GL_Modelview). (2) Setting projectionnya (perspektif atau paralel) glMatrixMode(GL_PROJECTION). (3) Tentukan seberapa besar objek yg masuk ke daerah view glViewport(0,0,xres,yres).The OpenGL Camera: (1) matriks

default dari model_view dan projections matriks adalah matriks identitas. (2) Lokasi viewer default berada pada titik 0,0 (negatif z). (3)Default view volume adalah berbentuk ruang kubus berukuran 2 satuan dari pusat. Objek di luar view volume ini tidak akan tergambar.Parallel Projection: Proyeksi yg akan menghasilkan objek 2 dimensi yg sesuai dg ukuran aslinya. Untuk mengimplementasikannya gunakan glOrtho(Xmin, Xmax, Ymin, Ymax, Zmin, Zmax); (1) Orthographic Projection: Arah sinar proyeksi tegak lurus terhadap bidang proyeksi. Kelebihan: mempertahankan distances dan angles (i) Shapes preserved. (ii) Dapat digunakan bagi aktifitas pengukuran, seperti rencana pembangunan gedung (volume) dan Pengukuran manual. Kekurangan: (i) Tidak dapat melihat penampilan objek secara nyata karena banyak sisi yang berasal dari view berbeda yang tersembunyikan, sehingga u/ melengkapi informasi ini sering digunakan proyeksi isometric. Orthographic projections ada 4 macam : Front elevation, side elevation, top, dan axonometric (miring). (1.1) Axonometric Projections: Bidang projeksi atau objek dirotasi sedemikian rupa sehingga memperlihatkan sisi yang tersembunyi. Disebut Axonometric Projections-Isometric jika bidang proyeksi beririsan dengan axes pada jarak yang sama untuk x,y,z dari pusat. Disebut Axonometric Projections-Dimetric jika hanya 2 bidang proyeksi beririsan dengan axes pada jarak yang sama untuk x,y,z dari pusat. Disebut Axonometric Projections-Trimetric jika bidang proyeksi beririsan dengan axes pada jarak yang tidak sama untuk x,y,z dari pusat. Kekurangan dan kelebihan: (1) garis akan diskalakan (menjadi lebih pendek) akan tetapi info faktor skala dapat digunakan. (2) Info garis dipertahankan namun angle tidak. (3) Proyeksi objek lingkaran tergambar sebagai ellips. (4) Dapat melihat lebih banyak sisi suatu benda. (5) Dimungkinkan terjadinya ilusi optic. (6) Parallel lines appear to diverge/menyebar. (7) Tidak terlihat nyata karena objek yang dekat akan diskalakan seperti objek yang jauh. (8) Digunakan pada aplikasi CAD.(2) Oblique Projections: Arah sinar proyeksi miring/oblique terhadap bidang proyeksi. Kekurangan dan kelebihan: (1) Dapat memilih suatu

nilai sudut terhadap suatu sisi tertentu sehingga detailitas sisi tersebut semakin jelas. (2) Sisi yang sejajar terhadap projeksi dapat dilihat dan pada saat yang sama kita dapat pula melihat bagian sisi lain sekelilingnya. (3) Pada kehidupan nyata teknik ini tidak dapat dihasilkan oleh kamera sederhana.Perspective Projection: Melihat benda yg mengkerucut kearah viewernya. Jadi ukurannya tidak sama dg aslinya (gambarnya lebih kecil). Cara mengimplementasi di OpenGL: (1) glFrustum(Xmin, Xmax, Ymin, Ymax, Zmin, Zmax);. (2) gluPerspective(fov, aspect, near, far);. Fov = Ѳ(sudut). aspect=w/h w= lebar benda yg diproyeksikan, h=tinggi. Near=jarak terdekat. Far=Jarak ke titik terjauh. Keunggulan dan kelemahan: (1) Objek yang jauh terlihat kecil Looks realistic. (2) Jarak yg diproyeksikan tdk sama dgn yg sebenarnya. (3) sulit jika dilakukan dengan menggunakan tangan.Positioning the Camera : (1) Mengubah-ubah posisi kamera. (2) ada 2 cara untuk mengubah ukuran objek/pose objek/transformasi objek: (a) Memundurkan objek dg translatef dan rotatef glTranslatef(-10, -2, -10);. (b) mengubah posisi kamera didepan objek sesuai koordinat gluLookAt(10, 2, 10, … ); gluLookAt(eyex, eyey, eyez, lookx, looky, lookz, upx, upy, upz);. Eye=posisi si kamera (x,y,z). Look=posisi benda yg akan dilihat(x,y,z). Up= Garis normal dr kamera/bidang tegak lurusnya.The Viewport: Mendefinisikan area penglihatan memetakan koordinat 3D kedalam koordinat 2D. Titik-titik viewport didefinisikan dari parameter proyeksi: glFrustrum(left, right, bottom, top, near, far);glFrustrum(l,r,b,t,n,f); gluPerspective(fovy, aspect, near, far); gluPerspective(fv, a, n, f);Viewport to Window Transformation: glViewport(int x, int y, int width, int height);. Rumus dimension in pixels of the viewport Biasanya window digambar kembali setelah ada event yang me-resize window (minimize/maximize window) to ensure a correct mapping between viewport and window dimensions -> callback reshape function. static void reshape(int width, int height){glViewport(0, 0, width, height);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(85.0, 1.0, 5, 50);}Aspect Ratio: Hubungan antara ketinggian dan lebar dari sebuah gambar (w/h). Aspect ratio dg viewport harus match agar terhindar dari ditorsi(pemampatan gambar).

KUL 9. INPUT&INTERACTIONKaraketristik komputer grafik interaktif -Ivan Sutherland (MIT 1963) : (1) User melihat object pada display. (2) User menunjuk (picks) object dengan input device (light pen, mouse, trackball). (3) Perubahan object (moves, rotates, morphs). (4) pengulangan. Alat input dapat dibedakan berdasarkan: (1) Physical properties: (a) Light Pen: Alat input menyerupai pena yang memancarkan sinar untuk dituliskan langsung pada layar monitor atau pada bidang datar yang khusus. Light pen memiliki sensor yang dapat mengirimkan sinyal cahaya yang kemudian direkam dan dihubungkan dengan kabel ke komputer untuk diintrepretasikan. (b) TrackBall: Berfungsi seperti mouse tapi penggunaannya dengan memutar bola. Punya tombol left & right click. (c) SpaceBall: Jika Trackball biasa digunakan pada aplikasi 2 dimensi, maka Spaceball digunakan pada aplikasi 3 dimensi, virtual reality dan pemodelan. (2) Logical Devices : Input dari sudut pandang logika program C++: cin >> x; C: scanf (”%d”, &x);Alat input seperti tablet akan memberikan data input berupa current position ke computer. Sedangkat alat input berupa mouse, trackball, and joy stick akan memberikan incremental inputs (or velocities) ke computer. Pada incremental device (ex:mouse), inputannya berupa position dan velocity. Graphical Logical Devices: Pada API sebelum Open GL, yaitu GKS dan PHIGS, didefinisikan enam tipe logical input (1) Locator: return a position in coordinat system.

(2) Pick: return ID of an object. (3) Keyboard: return strings of characters. (4) Stroke: return array of positions. (5) Valuator: analog input (ex: slidebar), return floating point number. (6) Choice: return one of n items (ex: radio button).Trigger & Measure: Input devices menggunakan trigger untuk mengirim sinyal ke OS, seperti (a) menekan tombol pada mouse(memberikan informasi lokasi)/ keyboard (mengembalikan kode ASCII). keyboard: Measure string, Trigger when press “enter” or “return”. Mouse: Measure screen position, Trigger when press button.Input Mode: Logical input device bisa dioperasikan dalam 3 mode, yaitu: Sample mode, Request mode, dan Event mode.Sample Mode: Tidak ada trigger. Pengembalian Measured data

dilakukan secara langsung. Contohnya seperti current cursor position tanpa menunggu trigger Request Mode: seperti “scanf” : Collect measure, waiting for trigger, menekan backspace(erase), edit.Event Mode: Aplikasi dapat mengaktifkan beberapa input device secara simultan. Setiap trigger menghasilkan event dimana measure akan ditempatkan pada event queue u/ kemudian diperiksa oleh program. Ada banyak input device yg digunakan secara bersamaan.Event Types: (1) Window: resize, expose, iconify. (2) Mouse: click one or more buttons. (3) Motion: move mouse. (4) Keyboard: press or release a key. (5) Idle: nonevent.GLUT Event Loop: Ketika ada looping, GLUT akan (1) memeriksa event queue. (2) Untuk setiap event pada queue, GLUT mengeksekusi fungsi callback jika fungsi tsb sudah didefinisikan sebelumnya. (3) Jika definisi fungsi callback belum didefinisikan maka event tsb diabaikan. glutMainLoop(); untuk menempatkan program pada infinite event loop.GLUT Callback Function: glutDisplayFunc, glutMouseFunc, glutReshapeFunc, glutKeyboardFunc, glutIdleFunc.GLUT Defined Mouse Constants : GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON, GLUT_UP, GLUT_DOWNReshape Callback: Dipanggil ketika ada perubahan pada window event. (1) Redraw, resize. (2)Aspect ratio. (3) Attribute of new primitive. (4) Use. glutReshapeFunc(reshape_function);Keyboard Callback: Dipanggil ketika tombol key ditekan. glutKeyboardFunc(keyboad_function);Display callback: Callback display func dieksekusi ketika GLUT memerintahkan window u/ di refresh atau ketika (1) window pertama kali dibuka. (2) Ketika window direshape. (3) Ketika user ingin merubah display. glutDisplayFunc(mydisplay)Posting redisplays: Dipakai ketika display dipanggil berkali- kali, biasanya digunakan pd program animasi. glutPostRedisplay();Ada 2 jenis Buffering: (1) Single buffering: layernya cuma ada 1. (2) Double buffering: Layernya ada 2 (front and back). Back=yang menggambar (redraw). Front=yg menampilkan gambar dilayar utama.Idle callback: Dieksekusi ketika tidak ada event di event queue. glutIdleFunc(myidle)

KUL10-Fractal&particle systemFRACTAL – Merupakan objek geometri yg terbentuk dr pengulangan pola geometri tertentu(tersusun atas bntk yg seragam). Pola diulang sampai level tertentu maupun tak hingga. Geometri Euclidian: Trapezoid; Segitiga; Persegi; Persegi panjang; Segi lima; Segi enam; Lingkaran; Silinder. Secara intuitif geometri euclidian hanya tepat u/ memodelkan objek2 artifisial cth: gedung, rumah,monitor, drum. Objek di alam umumnya memiliki bentuk ireggular, pola geometrinya tdk seragam kadang bahkan ada yg tdk beraturan Ada juga sifat infinit detail infinit length. U/ kebanyakan objek alam geometri euclidian kurang cocok. Cara membuat fractal: 1. segitiga sierpinsky Buat segitiga sama sisi; : Buat 3 segitiga yg lebih kecil dg

ukuran lebar & tinggi setengahnya. lalu susun dg mempertemukan ujung2 segitiga; Lakukan langkah yg sama u/ tiap area segitiga yg terbentuk. Kodingan: void divide_triangle(point2 a, point2 b, point2 c, int m){ /* triangle subdivision using vertex numbers */ point2 v0, v1, v2; int j; if(m>0) { for(j=0; j<2; j++)v0[j]=(a[j]+b[j])/2; for(j=0; j<2; j++) v1[j]=(a[j]+c[j])/2; for(j=0; j<2; j++) v2[j]=(b[j]+c[j])/2; divide_triangle(a, v0, v1, m-1); divide_triangle(c, v1, v2, m-1); divide_triangle(b, v2, v0, m-1);} else(triangle(a,b,c)); /* draw triangle at end of recursion */}. 2. Koch Snowflake – Buat segitiga; Bagi tiap sisi jadi 3, lalu buat segitiga lg pd bgian tengah sisi tsb ke arah luar; Lanjutkan langkah tsb u/ tiap sisi sampai level tertentu. Kodingan: GLvoid display( GLvoid ){glClear( GL_COLOR_BUFFER_BIT );/* Do all your OpenGL rendering here */ glBegin(GL_LINES);//koch snowflake mOldX = 0.0; mOldY = 0.0;drawKoch(60.0, 1.0, maxLevel );mOldX = 0.5;mOldY = sqrt(3)/2.0;drawKoch(-60.0, 1.0, maxLevel);mOldX = 1.0;mOldY = 0.0;drawKoch(-180.0, 1.0,

maxLevel);glEnd();glFlush();}GLvoid drawKoch(GLdouble dir, GLdouble len, GLint n){GLdouble dirRad = 0.0174533 * dir; /* convert to radians */ GLfloat newX = mOldX + len * cos(dirRad);GLfloat newY = mOldY + len * sin(dirRad);if (n == 0){glVertex2f(mOldX, mOldY);glVertex2f(newX, newY);mOldX = newX;mOldY = newY;}else{n--;/* reduce the order */len /= 3.0; /* reduce the length */drawKoch(dir, len, n);dir += 60.0;drawKoch(dir, len, n);dir -= 120.0;drawKoch(dir, len, n);dir += 60.0;drawKoch(dir, len, n);}}. 3. Dragon Curve: Gambar segmen garis vertikal. Tandai titik awal (misalnya, atas) & titik akhir segmen . Putar 90 derajat (berlawanan) dg titik akhir lalu gambar bersama gambar asli & gambar yg sdh diputar. Tandai titik akhir dr gambar yg sudah diputar tadi. Putar lagii gambar 90 derajat, & gabungkan gambar asli dg gambar yg sdh diputar. Proses ini dpt diulangi sebanyak yg diinginkan. U/ bantu melakukan proses, perhatikan bahwa titik akhir dr gambar asli akan disesuaikan dg titik awal dr gambar yg sdh diputar.Sistem Partikel: Jika fractal mememodelkan bentuk yg relatif teratur, bgmn menggambar obyek yg tidak teratur bentuknya? Contoh : kembang api, asap, air. Pd particle system, objek tdk teratur, tapi ada suatu sifat fisika yg mempengaruhi partikelnya. Memodelkan Objek irregular; Objek yg punya sifat fisika : sifat air, asap, api, dll; Objek yg berubah seiring waktu : partikel asap yg membumbung tinggi seiring waktu. Cth: clouds, waterfalls, smok, water, spray, fire, a tornado, fireworks. Phisically Based Modelling: Memodelkan bentuk berupa partikel-partikel yg memiliki sifat fisika. Kodingan air mancur: Inisialisasi partikel - void CreateParticle(int i) { particle[i].lifetime= (float)random(500000)/500000.0; particle[i].decay=0.001; particle[i].r = 0.7; particle[i].g = 0.7; particle[i].b = 1.0; particle[i].xpos= 0.0; particle[i].ypos= 0.0; particle[i].zpos= 0.0; particle[i].xspeed = 0.0005-(float)random(100)/100000.0; particle[i].yspeed = 0.01-(float)random(100)/100000.0; particle[i].zspeed = 0.0005-(float)random(100)/100000.0; particle[i].active = true; }. Evolusi hidup partikel - void EvolveParticle() {for(int i=0;i<=maxparticle;i++) //untuk tiap particle { //umur particle berkurang selama hidupnya sampai menghilang particle[i].lifetime-=particle[i].decay; //menentukan posisi partikel bdsk rumusan geraknya particle[i].xpos+=particle[i].xspeed; particle[i].ypos+=particle[i].yspeed; particle[i].zpos+=particle[i].zspeed; particle[i].yspeed-=0.00007; }} klasifikasi fraktal: a. Fraktal self-similar : Punya bagian2 yg merpkn objek itu sendiri namun dg ukuran yg lbh kecil gunanya u/ memodelkan pohon, semak2, dedaunan, dsb. b. Fraktal self-affine :Punya bagian2 yg dibentuk dg parameter skala ygg dibedakan pd tiap dimensi, gunanya u/ memodelkan permukaan daratan, air, awan, dsb. c. Himpunan fraktal invarian : Fraktal yg dibentuk dg transformasi nonlinear ,Mandelbrot set, Julia set – biasanya tidk terlalu berguna dlm pemodelan objek

KUL11-3DObject3D object representations: U/ merepresentasikan objek 3D, ada bbrpa teknik - Pke polygon & quadric u/ membuat objek seperti polyhedrons a/ ellipsoids; U/ membuat permukaan berkurva seperti pd sayap pesawat, gears, bodi mesin, etc, dignkn Spline surfaces; Constructive solid geometry u/ menyusun bentuk geometri dasar jadi objek komplek; U/ memodelkan pegunungan, awan, tumbuhan, atau air terjun digunakan procedural methods seperti fractals & particle system. The data for polygonal meshes can be represented in two ways - Method 1: Vertex List; Normal List; Face List (Polygon List). Method 2: Vertex List; Edge List; Face List (Polygon List).Predefined objects: OpenGL sdh menyediakan fungsi menggambar bbrp objek dasar yg tinggal dipakai. Tak perlu membuat dr awal. Objek2 dari OpenGL ini dpt disusun u/ membuat bentuk yg kita inginkan. Beberapa yg sdh disediakan OpenGL: Polyhedra (dibntk dr sekumpulan poligon yg disambung2); Polyhedron functions; Quadric Surfaces; Superquadrics.Polyhedron: rangkaian jala polygon (polygon mesh) dgn kriteria sbb -tiap edge dipakai oleh 2 faces; Sedikitnya 3 edge bertemu pd tiap vertex; Faces tdk saling menembus, tapi berhenti pd suatu edge. Menggambar polyhedron - Method1: Fitting the surface with a polygon mesh. Membungkus permukaan objek polyhedron dgn susunan jala polygon. Proses ini disebut juga dgn surface tessellation. Method 2: Memakai fungsi yg disediakan library GLUT.Normal Vectors

Assigning a normal vector to a polygon:

glBegin(GL_POLYGON); glNormal3f(xn,yn,zn);

glVertex3f(x1,y1,z1);glVertex3f(x2,y2,z2);glVertex3f(x3,y3,z3);glVertex3f(x4,y4,z4);

glEnd();

Enabling automatic conversion of normal vectors to unit vectors:

glEnable(GL_NORMALIZE);

(OpenGL)Regular Polyhedra (Platonic Solids): Jika semua face pd polyhedron adlh identik & berupa regular polygon, mk polyhedron tsb disbt platonic solid. Hanya ada 5 jenis platonic solid. Regular tetrahedron (or triangular pyramid) has 4 faces. Regular hexahedron (or cube) with 6 faces. Regular octahedron with 8 faces. Regular dodecahedron with 12 faces. Regular icosahedron with 20 faces. Polygon Mesh: Polygon mesh ini juga bs dipkai u/ memodelkan permukaan objek lain. Teapot - Pd zaman dulu blm ada library packages u/ 3D modelling. Pemodelan objek 3D dilkkan dg tangan, menggambar kurva & titik2nya dicatat scra manual.

Computer graphics researcher Martin Newell, saat mau cari brg u/ dibuat model matematika tak sengaja menemukan teapot. Teapot adlh model yg ideal u/ eksperimen 3D modelling, krn mdh dikenal, topologi yg komplek, mempunyai proyeksi bayangan pada dirinya sendiri, melibatkan topik hidden surface, punya permukaan cekung & cembung, jg saddle points (curved up and down), doesn't take much storage space.Spline Representations - Splines are used to design curves and surfaces based on a set of user-defined points. Control points: Himpunan titik

koordinat yg mengontrol bntk kurva. Interpolation: Semua control points tersambung satu sama lain pd garis kurva. Approximate: Semua /beberapa

control points terletak di luar garis kurva.Bezier curve: kurva parametrik yg sering digunakan dlm komputer grafis & bidang terkait. Generalisasi kurva Bézier ke dimensi yg lebih tinggi disebut permukaan Bézier.Bezier Curve Equation - Persamaan garis Bezier akan membentuk titik-titik garis kurva sesuai control point yg didefinisikan.

OpenGL Approximation Spline Functions - Bezier splines and B-splines can be displayed using OpenGL functions. The core library contains Bezier functions, and GLU has B-spline functions. Bezier functions are often hardware implemented.

OpenGL Bezier-Spline Curve Functions.

GLfloat ctrlPts [4][3] = { {-40.0, 40.0, 0.0}, {-10.0, 200.0, 0.0},{10.0, -200.0, 0.0}, {40.0, 40.0, 0.0} }; glMap1f (GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, *ctrlPts); glEnable (GL_MAP1_VERTEX_3); GLint k; glColor3f (0.0, 0.0, 1.0);// Set line color to blue. glBegin (GL_LINE_STRIP); // Generate Bezier "curve". for (k = 0; k <= 50; k++) glEvalCoord1f (GLfloat (k) / 50.0);glEnd ( ); glColor3f (1.0, 0.0, 0.0); // Set point color to red. glPointSize (5.0); // Set point size to 5.0. glBegin (GL_POINTS); // Plot control points. for (k = 0; k < 4; k++) glVertex3fv (&ctrlPts [k][0]); glEnd ( );OpenGL Bezier-Spline Surface Functions. GLfloat ctrlpoints[4][4][3] = {{{-1.5, -1.5, 4.0}, {-0.5, -1.5, 2.0}, {0.5, -1.5, -1.0}, {1.5, -1.5, 2.0}}, {{-1.5, -0.5, 1.0}, {-0.5, -0.5, 3.0}, {0.5, -0.5, 0.0}, {1.5, -0.5, -1.0}},{{-1.5, 0.5, 4.0}, {-0.5, 0.5, 0.0}, {0.5, 0.5, 3.0}, {1.5, 0.5, 4.0}}, {{-1.5, 1.5, -2.0}, {-0.5, 1.5, -2.0}, {0.5, 1.5, 0.0}, {1.5, 1.5, -1.0}}}; glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &ctrlpoints[0][0][0]); glEnable(GL_MAP2_VERTEX_3); for (j = 0; j <= 8; j++) { glBegin(GL_LINE_STRIP); for (i = 0; i <= 30; i++) glEvalCoord2f((GLfloat)i/30.0, (GLfloat)j/8.0); glEnd(); glBegin(GL_LINE_STRIP); for (i = 0; i <= 30; i++) glEvalCoord2f((GLfloat)j/8.0, (GLfloat)i/30.0);glEnd(); }Blobby Objects - Memodelkan objek yg dpt berubah bntk tapi volumenya tetap. Contoh: Water drops, Molecules, Force fields.Constructive Solid Geometry - Bermula dari objek geometri primitive, ditransformasikan & dikombinasikan membentuk objek yg kompleks.

KUL 12-lighting Lighting :agar images dpt ditampilkan scr tiga dimensiMemperkenalkan tipe2 interaksi antara

cahaya & material Model pemantulan sederhana (the Phong model) yg dpt dignkn pd graphic hardware real timeSeandainya kita tlh mengkonstruksi sbh model 3D (misalkan sphere) pke polygons & ngasih warna pke glColor. Maka yg akan kita dptkan 2D yg solid.Di sisi lain yg kita inginkan adlh 3D (sphere).Interaksi di antara cahaya & material mengakibatkan tiap titik pd objek punya persepsi warna yg berbeda.Yg jadi pertimbangan : light sources (sumber cahaya), material properties (properti dari material), location of viewer (lokasi dari titik lihat), & surface orientation (orientasi permukaan).Apa yg kita lihat bukan brdsrkan benda yg terlihat, tapi sinar cahaya

yg diberikan dr sumber cahaya & dipantulkan ke objek2.

xw=(xn+1) (width2 )+x yw=( y n+1) ( height

2 )+ y

Page 2: Sheet komgraf

Cahaya adlh energi berbentuk gelombang elektromagnetik yg kasat mata dg pjg gelombang 380–750 nm.Pd bidang fisika (dualisme cahaya) : Cahaya adlh radiasi elektromagnetik, baik dg pjg gelombang kasat mata/tidak.Cahaya adlh paket partikel (foton).Gelombang Kasat Mata :Mata manusia hanya dpt melihat cahaya pd rentang 400-700 nm (spektrum warna).

Mata :Struktur mata : dua sel reseptor (Rods (sel batang) dan Cones (sel kerucut)) .Cones punya 3 jenis, yg merespon panjang gelombang cahaya yang berbeda.

Scattering (Sebaran) :Cahaya menumbuk benda : sebgn disebarkan, sebgn diserap.Sebgn pantulan cahaya tsb dipantulkan ke benda lain, lalu : sebgn disebarkan, sebgn diserap.Rendering Equation :Dlm dunia nyata, cahaya diserap & dipantulkan berkali2 sampai tak hingga.Dpt digambarkan pke rendering equation, tdk dpt dimodelkan & disolusikan scr umum krn terlalu kompleks, ray tracing contoh pemodelan bagi perfectly reflecting surfaces. Rendering equation bersifat global & meliputi : pembentukan bayangan (Shadows) & multiple scattering dari object & menuju object.Ray Tracing :

Local vs Global Rendering :Linghting pd dunia nyata butuh perhitungan global yg melibatkan seluruh objek & sumber cahaya. Tdk kompatibel dg model pipeline yg melakukan teknik lighting bg tiap polygon scr independen (local rendering).Pd computer graphics, khususnya u/ real time graphics, yg perlu kita kejar adlh menjadikan objek “look right”, shg banyak teknik pendekatan bg global rendering.Light-Material Interaction :Ukuran intensitas cahaya yg dipantulkan ditentukan dr kecerahan warna objek. Sbh permukaan tampak merah - diberikan cahaya putih - komponen cahaya merah yg dipantulkan - sisanya diserap.Sebaran cahaya yg dipantulkan akan memiliki pola pantulan sesuai dg halus kasarnya permukaan bidang pantul (surface orientation).Lighting Modeling :Emission from Light Source .Common Properties : Ambient (cahaya tidak langsung, cahaya yg menyinari benda bisa jg dr pantulan benda sekitarnya, contoh : kolong meja), Diffuse (cahaya yg menyinari benda berasal satu arah, bagian yg terkena cahaya terlihat lebih terang, bagian yg tidak kena cahaya terlihat gelap), Specular (cahaya diterima oleh permukaan yg halus a/ memantul sprti logam, plastik, dll shg timbul kesan berkilau seperti kaca). Emmisive: Cahaya dipancarkan oleh suatu objek yang terang Types : Directional Light (jarak sumber = jarak yg sangat jauh (parallel), hanya dimodelkan dg arah sumber), Point Light / Point Source (dimodelkan hanya dg posisi = titik & jenis = warna, cahaya diemisikan dr titik ttsb ke segala arah dg intensitas yg sama, intensitas akan mengalami penurunan sebanding dg kuadrat jarak terhadap sumber, (-) kurang akuratnya pembentukan shading & bayangan > cth pd penumbra = bayangan kabur), & Spotlight (model sumber yg lebih kompleks dibanding lainnya, membentuk area sorot menyerupai kerucut dari ambient light).Code : void glLightfv(GLenum light, GLenum pname, const GLfloat * params); light : the light to assign GL_LIGHT0, GL_LIGHT1, …, GL_LIGHT8 pname : the light property to assign GL_AMBIENT,GL_DIFFUSE, GL_SPECULAR params : pointer to an array of values //Define GLfloat arrays to hold light data, GLfloat light_ambient[] = { 0.3, 0.3, 0.3, 1.0 }; GLfloat light_diffuse[] = { 0.8, 0.8, 0.8, 1.0 };

GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; //Apply the light properties to LIGHT0 , glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); //Light position GLfloat light_position[] = { 50.0, 100.0, -50.0, 1.0 }; //Apply the light position glLightfv(GL_LIGHT0, GL_POSITION, light_position); //Light direction down the negative x axis GLfloat light_direction[] = { -1.0, 0.0, 0.0, 0.0 }; //Apply the light direction glLightfv(GL_LIGHT0, GL_POSITION, light_ambient); //Spotlight properties GLfloat light_position[] = { 50.0, 100.0, -50.0, 1.0 }; GLfloat light_spot_direction[] = { 0.0, 0.0, -1.0}; GLfloat light_spot_cutoff[] = { 25.0 }; GLfloat light_spot_exp[] = { 2.0 }; //Apply the light position glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION,light_spot_direction); glLightfv(GL_LIGHT0, GL_SPOT_CUTOFF,light_spot_cufoff); glLightfv(GL_LIGHT0, GL_SPOT_EXPONENT,light_spot_exp); Scattering at surfaceSmkn halus permukaan, semakin terkonsentrasi pantulan cahaya pd suatu arah tertentu (misal pd cermin). Semakin kasar permukaan mk cahayapun akan disebarkan kebanyak arah. Tipe Refleksi : Ideal Reflection (normal : tegak lurus bidang datar, angle of incidence = angle of reflection, vektor harus coplanar), Diffuse Reflection (diffuse reflector menyebarkan cahaya ke segala arah, disbt Lambertian surface, 0 < kd < 1, angle cahaya dtg bersifat kritis), & Specular Reflection (shiny surfaces > polished metal a/ glossy car finish, specular highlight > cahaya yg menyinari specular surface menyebabkan titik terang, dipengaruhi posisi penglihat, view dependent, 0 <= ks <=1). Phong model :Simple model yg bs dikomputasi dg cepat. Diffuse, Specular, Ambient, EmissionPke 4 vektor :To source, To viewer, Normal, Perfect reflectorCode :void glMaterialfv(GLenum face, GLenum pname, const GLfloat * params); //Define GLfloat arrays to hold material data GLfloat mat_ambient[] = { 0.3, 0.3, 0.3, 1.0 }; GLfloat mat_diffuse[] = { 0.8, 0.8, 0.8, 1.0 }; GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; //Shininess will be an array of length 1 GLfloat mat_shininess[] = { 50.0 }; //Apply the material properties to the front facing glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

KUL 13. TEXTURETexture Mapping :Graphics scene tanpa texture > cenderung polos.Gambar/citra bisa membantu memberikan efek ilusi pada permukaan.Texture mapping : gambar/image yang ditempel ke polygons.Texture Representation : bitmap (pixel map) texture (dengan OpenGL) dan procedural textures (digunakan di advanced rendering programs)Bitmap Texture :Gambar 2D – direpresentasikan dengan 2D array texture [height][width]Setiap pixel (atau texel) memiliki koordinat (s, t)Titik s dan t dinormalisasikan ke batas [0,1]Map Textures to Surfaces : membuat mapping dari texture ke surfaces (polygons) dengan menentukan koordinat texture pada setiap pojok polygon.Texture Value Lookup :Bagaimana jika koordinat tidak tepat pada intersection (pixel) positions? Nearest Neighbor, Linear Interpolation, Other Filters.OpenGL texture mapping :Tentukan texture – read atau generate image dan tempatkan ke texture.Tentukan parameter texture mapping – wrapping, filtering, dll.Enable GL texture mapping (GL_TEXTURE_2D).

Tempatkan koordinat texture ke verteks-verteks.Gambar objek.Disable GL texture mapping (jika tidak ingin menggunakan texture mapping lagi).Tentukan Texture :glTexImage2D(Glenum target, Glint level, Glint iformat, int width, int height, int border, Glenum format, Glenum type, Glvoid* img)Contoh :glTeximage2D(GL_TEXTURE_2D, 0, GL_RGB, 64, 64, 0, GL_RGB, GL_UNSIGNED_BYTE, myImage);(myImage is a 2D array: GLuByte myImage[64][64][3]; )Harus 2D, jika tidak : Pad zeros atau gunakan gluScaleImage()Texture mapping parameters : jika koordinat texture di luar rangeJika sumbu y yang berada di luar rangeglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP )Jika sumbu x yang berada di luar rangeglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT )Karena polygon dapat ditransformasikan ke arbitrary (seenaknya) screen size, maka texels pada texture map bisa diperbesar dan diperkecil.Filtering : menyisipkan sebuah texel dari tetangganya atau mengombinasikan multiple texel menjadi satu texel.Nearest Neighbor (lower image quality)glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);Linear Interpolate the Neighbors (better quality, slower)glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)Texture color blending :Mengombinasikan texel color dan object colorGL_MODULATE – mengalikan texture dan object colorGL_BLEND – blend dengan warna lingkunganGL_REPLACE – menggunakan warna texture untuk mengganti warna objectContoh : glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);Jika texture diaplikasikan setelah lighting, bagaimana mengatur brightness? Buat polygon white dan light it normallyglTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE)Enable (Disable) Textures :Enable texture – glEnable(GL_TEXTURE_2D)Disable texture – glDisable(GL_TEXTURE_2D)Jangan lupa untuk disable texture mapping ketika menggambar non-textured polygons.Menentukan Koordinat Texture :Berikan koordinat sebelum mendefinisikan setiap verteksglBegin(GL_QUADS); glTexCoord2D(0,0); glVertex3f(-0.5, 0, 0.5);…glEnd(); Transform Texture Coordinates :Semua koordinat texture dikalikan dengan Gl_TEXTURE matrix sebelum digunakanglMatrixMode(Gl_TEXTURE);Aplikasikan fungsi transformasiLalu gambar objek berteksturPut it all together :…glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); …glEnable(GL_TEXTURE_2D); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 64, 64, 0, GL_RGB, GL_UNSIGNED_BYTE, mytexture); Draw_picture1(); // define texture coordinates and vertices in the function …Projector Functions :

Map (meetakan) texture ke atas arbitrary (seenaknya) object?Bangun sebuah mapping antara 3D point dengan intermediate surface (permukaan tengah).Idea : proyeksikan setiap point objek ke intermediate surface dengan proyeksi parallel atau perspective.Plane (planar)

Cylinder (silinder)

Sphere (bola)

Cube (kubus)Parametric Surfaces

Mipmaps :Membuat texture dalam berbagai ukuran untuk menghaluskan penampakan objek yang jauh. Ukuran dibedakan per level.Level 0 : texture map semulaLevel 1: setengah ukuran width dan heightDefine mipmaps glTexImage2D(GL_TEXTURE_2D, level, GL_RGB, …);Where level = 0, 1, 2, …Automatically generate mipmaps gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, width, height, format, type, texels);With Mipmap

without Mipmap

Mipmap Filters :Mipmap minification filtersGL_LINEAR_MIPMAP_NEAREST : gunakan mipmap yang paling dekat dan mipmap yang terdekat dengan resolusi polygon, gunakan linear filteringGL_LINEAR_MIPMAP_LINEAR : gunakan interpolasi linier antara dua mipmap yang paling dekat dengan resolusi polygon, gunakan GL_LINEAR filtering di setiap mipmapCode :gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, 64, 64, GL_RGB, GL_UNSIGNED_BYTE, texImage);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);Procedural Texture Mapping :Renderman, the Pixar rendering language does this dan tersedia dalam bentuk yang terbatas.Keuntungan : butuh sedikit kapasitas, idea works for many other thingsKerugian : lambatOther Types of Mapping :Environment mapping – simulasikan refleksi dari permukaan ang mengkilap.

Bump-mapping – memberi lighting pada texture sehingga permukaan seperti ada efek timbul, bukan geometri permukaan yang diubah tetapi hanya efek cahaya.

Displacement mapping – mengubah geometri permukaan texture sehingga kesan timbul memang karena geometri permukaan yang diubah jadi timbul.

Spherical Mapping

Cubic Mapping

OpenGL Spherical Map :// Build the environment as a texture object// Automatically generate the texture coordinatesglTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);glTexGenf(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);glEnable(GL_TEXTURE_GEN_S);glEnable(GL_TEXTURE_GEN_T);// Bind the environment texture…// Draw object…OpenGL Cubemap Texture :Enable dan disable cube map textureglEnable(GL_TEXTURE_CUBE_MAP); glDisable(GL_TEXTURE_CUBE_MAP);glGenTextures(1,&cubemap_id);glBindTexture(GL_TEXTURE_CUBE_MAP,cubemap_id); Load images ke cube map. Setiap face (sisi) berukuran 64x64 RGB image.GLubyte face[6][64][64][3];for (i=0; i<6; i++) { glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, //level GL_RGB8,          //internal format 64,                 //width 64,                 //height 0,                  //border GL_RGB,             //format GL_UNSIGNED_BYTE,   //type &face[i][0][0][0]); // pixel data }Generate koordinat texture secara otomatis di OpenGLglTexGenfv(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); glTexGenfv(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); glTexGenfv(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); glEnable(GL_TEXTURE_GEN_S);glEnable(GL_TEXTURE_GEN_T);glEnable(GL_TEXTURE_GEN_R);// Bind the environment texture…// Draw object…

KUL 14 COLORPersepsi ttg warna :Mata kita hanya berisi 3 jenis sel photosentitivedisetel ke tiga frekuensi (RGB). Sensasi warna dibuat dalam otak kita dg rata2 & jutaan kombinasi RGB.Mata: Retina mengandung kerucut yg mendaftar foton yg berbeda

Newton mengamati bahwa warna tdk melekat dlm obyek, permukaan suatu benda mencerminkan beberapa warna & menyerap warna lain.OpenGL Colors : OpenGL dpt punya slh satu dr dua mode warna, warna Indexed a/ RGBA. Ketika kita mendefinisikan window kita mendefinisikan mode warna:glutInitDisplSayMode (GLUT_RGBA ...) Setelah ditetapkan tidak dpt diubah.RGB (and sometimes A) Color model: Merah, hijau, & biru piksel ditugaskan nilai kecerahan 0 hingga 1 dimana 0 adlh tidak ada a/ gelap (0,0,0) = hitam (1,1,1) = putih.RGBA mode continued : Sebuah jumlah tertentu data warna disimpan pd tiap pixel, ditntkn oleh jumlah bitplanes di framebufferBitplane berisi 1 bit data u/ tiap pixelJika ada delapan bitplanes warna, ada warna bit 8 per pixel,& karenanya 28 = 256 nilai yg berbeda a/ warna yg dpt disimpan pd pixel.Color Depth: Jumlah bitplane yg dignkn u/ mewakili satu nilai warna RGB Color biasanya ditampilkan dlm 24 bits (3 bytes a/ 8 bits tiap warna) contoh (255, 255, 255) putih RGBA Color : A transparent color.

Alpha: Nilai alpha tdk punya pengaruh langsung pd warna yg ditampilkan pd layar,Dignkn u/ pencampuran & transparansi Color Cube :

Specifying color in OpenGL: glColor3f(1.0, 0.0, 0.0); //sets RGB color to red glBegin(GL_POINTS); glVertex3f(….) //draw some vertices glEnd(); The color drawn will be red until it is changed glColor4f (1.0,0.0,0.0,0.5) ; //to set an alpha valueColors: glColor3f(face color); render_face() ;glColor3f(eye color) ;render_eyes()Dithering: Teknik menggunakan kombinasi dr bbrapa warna u/ menciptakan efek warna laincth, u/menampilkan merah muda, perangkat keras dpt mengisi daerah dg bolak piksel merah & putih.glEnable (GL_DITHER); a/ glDisablediaktifkan secara defaultSpecifying a shading model: Baris & poligon dpt ditarik dgn satu warna (shading datar) a/ dg warna yg berbeda (shading halus)glShadeModel (GL_SMOOTH); / / defaultatau GL_FLATU/ shading halus, warna sepanjang ruas garis yg menyela antara warna vertexU/ poligon, warna sepanjang interior yg menyela antara warna vertexShading Models:glShadeModel(GL_FLAT); glBegin(GL_QUADS); glColor3f (1.0,0.0,0.0);glVertex3f(0.0,0.0,0.0);glColor3f (0.0,1.0,0.0);glVertex3f(1.0,0.0,0.0);

glShadeModel(GL_SMOOTH); glBegin(GL_QUADS);glColor3f (1.0,0.0,0.0); glVertex3f(0.0,0.0,0.0);glColor3f (0.0,1.0,0.0); glVertex3f(1.0,0.0,0.0);

NOTE:Kul8.viewing:Bagaimana memajukan kamera sejauh 5 satuan ke depan : (z positif) (tadinya 2.0 + 5.0 =7.0)gluLookAt (0.0, 0.0, 7.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);Bagaimana memiringkan kamera ke kanan sebesar x=2, y=1gluLookAt (0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 2.0, 1.0, 0.0);Bagaimana memiringkan kamera sama seperti no.2 tapi ke arah sebaliknya (ke kiri)gluLookAt (0.0, 0.0, 2.0, 0.0, 0.0, 0.0, -2.0, 1.0, 0.0); // upx=-2Pada no.1 implementasikan bukan dengan mengubah posisi kamera (eyez=0)tapi dengan memundurkan objek 5 satuan ke belakang glPushMatrix();glTranslatef(0.0,0.0,-5);//taro diatas glutSolidTeapot (0.5);

rodscones

lightbipolar ganglionhorizontal amacrine