对glClipPlane平面方程参数的求解

    glClipPlane对裁剪frustum还是很管用的,可进一步定义视图体的范围。裁剪平面由方程Ax+By+Cz+D=0确定。所有满足[A B C D]M-1[Xe Ye Ze We]T>0的人眼坐标[Xe Ye Ze We]的点都位于该平面定义的半空间中,而该半空间以外的所有点都被裁剪掉——摘自Redbook。

    在我之前写的reflection就可以用此函数裁剪掉穿过floor的物体,那时还不知道如何确定方程的参数,现在有法子了呵呵。声明,网上找的。

void findPlane(GLfloat plane[4], CVector3D& p1, CVector3D& p2, CVector3D& p3)
{

/* Need 2 vectors to find cross product. */
 CVector3D vec1, vec2;
 vec1.SetValue(p2.dx-p1.dx, p2.dy-p1.dy, p2.dz-p1.dz);
 vec2.SetValue(p3.dx-p1.dx, p3.dy-p1.dy, p3.dz-p1.dz);

/* find cross product to get A, B, and C of plane equation */

 plane[A] = vec1.dy * vec2.dz - vec1.dz * vec2.dy;
 plane[B] = -(vec1.dx * vec2.dz - vec1.dz * vec2.dx);
 plane[C] = vec1.dx * vec2.dy - vec1.dy * vec2.dx;
 plane[D] = -(plane[0]*p1.dx + plane[1]*p1.dy + plane[2]*p1.dz);

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值