图形之可见面判别算法

来源:互联网 发布:java中怎么调用方法 编辑:程序博客网 时间:2024/06/16 20:00

图形中,从3D的转为2D显示到显示器上,处理的一般流程为:3D数据构建(包括纹理、方位、颜色、形状、点数据、uv数据、相机等)、3D->相机世界的矩阵变化、相机视矩阵对世界的截切、投影到相机的观察屏幕、屏幕剪切(获取视口的所有像素的颜色值)、显示到显示器。
可见面判别是其中3D转2d过程中投影到相机观察平面中重要的一步。判断出那些面需要显示,并最终获取观察平面的像素的显示颜色。
一般判别可以有后向面判别算法、深度缓存算法、A缓存算法、扫描线算法。
1、后向面判别算法,根据3D中该面的法线方向和相机观察向量的关系,来过滤掉与物体背面的面。基本可以处理掉百分之五十的面。
原理:假设某3D平面函数为: A*x+B*y+C*z+D=0,其法向量为N=(A,B,C),假设观察向量 为V(X,Y,Z).通过两个向量点积的值,获取两者夹角。N . V>0,则为后向面,需要剔除。
2、深度缓存算法。假设所有物体都要在观察平面投影,则观察平面的每个像素有可能对应着若干个物体的点,而这个像素的最终颜色决定于所有投影为该像素位置的若干点的颜色和透明度。倘若都不是透明的,则观察平面的颜色值肯定等于距离该平面最近的可见面的点的颜色值。而深度可以理解为所有投影为该像素点的点,距离观察平面的距离值。一般归一化为0-1.
这也是为什么一般设置相机都会设置相机的最大和最小观察距离(为了归一化也为了剔除部分物体)。
(ps。先写两个,改天继续)

原创粉丝点击