Opengl中,除了视景体的立方体裁剪平面之外,另外还可以额外指定多达6个裁剪平面,对视景体做进一步限制。每一个平面都由平面公式定义:Ax+By+Cz+D = 0.裁剪平面的指定通过函数:glClipPlane(GLenum plane,const GLdouble* equation)确定。plane可能值为:GL_CLIP_PLANE0--GL_CLIP_PLANE6。。。equation为大小为4的数组:顺序分别对应参数A,B,C,D.最后所有满足(A,B,C,D)*M(-1)*(Xe,Ye,Ze,We)(T) ≥0的点位于平面定义的半空间内。
示例代码(来自OpenGL编程指南
):在开启裁剪平面之前或之后进行的变换操作对于裁剪平面将产生完全不同的结果,具体看代码注释。
void clipDisplay()
{
GLdouble eqn[4] = { 0.0, 1.0, 1.0, 0.0 };
GLdouble eqn2[4] = { 1.0, 0.0, 0.0, 0.0 };//两个裁剪平面系数
glColor3f(1.0, 1.0, 1.0);
glPushMatrix();
static float z = 0, k = 0.0;
static float a = 0;
//glTranslatef(0.0, z -= 0.001, 0);//裁剪前进行变化,对裁剪平面产生影响,裁剪平面跟随移动
//clip 裁剪
glClipPlane( GL_CLIP_PLANE0, eqn );
glEnable(GL_CLIP_PLANE0);
//clip 裁剪
glClipPlane(GL_CLIP_PLANE1,eqn2);
glEnable(GL_CLIP_PLANE1);
glTranslatef(0.0, k += 0.001, 0);
glRotatef(a += 0.1, 1.0, 1.0, 1.0);//裁剪后变换,不会对裁剪平面产生影响,裁剪平面不会移动
//绘制球体
GLUquadricObj* qobj = gluNewQuadric(); //二次曲面对象
gluSphere(qobj, 1.0, 20, 16);
glPopMatrix();
}