Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Jan 14th, 2012  |  syntax: None  |  size: 2.70 KB  |  views: 114  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <glut.h>
  5.  
  6. GLboolean doubleBuffer;
  7.  
  8. void draw_background()
  9. {
  10.         //big blue square
  11.         glColor3ub(0,255,255);
  12.         glBegin(GL_POLYGON);
  13.         glVertex3i(5, 5, 0);
  14.         glVertex3i(-5, 5, 0);
  15.         glVertex3i(-5, -5, 0);
  16.         glVertex3i(5, -5, 0);
  17.         glEnd();
  18. }
  19. void draw_trangle()
  20. {
  21.         /* transparent triangle */
  22.         glColor4ub(255, 0, 0, 0);
  23.         glBegin(GL_POLYGON);
  24.         glVertex3i(-4, -4, 0);
  25.         glVertex3i(4, -4, 0);
  26.         glVertex3i(0, 4, 0);
  27.         glEnd();
  28. }
  29. void draw_blue_square()
  30. {
  31.         /* blue square */
  32.         glColor3ub(0, 0, 200);
  33.         glBegin(GL_POLYGON);
  34.         glVertex3i(3, 3, 0);
  35.         glVertex3i(-3, 3, 0);
  36.         glVertex3i(-3, -3, 0);
  37.         glVertex3i(3, -3, 0);
  38.         glEnd();
  39. }
  40.  
  41. /* ARGSUSED1 */
  42. static void
  43. Key(unsigned char key, int x, int y)
  44. {
  45.         switch (key) {
  46.                 case 27:
  47.                         exit(0);
  48.         }
  49. }
  50.  
  51. static void
  52. Draw(void)
  53. {
  54.         glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
  55.        
  56.         //big blue square
  57.         glColor3ub(0,255,255);
  58.         glBegin(GL_POLYGON);
  59.         glVertex3i(5, 5, 0);
  60.         glVertex3i(-5, 5, 0);
  61.         glVertex3i(-5, -5, 0);
  62.         glVertex3i(5, -5, 0);
  63.         glEnd();
  64.        
  65.         glStencilFunc(GL_ALWAYS, 1, 1);
  66.         glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
  67.        
  68.         glPushMatrix();
  69.         /* transparent triangle */
  70.         glScalef(0.5f, 0.5f, 0.0f);
  71.         glColor4ub(0.0f, 0.0f, 0.0f, 0.0f);
  72.         glBegin(GL_POLYGON);
  73.         glVertex3i(-4, -4, 0);
  74.         glVertex3i(4, -4, 0);
  75.         glVertex3i(0, 4, 0);
  76.         glEnd();
  77.         glPopMatrix();
  78.        
  79. //      glStencilFunc(GL_EQUAL, 1, 1);
  80. //      glStencilOp(GL_INCR, GL_KEEP, GL_DECR);
  81.        
  82.         glStencilFunc(GL_EQUAL, 2, 1);
  83.         glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
  84.        
  85.         /* blue square */
  86.         glColor3ub(0, 0, 200);
  87.         glBegin(GL_POLYGON);
  88.         glVertex3i(3, 3, 0);
  89.         glVertex3i(-3, 3, 0);
  90.         glVertex3i(-3, -3, 0);
  91.         glVertex3i(3, -3, 0);
  92.         glEnd();
  93.        
  94.         if (doubleBuffer) {
  95.                 glutSwapBuffers();
  96.         } else {
  97.                 glFlush();
  98.         }
  99. }
  100.  
  101. static void
  102. Args(int argc, char **argv)
  103. {
  104.         GLint i;
  105.        
  106.         doubleBuffer = GL_TRUE;
  107.         for (i = 1; i < argc; i++) {
  108.                 if (strcmp(argv[i], "-sb") == 0) {
  109.                         doubleBuffer = GL_FALSE;
  110.                 } else if (strcmp(argv[i], "-db") == 0) {
  111.                         doubleBuffer = GL_TRUE;
  112.                 }
  113.         }
  114. }
  115.  
  116. int
  117. main(int argc, char **argv)
  118. {
  119.         GLenum type;
  120.        
  121.         glutInit(&argc, argv);
  122.         Args(argc, argv);
  123.        
  124.         type = GLUT_RGB | GLUT_STENCIL;
  125.        
  126.         type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;
  127.         glutInitDisplayMode(type);
  128.         glutCreateWindow("Stencil Test");
  129.        
  130.         glClearColor(0.0, 0.0, 0.0, 0.0);
  131.         glClearStencil(0);
  132.         glStencilMask(1);
  133.         glEnable(GL_STENCIL_TEST);
  134.        
  135.         glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  136.         glEnable(GL_BLEND);
  137.        
  138.         glMatrixMode(GL_PROJECTION);
  139.         glLoadIdentity();
  140.         glOrtho(-4, 4, -4, 4, -0.1, 0.1);
  141.         glMatrixMode(GL_MODELVIEW);
  142.        
  143.         glutKeyboardFunc(Key);
  144.         glutDisplayFunc(Draw);
  145.         glutMainLoop();
  146.         return 0;    
  147. }
clone this paste RAW Paste Data