STENCIL.C
上传用户:veshion
上传日期:2022-06-28
资源大小:4841k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <GL/glut.h> static void Init(void) {     glClearColor(0.0, 0.0, 0.0, 0.0);     glClearStencil(0);     glStencilMask(1);     glEnable(GL_STENCIL_TEST); } static void Reshape(int width, int height) {     glViewport(0, 0, width, height);     glMatrixMode(GL_PROJECTION);     glLoadIdentity();     glOrtho(-5.0, 5.0, -5.0, 5.0, -5.0, 5.0);     glMatrixMode(GL_MODELVIEW); } static void Key(unsigned char key, int x, int y) {     switch (key) 
  2. {
  3. case 27:
  4. exit(0);     } } static void Draw(void) {     glClear(GL_COLOR_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);     glStencilFunc(GL_ALWAYS, 1, 1);     glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);     glColor3ub(200, 0, 0);     glBegin(GL_POLYGON);         glVertex3i(-4, -4, 0); glVertex3i( 4, -4, 0); glVertex3i( 0,  4, 0);     glEnd();     glStencilFunc(GL_EQUAL, 1, 1);     glStencilOp(GL_INCR, GL_KEEP, GL_DECR);     glColor3ub(0, 200, 0);     glBegin(GL_POLYGON); glVertex3i(3, 3, 0); glVertex3i(-3, 3, 0); glVertex3i(-3, -3, 0); glVertex3i(3, -3, 0);     glEnd();     glStencilFunc(GL_EQUAL, 1, 1);     glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);     glColor3ub(0, 0, 200);     glBegin(GL_POLYGON); glVertex3i(3, 3, 0); glVertex3i(-3, 3, 0); glVertex3i(-3, -3, 0); glVertex3i(3, -3, 0);     glEnd();   glutSwapBuffers(); } int main(int argc, char **argv) {     glutInit(&argc, argv);      glutInitDisplayMode(GLUT_RGB | GLUT_STENCIL | GLUT_DOUBLE);     glutInitWindowSize(300, 300);     glutCreateWindow("Stencil Test");     Init();     glutReshapeFunc(Reshape);     glutKeyboardFunc(Key);     glutDisplayFunc(Draw);     glutMainLoop(); }