OpenGL学习日记-2014.11.26--简单裁剪

本文探讨了OpenGL中裁剪平面的概念及其在3D场景中的使用方法,通过示例代码展示了如何利用裁剪平面实现对视景体的进一步限制与优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值