glClipPlane裁剪平面
 (2012-02-21 12:49:18)
 (2012-02-21 12:49:18)  转载▼
转载▼| 标签: 半平面裁剪线框球体表示杂谈 | 分类: OPENGL | 
-  void glClipPlane(GLenum plane, const GLdouble *equation); 
  
  
  
  
裁剪平面的代码例子
示例3-5是经过两个裁剪平面裁剪的线框球体,裁去了3/4体积,如图3-23所示。
|   | 
| 图3-23 裁剪后的线框球体 | 
 示例程序3-5 经过两个裁剪平面裁剪的线框球体:clip.c
 
-  void init(void) 
-  {  
-  glClearColor(0.0,0.0,0.0,0.0);  
-  glShadeModel(GL_FLAT);  
-  }  
-  void display(void) 
-  {  
-  GLdouble eqn [4]={0.0,1.0,0.0,0.0}; 
-  GLdouble eqn2 [4] ={1.0,0.0,0.0,0.0}; 
-  glClear(GL_COLOR_BUFFER_BIT);  
-  glColor3f(1.0,1.0,1.0);  
-  glPushMatrix();  
-  glTranslatef(0.0,0.0,-5.0);  
-   
-  glClipPlane(GL_CLIP_PLANE0,eqn);  
-  glEnable(GL_CLIP_PLANE0);  
-   
-  glClipPlane(GL_CLIP_PLANE1,eqn2);  
-  glEnable(GL_CLIP_PLANE1);  
-  glRotatef(90.0,1.0,0.0,0.0);  
-   
-  glutWireSphere(1.0,20,16);  
-  glPopMatrix();  
-  glFlush();  
-  }  
-  void reshape(int w,int h) 
-  {  
-  glViewport(0,0,(GLsizei)w,(GLsizei)h);  
-  glMatrixMode(GL_PROJECTION);  
-  glLoadIdentity();  
-  gluPerspective(60.0,(GLfloat)w/(GLfloat)h,1.0,20.0);  
-  glMatrixMode(GL_MODELVIEW);  
-  }  
-  int main(int argc,char**argv) 
-  {  
-  glutInit(&argc,argv);  
-  glutInitDisplayMode(GLUT_SINGLE |GLUT_RGB); 
-  glutInitWindowSize(500,500);  
-  glutInitWindowPosition(100,100);  
-  glutCreateWindow(argv [0]); 
-  init();  
-  glutDisplayFunc(display);  
-  glutReshapeFunc(reshape);  
-  glutMainLoop();  
-  return 0; 
- }