从OpenGL 矩阵中提取裁剪平面
来自 flyfish|已发表 2020-09-29
我们假设 顶点 列向量 v =(x y z w=1) 和 M 是 4X4 的是变换到裁剪空间的矩阵矩阵(column major projection matrix), 将v 变换到 clip space v’ = Mv , 如下
OpenGL 在测试顶点可见性时,是根据:
一般视锥体分别由 左、右、底、顶、远、近、六个裁剪平面包围而成:
-w’ < x’ | x’在左裁剪平面正半空间内 |
x’ < w’ | x’在右裁剪平面正半空间内 |
-w’ < y’ | y’在底裁剪平面正半空间内 |
y’ < -w’ | y’在定裁剪平面正半空间内 |
-w’ < z’ | z’在近裁剪平面正半空间内 |
z’ < w’ | z’在远裁剪平面正半空间内 |
注意: OpenGL 裁剪空间 的手向性(左手系)
我们以左裁剪平面为例,将变换后的v’ 的 x’ 部分代入到 测试公式中:
(1) -w’ < x’
(2)-v*row4 < v* row1
(3) 0< v*row4 + v* row1
(4) 0 < v*(row4 + row1)
(5) 平面方程 : x(m41 + m11) + y(m42+ m12) + z(m43 + m13) + w(m44 + m14) =0 , 因为 w =1 , 可以简化为:
(6) x(m41 + m11) + y(m42+ m12) + z(m43 + m13) + m44 + m14 = 0 , 平面方程的系数:
a= m41 + m11 , b= m42 + m12, c = m43 + m13, d = m44 + m14
同理可推导出其它平面方程, 用列表列出:
当 M 是 透视矩阵 P 时, 裁剪平面定义在观察坐标系空间;
当M = MVP 时 , 裁剪平面定义在模型坐标系空间;