1 / 27

Praktikum 2

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

lani
Télécharger la présentation

Praktikum 2

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

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

  3. OpenGL Geometric primitives • Setiapobyekdimodelkansebagaikombinasidarikomponen-komponendasar (Geometric primitives) • Sebagaicontoh, obyeksegitigapada tutorial 1 dimodelkandenganmenggunakankomponendasarGL_POLYGON. Obyektersebutdapat pula dimodelkandengankomponendasarGL_TRIANGLES. ObyeksegiempatselaindapatdimodelkandenganGL_POLYGON jugabisadenganGL_QUADS. • Dalam OpenGL, menggambar geometric primitives selalu dilakukan di antara fungsi glBegin(PRIMITIVES) // FungsiMenggambar Primitives disini glEnd()

  4. Polygon SegiDelapan 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 Segitigapertemuan 1, ubahpadafungsi display. • Pada program berikutmenggunakanvertekpadaruang 3D (x,y,z) yaknifungsi glVertex3f

  5. Reshape Function • Buatlahobjekbujursangkarbirupadaruang 2D dengankoordinattitikkiribawah (-0.5, -0.5) • Jikakita drag ujung windows sehingga window tidaklagiberupabujursangkar, bujursangkar-nyajugaberubahbentuk. Gambarberikutmengilustrasikansituasinya.

  6. Reshape Function • Agar gambartetapberadapadaproporsi yang tepat, makaperludigunakan callback reshape yang dipanggilsetiap kali window berubahukuran. Untukituperlulakukandualangkahberikut: • membuatfungsi yang akandipanggilsaatreshape, disinifungsinyaadalahvoid resize(intwidth, int height) • melakukanregistrasi callback reshape denganfungsiglutReshapeFunc(.)

  7. Menambahkan Reshape Func • Dari program bujursangkartadi, tambahkanfungsi 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)bertanggungjawabuntukmelakukan setting viewport darisuatu window, yaitubagiandari window yang digunakanuntukmenggambar. • Daftarkanfungsi resize tersebutdifungsi main denganglutReshapeFuncsebelumglutMainLoop glutDisplayFunc(display); glutReshapeFunc(resize); glutMainLoop();

  8. viewing volume camera model tripod Transformasi • Perhatikancarakerjakamera. Memotretberartimengubahobyek 3D menjadiobyek 2D berupafoto

  9. Transformasi • GrafikaKomputeradalahprosestransformasidari model 3D obyekmenjadicitra 2D, inisamadengananalogikamera. • Sebelummemotret, apa yang dilakukan? • melakukanpengesetankameradalambentuk setting lensakamera (zoom in/out) • mengarahkankamerakeobyek (ex: mengaturletak tripod) • mengaturletakobyek (ex: mengubah-ubahletakobjek) • mengaturskaladan layout darifoto (ex : fotodenganorangdisisipinggir)

  10. Transformasi • Analogidiatasmerupakanpenjelasandarijenis-jenistransformasisbb: • melakukanpengesetankameradalambentuk setting lensakamera (TransformasiProyeksi), • mengarahkamerakeobyek (Transformasi Viewing), • mengaturletakobyek (Transformasi Modeling), • mengaturskaladan layout darifoto (Transformasi Viewport) -> denganglViewPortpadacontohsebelumnya

  11. TransformasiProyeksi • Lensakameradanmatamanusiamemilikidaerahpenglihatan (viewing volume) yang berbentukkerucut, • Namunkarenabentuk display yang biasanyaberbentuksegiempatmembuat OpenGL (danhampirsemua API grafikakomputer lain) lebihefisienmemodelkandaerahpenglihatansebagai volume berbentukpiramida.

  12. TransformasiProyeksi • Tipetransformasiproyeksiadaduamacam, bergantungpada parameter danbentukpiramidanya. DuatipetransformasitersebutadalahTransformasiOrtogonal/Paralel(Orthogonal Transformation) danTransformasiPerspektif(Perspective Transformation) • TransformasiOrtogonal : membuatjarakbendarelatifterhadapkameratidakberpengaruhpadacitrabendatersebut. Biasanyatransformasiinidigunakanpadaaplikasi-aplikasitekniksepertigambarteknik • TransformasiPerspektif : Padatransformasijenisinijarakbendaakanmempengaruhigambar yang dibuat. • Transformasiproyeksi yang banyakdigunakanadalahTransformasiPerspektif

  13. TransformasiProyeksiterdiridari a. Transformasi Orthogonal/Paralel (gambaratas) b. TransformasiPerspektif (mengerucutkesatutitikproyeksi, gambarbawah)

  14. TransformasiProyeksi • Untukmerubah parameter transformasiortogonaldapatmenggunakanperintahglOrtho()dengandidahuluiprosesmerubah status OpenGL ke mode proyeksidenganperintahglMatrixMode(GL_PROJECTION). • Parameter transformasiperspektifdapatdirubahdenganmenggunakangluPerspective()/glFrustum() , jugadengandidahuluiprosesmerubah status OpenGL ke mode proyeksidenganperintahglMatrixMode(GL_PROJECTION).

  15. Program TransformasiProyeksi • Tambahkanpada program segi 8 • Keyboard Func • Timer Func • Reshape Funcuntuk resize • Daftarkanketigafunctsbdi main • Ubahjadi double buffered

  16. gluPerspective() glMatrixMode(GL_PROJECTION); glLoadIdentity( ); gluPerspective(fovy, aspect, near, far) • fovyadalahsudutantarabidang bottom dan up.

  17. Setting ke mode transformasiproyeksi void init() { glClearColor( 1.0, 0.0, 0.0, 1.0 ); // A Background Clear Color //masukke mode transformasiproyeksi glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, (GLdouble)500.0/(GLdouble)500.0, 0, 100); //kembalike mode transformasimodelling/viewing glMatrixMode(GL_MODELVIEW); }

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

  19. 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; }

  20. 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 ); }

  21. 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(); }

  22. Directive & Global Variable #include <GL/glut.h> float z_pos=0.0f; float rot=0.0f;

  23. Main Func int main( intargc, 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( "TransformasiProyeksi"); // 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) }

  24. TransformasiViewing • Untukmenghasilkangambar, kameraperludiletakkanpadaposisi yang tepatdidepanpemandangan yang diinginkan. • Secaradefault, dalam OpenGL kemeraakanberadapadaposisi (0,0,0) denganmenghadapkearahz = -1 dengansumbuymengarahkeataskamera. • Hal inidapatdilakukandenganmenggunakanperintahgluLookAt() dengandidahuluiprosesmerubah status OpenGL kemodelviewdenganperintahglMatrixMode(GL_MODELVIEW).

  25. TransformasiModeling • Selainposisidanorientasikamera yang dapatdirubah-rubah, secara natural obyekjugadapatberpindahposisidanorientasirelatifterhadap yang lain. • Transformasiobyekdapatdirepresentasikandenganduacara, yaitu: • menggunakanmatrikstransformasi (glLoadMatrix) • menggunakanoperasitransformasi (glRotate, glTranslate) • dengandidahuluiprosesmerubah status OpenGL kemodelviewdenganperintahglMatrixMode(GL_MODELVIEW).

  26. Konsep Double Buffer • Konsep Double Buffer. Pada program diatas mode display menggunakantipeGLUT_DOUBLE yang diikutiolehglutSwapBuffers(). • Hal inimerupakanteknik yang disebutDouble Bufferuntukmenghindariflicker. Untukmengetahuiapaitu flicker, ubah mode display menjadiGLUT_SINGLEdanhapus/commented perintahglutSwapBuffer().

More Related