本文主要是介绍裁剪空间法-引出平面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在这里另外一种扩展视景体空间的方法就是基于裁剪空间属性。
假设一个点p=(x,y,z,1)位于3D空间中。同样假设一个模型变换矩阵M和投影矩阵P。点p经过矩阵M和矩阵P变换之后的在裁剪空间中的点pc=(xc,yc,zc,wc):
pc是本地坐标,当规范化后的点pcn:
在规范化的裁剪空间中视景体是中心在原点的轴对齐的长方体,是通过下面的平面包围的:
1. 左平面:x’= -1;
2. 右平面:x’= 1;
3. 顶平面:y’ = 1;
4. 底平面:y’ = -1;
5. 近平面:z’= -1;
6. 远平面:z’= 1;
如果点pcn=(x’,y’,z’)在视景体内部那么:
那么没有规范化的点pc,要在视景体内部要满足:
基于这些信息可能可以找到六个平面,在世界坐标中,视景体包围盒,点pc在左平面的右边需要:
假设p和A = MP,可以用下面描述:
其中的xc和wc可以用函数p=(x,y,z,w)和A来定义:
那么如果点p在左平面的右边必须满足:
修整不等式得到:
因此左边平面的方程(Ax+By+Cz+D=0):
其中col1和col4分别代表矩阵A第1行和第四行。
如果只是简单的判断点是在视景体之外还是之内用定义的平面就可以了。然而当测试球体时,就需要计算球体中心到平面的距离,最好是规范化平面。
右边平面也可以用相似的方法来计算:
下面的系数是用来定义右平面:
剩下的平面如下:
底平面:
顶平面:
近平面:
远平面:
英文地址
我的博客地址:http://www.arcosu.com/post/index/105
这篇关于裁剪空间法-引出平面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!