Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Praktikum 2. OpenGL Geometric primitives GL_QUAD_STRIP GL_POLYGON GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_POINTS GL_LINES GL_LINE_LOOP GL_LINE_STRIP GL_TRIANGLES.

Presentasi serupa


Presentasi berjudul: "Praktikum 2. OpenGL Geometric primitives GL_QUAD_STRIP GL_POLYGON GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_POINTS GL_LINES GL_LINE_LOOP GL_LINE_STRIP GL_TRIANGLES."— Transcript presentasi:

1 Praktikum 2

2 OpenGL Geometric primitives GL_QUAD_STRIP GL_POLYGON GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_POINTS GL_LINES GL_LINE_LOOP GL_LINE_STRIP GL_TRIANGLES GL_QUADS

3 Setiap obyek dimodelkan sebagai kombinasi dari komponen-komponen dasar (Geometric primitives) Sebagai contoh, obyek segitiga pada tutorial 1 dimodelkan dengan menggunakan komponen dasar GL_POLYGON. Obyek tersebut dapat pula dimodelkan dengan komponen dasar GL_TRIANGLES. Obyek segiempat selain dapat dimodelkan dengan GL_POLYGON juga bisa dengan GL_QUADS. Dalam OpenGL, menggambar geometric primitives selalu dilakukan di antara fungsi glBegin(PRIMITIVES) // Fungsi Menggambar Primitives di sini glEnd()

4 Polygon Segi Delapan void display() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); glColor3f(0, 1, 0); glVertex3f(-0.5, -0.5, 1); glColor3f(0, 0, 1); glVertex3f(-0.75, 0, 1); glColor3f(1, 0, 0); glVertex3f(-0.5, 0.5, 1); glColor3f(0, 1, 0); glVertex3f(0, 0.75, 1); glColor3f(0, 0, 1); glVertex3f(0.5, 0.5, -1); glColor3f(1, 0, 0); glVertex3f(0.75, 0, -1); glColor3f(0, 1, 0); glVertex3f(0.5, -0.5, -1); glColor3f(0, 0, 1); glVertex3f(0,-0.75, -1); glEnd(); glFlush(); } Dari Program Segitiga pertemuan 1, ubah pada fungsi display. Pada program berikut menggunakan vertek pada ruang 3D (x,y,z) yakni fungsi glVertex3f

5 Reshape Function Buatlah objek bujursangkar biru pada ruang 2D dengan koordinat titik kiri bawah (-0.5, -0.5) Jika kita drag ujung windows sehingga window tidak lagi berupa bujursangkar, bujursangkar-nya juga berubah bentuk. Gambar berikut mengilustrasikan situasinya.

6 Reshape Function Agar gambar tetap berada pada proporsi yang tepat, maka perlu digunakan callback reshape yang dipanggil setiap kali window berubah ukuran. Untuk itu perlu lakukan dua langkah berikut: – membuat fungsi yang akan dipanggil saat reshape, di sini fungsinya adalah void resize(int width, int height) – melakukan registrasi callback reshape dengan fungsi glutReshapeFunc(.)

7 Menambahkan Reshape Func Dari program bujur sangkar tadi, tambahkan fungsi resize() void resize( int w, int h ) { if (w >= h) glViewport(0, 0, (GLsizei)h, (GLsizei)h) ; else glViewport(0, 0, (GLsizei)w, (GLsizei)w) ; } glViewport(x_left, x_top, x_right, y_right) bertanggung jawab untuk melakukan setting viewport dari suatu window, yaitu bagian dari window yang digunakan untuk menggambar. Daftarkan fungsi resize tersebut di fungsi main dengan glutReshapeFunc sebelum glutMainLoop glutDisplayFunc(display); glutReshapeFunc(resize); glutMainLoop();

8 Transformasi Perhatikan cara kerja kamera. Memotret berarti mengubah obyek 3D menjadi obyek 2D berupa foto camera tripod model viewing volume

9 Transformasi Grafika Komputer adalah proses transformasi dari model 3D obyek menjadi citra 2D, ini sama dengan analogi kamera. Sebelum memotret, apa yang dilakukan? – melakukan pengesetan kamera dalam bentuk setting lensa kamera (zoom in/out) – mengarahkan kamera ke obyek (ex: mengatur letak tripod) – mengatur letak obyek (ex: mengubah-ubah letak objek) – mengatur skala dan layout dari foto (ex : foto dengan orang di sisi pinggir)

10 Transformasi Analogi di atas merupakan penjelasan dari jenis-jenis transformasi sbb: – melakukan pengesetan kamera dalam bentuk setting lensa kamera (Transformasi Proyeksi), – mengarah kamera ke obyek (Transformasi Viewing), – mengatur letak obyek (Transformasi Modeling), – mengatur skala dan layout dari foto (Transformasi Viewport) -> dengan glViewPort pada contoh sebelumnya

11

12 Transformasi Proyeksi Lensa kamera dan mata manusia memiliki daerah penglihatan (viewing volume) yang berbentuk kerucut, Namun karena bentuk display yang biasanya berbentuk segiempat membuat OpenGL (dan hampir semua API grafika komputer lain) lebih efisien memodelkan daerah penglihatan sebagai volume berbentuk piramida.

13 Transformasi Proyeksi Tipe transformasi proyeksi ada dua macam, bergantung pada parameter dan bentuk piramidanya. Dua tipe transformasi tersebut adalah Transformasi Ortogonal/Paralel (Orthogonal Transformation) dan Transformasi Perspektif(Perspective Transformation) Transformasi Ortogonal : membuat jarak benda relatif terhadap kamera tidak berpengaruh pada citra benda tersebut. Biasanya transformasi ini digunakan pada aplikasi- aplikasi teknik seperti gambar teknik Transformasi Perspektif : Pada transformasi jenis ini jarak benda akan mempengaruhi gambar yang di buat. Transformasi proyeksi yang banyak digunakan adalah Transformasi Perspektif

14 Transformasi Proyeksi terdiri dari a. Transformasi Orthogonal/Paralel (gambar atas) b. Transformasi Perspektif (mengerucut ke satu titikproyeksi, gambar bawah)

15 Transformasi Proyeksi Untuk merubah parameter transformasi ortogonal dapat menggunakan perintah glOrtho() dengan didahului proses merubah status OpenGL ke mode proyeksi dengan perintah glMatrixMode(GL_PROJECTION). Parameter transformasi perspektif dapat dirubah dengan menggunakan gluPerspective()/glFrustum(), juga dengan didahului proses merubah status OpenGL ke mode proyeksi dengan perintah glMatrixMode(GL_PROJECTION).

16 Program Transformasi Proyeksi Tambahkan pada program segi 8 – Keyboard Func – Timer Func – Reshape Func untuk resize – Daftarkan ketiga func tsb di main – Ubah jadi double buffered

17 gluPerspective() glMatrixMode(GL_PROJECTION); glLoadIdentity( ); gluPerspective(fovy, aspect, near, far) fovy adalah sudut antara bidang bottom dan up.

18 Setting ke mode transformasi proyeksi void init() { glClearColor( 1.0, 0.0, 0.0, 1.0 ); // A Background Clear Color //masuk ke mode transformasi proyeksi glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, (GLdouble)500.0/(GLdouble)500.0, 0, 100); //kembali ke mode transformasi modelling/viewing glMatrixMode(GL_MODELVIEW); }

19 Timer Func void myTimeOut(int id) { // called if timer event //...advance the state of animation incrementally... rot+=10; glutPostRedisplay(); // request redisplay glutTimerFunc(100, myTimeOut, 0); // request next timer event }

20 Keyboard Func void myKeyboard(unsigned char key,int x, int y) { if((key=='<')||(key==',')) z_pos-=0.1f; if((key=='>')||(key=='.')) z_pos+=0.1f; }

21 Reshape Func void resize( int w, int h ) { glViewport( 0, 0, (GLsizei) w, (GLsizei) h ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective(45, (GLdouble)w/(GLdouble)h, 0, 100); glMatrixMode( GL_MODELVIEW ); }

22 Display Func void display() { glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); glTranslatef(0.0,0.0f,z_pos); glRotatef(rot, 0, 0, 1); glBegin(GL_POLYGON); glColor3f(0, 1, 0); glVertex3f(-0.5, -0.5, -5); glColor3f(0, 0, 1); glVertex3f(-0.75, 0, -5); glColor3f(1, 0, 0); glVertex3f(-0.5, 0.5, -5); glColor3f(0, 1, 0); glVertex3f(0, 0.75, -5); glColor3f(0, 0, 1); glVertex3f(0.5, 0.5, -5); glColor3f(1, 0, 0); glVertex3f(0.75, 0, -5); glColor3f(0, 1, 0); glVertex3f(0.5, -0.5, -5); glColor3f(0, 0, 1); glVertex3f(0,-0.75, -5); glEnd(); glFlush(); glutSwapBuffers(); }

23 Directive & Global Variable #include float z_pos=0.0f; float rot=0.0f;

24 Main Func int main( int argc, char **argv) { glutInit( &argc, argv); // Initialize GLUT function callings glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); // Set window size (width, height) in number of pixels glutInitWindowSize( 400, 400); // Set window position, from the left and top of the screen, glutInitWindowPosition( 500, 500); // in numbers of pixels // Specify a window creation event glutCreateWindow( "Transformasi Proyeksi"); // Specify the drawing function that is called when the window glutDisplayFunc( display); // is created or re-drew glutKeyboardFunc(myKeyboard); glutTimerFunc(100, myTimeOut, 0); glutReshapeFunc(resize); init(); // Invoke this function for initialization glutMainLoop(); // Enter the event processing loop return 0; // Indicate normal termination (Required by ANSI C) }

25 Transformasi Viewing Untuk menghasilkan gambar, kamera perlu diletakkan pada posisi yang tepat didepan pemandangan yang diinginkan. Secara default, dalam OpenGL kemera akan berada pada posisi (0,0,0) dengan menghadap ke arah z = -1 dengan sumbu y mengarah ke atas kamera. Hal ini dapat dilakukan dengan menggunakan perintah gluLookAt() dengan didahului proses merubah status OpenGL ke modelview dengan perintah glMatrixMode(GL_MODELVIEW).

26 Transformasi Modeling Selain posisi dan orientasi kamera yang dapat dirubah- rubah, secara natural obyek juga dapat berpindah posisi dan orientasi relatif terhadap yang lain. Transformasi obyek dapat direpresentasikan dengan dua cara, yaitu: – menggunakan matriks transformasi (glLoadMatrix) – menggunakan operasi transformasi (glRotate, glTranslate) dengan didahului proses merubah status OpenGL ke modelview dengan perintah glMatrixMode(GL_MODELVIEW).

27 Konsep Double Buffer Konsep Double Buffer. Pada program di atas mode display menggunakan tipe GLUT_DOUBLE yang diikuti oleh glutSwapBuffers(). Hal ini merupakan teknik yang disebut Double Buffer untuk menghindari flicker. Untuk mengetahui apa itu flicker, ubah mode display menjadi GLUT_SINGLE dan hapus/commented perintah glutSwapBuffer().


Download ppt "Praktikum 2. OpenGL Geometric primitives GL_QUAD_STRIP GL_POLYGON GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_POINTS GL_LINES GL_LINE_LOOP GL_LINE_STRIP GL_TRIANGLES."

Presentasi serupa


Iklan oleh Google