欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

glClipPlane剪裁平面

发布时间:2024/8/23 68 豆豆
生活随笔 收集整理的这篇文章主要介绍了 glClipPlane剪裁平面 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

glClipPlane裁剪平面

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

半平面

 

裁剪

 

线框

 

球体

 

表示

 

杂谈

分类: OPENGL
  • 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

  • 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;  
  • 总结

    以上是生活随笔为你收集整理的glClipPlane剪裁平面的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。