السلام عليكم : من أهم تطبيقات الviewport .. إنشاء العاب تتميز بوجود دعم لاكثر من لاعب عن طيق انقسام الشاشة . , ايضا من التطبيقات .. ما هو موجود ف يالثري دي ماكس وماشابهه من برامج . المقصود بالViewport في OpenGL .. هو عبارة عن منقطة رباعية الشكل .. تحدد أبعادها بنفسك .. عندها ستقوم OpenGL بعمل Clipping (قص)لاي شكل مرسوم خارج هذه المنطقة المحددة . اعتدنا دائما على أن نكتب :
glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective(45,(float)(w/h),.1,-100); glMatrixMode(GL_MODELVIEW); glLoadIdentity();
glClear (GL_COLOR_BUFFER_BIT); /* مهم */ // x ,y, width, height glViewport(0 ,0, 200, 400);// viewport رقم واحد /* مهم */ glGetIntegerv(GL_VIEWPORT,vp); cout<<" viewport 1 "<<endl; cout<<" x " <<vp[0]<< " y " << vp[1] << " width "<<vp[2] <<" height "<<vp[3] <<endl; glMatrixMode (GL_PROJECTION); glLoadIdentity (); // left , right, bottom, top gluOrtho2D( 0 , 200 , 0 , 400); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0,0,0); glBegin(GL_LINES); glVertex2f(0,0); glVertex2f(200,400); glEnd(); /* مهم */ // x ,y, width, height glViewport(200 ,0, 200, 400);// viewport رقم اثنين /* مهم */ glGetIntegerv(GL_VIEWPORT,vp); cout<<" viewport 2 "<<endl; cout<<" x " <<vp[0]<< " y " << vp[1] << " width "<<vp[2] <<" height "<<vp[3] <<endl; glMatrixMode (GL_PROJECTION); glLoadIdentity (); // left , right, bottom, top gluOrtho2D( 0 , 200 , 0 , 400); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0,0,0); glBegin(GL_LINES); glVertex2f(0,0); glVertex2f(200,400); glEnd(); glutSwapBuffers();