glClipPlane裁剪平面
(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; - }