Advertisement
Guest User

Untitled

a guest
Jan 14th, 2012
417
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.70 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement