裁剪

Posted by ysd on March 27, 2017

Sutherland-Hodgman 算法

Sutherland-Hodgman算法逐平面对多边形进行剪裁。
对于每个剪裁面来说,输入多边形顶点序列,v1-v2-v3-…-v1, 对每条边剪裁,输出新的顶点序列 q1-q2-q2-….
当使用一个平面对一条线段剪裁时,可能有4种情况:

  1. v1,v2都在平面内侧,输出v1
  2. v1在平面内侧,v2在平面外侧,输出v1和交点
  3. v1,v2都在平面外侧,跳过
  4. v1在平面外侧,v2在平面内侧,输出交点 输出后,继续考察下一条边

求平面和直线的交点

已知平面上一点p和法向量n,已知直线上一点a和方向v
则交点为:(ax + t * vx, az + t * vz, az + t * vz)
其中,t = dot(p - a, n) / dot(n, v)

属性差值

每当得到新的点(上面第2,4种情况),则需要对新的点的属性差值。
由于此时位于投影空间,仍然需要对 1/z 差值,其中 z 是相机空间的