Posted By

ozkriff on 10/13/08


Tagged


Versions (?)

glut example


 / Published in: C++
 

  1. #include <GL/glut.h>
  2.  
  3. GLfloat spin=0.0;
  4.  
  5. void init(void)
  6. {
  7. glClearColor(0.0,0.0,0.0,0.0);
  8. glShadeModel(GL_FLAT);
  9. }
  10.  
  11. void display(void)
  12. {
  13. glClear(GL_COLOR_BUFFER_BIT);
  14. glPushMatrix();
  15. glRotatef(spin,0.0,0.0,1.0);
  16. glColor3f(1.0,1.0,1.0);
  17. glRectf(-25.0,-25.0,25.0,25.0);
  18. glPopMatrix();
  19. glutSwapBuffers();
  20. }
  21.  
  22. void spinDisplay(void)
  23. {
  24. spin=spin+1.0;
  25.  
  26. if(spin>360.0) spin=spin-360.0;
  27.  
  28. glutPostRedisplay();
  29. }
  30.  
  31. void reshape(int w, int h)
  32. {
  33. glViewport(0,0,(GLsizei) w, (GLsizei) h);
  34. glMatrixMode(GL_PROJECTION);
  35. glLoadIdentity();
  36. glOrtho(-50.0,50.0,-50.0,50.0,-1.0,1.0);
  37. glMatrixMode(GL_MODELVIEW);
  38. glLoadIdentity();
  39. }
  40.  
  41. //При нажатии левой кнопки зарегистрировать
  42. //функцию фоновой обработки (поворота)
  43. //При нажатии правой – отменить регистрацию
  44. void mouse(int button,int state,int x,int y)
  45. {
  46. switch(button)
  47. {
  48. case GLUT_LEFT_BUTTON:
  49. if (state==GLUT_DOWN) glutIdleFunc(spinDisplay); break;
  50.  
  51. case GLUT_RIGHT_BUTTON: if (state==GLUT_DOWN) glutIdleFunc(NULL); break;
  52. }
  53. }
  54.  
  55. //Запросить режим двойной буферизации
  56. //Зарегистрировать функции обработки мышиного ввода
  57. int main(int argc, char **argv)
  58. {
  59. glutInit(&argc,argv);
  60. glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
  61. glutInitWindowSize(250,250);
  62. glutInitWindowPosition(100,100);
  63. glutCreateWindow("Двойная буферизация");
  64. init();
  65. glutDisplayFunc(display);
  66. glutReshapeFunc(reshape);
  67. glutMouseFunc(mouse);
  68. glutMainLoop();
  69.  
  70. return 0;
  71. }

Report this snippet  

You need to login to post a comment.