glClipPlane剪裁平面

glClipPlane裁剪平面

  (2012-02-21 12:49:18)
标签: 

半平面

 

裁剪

 

线框

 

球体

 

表示

 

杂谈

分类: OPENGL
  1. void glClipPlane(GLenum plane, const GLdouble *equation); 

    定义一个裁剪平面。equation参数指向平面方程Ax + By + Cz + D = 0的4个系数。equation=(0,-1,0,0),前三个参数(0,-1,0)可以理解为法线向下,只有向下的,即Y<0的才能显示,最后一个参数0表示从z=0平面开始。这样就是裁剪掉上半平面。相应的equation=(0,1,0,0)表示裁剪掉下半平面,equation=(1,0,0,0)表示裁剪掉左半平面,equation=(-1,0,0,0)表示裁剪掉右半平面,equation=(0,0,-1,0)表示裁剪掉前半平面,equation=(0,0,1,0)表示裁剪掉后半平面

 

 

 

裁剪平面的代码例子

示例3-5是经过两个裁剪平面裁剪的线框球体,裁去了3/4体积,如图3-23所示。



 
图3-23 裁剪后的线框球体

示例程序3-5 经过两个裁剪平面裁剪的线框球体:clip.c

  1. void init(void)  
  2. {  
  3. glClearColor(0.0,0.0,0.0,0.0);  
  4. glShadeModel(GL_FLAT);  
  5. }  
  6. void display(void)  
  7. {  
  8. GLdouble eqn [4]={0.0,1.0,0.0,0.0};  
  9. GLdouble eqn2 [4] ={1.0,0.0,0.0,0.0};  
  10. glClear(GL_COLOR_BUFFER_BIT);  
  11. glColor3f(1.0,1.0,1.0);  
  12. glPushMatrix();  
  13. glTranslatef(0.0,0.0,-5.0);  
  14.  
  15. glClipPlane(GL_CLIP_PLANE0,eqn);  
  16. glEnable(GL_CLIP_PLANE0);  
  17.  
  18. glClipPlane(GL_CLIP_PLANE1,eqn2);  
  19. glEnable(GL_CLIP_PLANE1);  
  20. glRotatef(90.0,1.0,0.0,0.0);  
  21.  
  22. glutWireSphere(1.0,20,16);  
  23. glPopMatrix();  
  24. glFlush();  
  25. }  
  26. void reshape(int w,int h)  
  27. {  
  28. glViewport(0,0,(GLsizei)w,(GLsizei)h);  
  29. glMatrixMode(GL_PROJECTION);  
  30. glLoadIdentity();  
  31. gluPerspective(60.0,(GLfloat)w/(GLfloat)h,1.0,20.0);  
  32. glMatrixMode(GL_MODELVIEW);  
  33. }  
  34. int main(int argc,char**argv)  
  35. {  
  36. glutInit(&argc,argv);  
  37. glutInitDisplayMode(GLUT_SINGLE |GLUT_RGB);  
  38. glutInitWindowSize(500,500);  
  39. glutInitWindowPosition(100,100);  
  40. glutCreateWindow(argv [0]);  
  41. init();  
  42. glutDisplayFunc(display);  
  43. glutReshapeFunc(reshape);  
  44. glutMainLoop();  
  45. return 0;  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值