Clone of mesa.
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

renormal.c 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. /*
  2. * Test GL_EXT_rescale_normal extension
  3. * Brian Paul January 1998 This program is in the public domain.
  4. */
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <math.h>
  8. #include <GL/glut.h>
  9. static GLfloat Phi = 0.0;
  10. static void Idle( void )
  11. {
  12. static double t0 = -1.;
  13. double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
  14. if (t0 < 0.0)
  15. t0 = t;
  16. dt = t - t0;
  17. t0 = t;
  18. Phi += 3.0 * dt;
  19. glutPostRedisplay();
  20. }
  21. static void Display( void )
  22. {
  23. GLfloat scale = 0.6 + 0.5 * sin(Phi);
  24. glClear( GL_COLOR_BUFFER_BIT );
  25. glPushMatrix();
  26. glScalef(scale, scale, scale);
  27. glutSolidSphere(2.0, 20, 20);
  28. glPopMatrix();
  29. glutSwapBuffers();
  30. }
  31. static void Reshape( int width, int height )
  32. {
  33. glViewport( 0, 0, width, height );
  34. glMatrixMode( GL_PROJECTION );
  35. glLoadIdentity();
  36. glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 );
  37. glMatrixMode( GL_MODELVIEW );
  38. glLoadIdentity();
  39. glTranslatef( 0.0, 0.0, -15.0 );
  40. }
  41. static void Init( void )
  42. {
  43. static GLfloat mat[4] = { 0.8, 0.8, 0.0, 1.0 };
  44. static GLfloat pos[4] = { -1.0, 1.0, 1.0, 0.0 };
  45. /* setup lighting, etc */
  46. glEnable(GL_LIGHTING);
  47. glEnable(GL_LIGHT0);
  48. glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat);
  49. glLightfv(GL_LIGHT0, GL_POSITION, pos);
  50. glEnable(GL_CULL_FACE);
  51. glDisable(GL_RESCALE_NORMAL_EXT);
  52. glDisable(GL_NORMALIZE);
  53. }
  54. #define UNSCALED 1
  55. #define NORMALIZE 2
  56. #define RESCALE 3
  57. #define QUIT 4
  58. static void ModeMenu(int entry)
  59. {
  60. if (entry==UNSCALED) {
  61. glDisable(GL_RESCALE_NORMAL_EXT);
  62. glDisable(GL_NORMALIZE);
  63. }
  64. else if (entry==NORMALIZE) {
  65. glEnable(GL_NORMALIZE);
  66. glDisable(GL_RESCALE_NORMAL_EXT);
  67. }
  68. else if (entry==RESCALE) {
  69. glDisable(GL_NORMALIZE);
  70. glEnable(GL_RESCALE_NORMAL_EXT);
  71. }
  72. else if (entry==QUIT) {
  73. exit(0);
  74. }
  75. glutPostRedisplay();
  76. }
  77. static void
  78. key(unsigned char k, int x, int y)
  79. {
  80. (void) x;
  81. (void) y;
  82. switch (k) {
  83. case 27: /* Escape */
  84. exit(0);
  85. break;
  86. default:
  87. return;
  88. }
  89. glutPostRedisplay();
  90. }
  91. int main( int argc, char *argv[] )
  92. {
  93. glutInit( &argc, argv );
  94. glutInitWindowPosition(0, 0);
  95. glutInitWindowSize( 400, 400 );
  96. glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
  97. glutCreateWindow(argv[0]);
  98. Init();
  99. glutIdleFunc( Idle );
  100. glutReshapeFunc( Reshape );
  101. glutDisplayFunc( Display );
  102. glutKeyboardFunc(key);
  103. glutCreateMenu(ModeMenu);
  104. glutAddMenuEntry("Unscaled", UNSCALED);
  105. glutAddMenuEntry("Normalize", NORMALIZE);
  106. glutAddMenuEntry("Rescale EXT", RESCALE);
  107. glutAddMenuEntry("Quit", QUIT);
  108. glutAttachMenu(GLUT_RIGHT_BUTTON);
  109. glutMainLoop();
  110. return 0;
  111. }