给定透视投影矩阵和投影中心如何导出投影平面? 例如,让我们假设透视投影矩阵是4x4同质矩阵:
1 0 0 0
0 1 0 0
0 0 1 0
0 2 0 0
和投影中心[0,0,0]。根据这些数据,很清楚每个点如何投影到投影平面中。但是如何使用这些数据来找到投影平面的精确方程/表示?
答案 0 :(得分:2)
与“投影中心”(相机在3D场景中的有效位置)不同,在图像投射到的概念平面意义上不需要具体的“投影平面”。
相反,投影矩阵确定转换为“剪辑空间”,确定视口边界和深度映射,x
和y
坐标进一步缩放并偏移以获得目标像素位置。但是,这些都不会转化为场景中的某个实际平面,它与某个物理相机的焦平面相对应。
您可以从相机矩阵中获得相关的平面:
w=0
平面,它是投影矩阵的第四行。这架飞机穿过投影中心,将摄像机前方的点与后面的点分开; w=0
平面上的所有点都不可见。在您的示例中,此平面为0 2 0 0
,即X-Z坐标平面。
z=0
平面,它是投影矩阵的第三行。结合w=0
平面,它确定深度映射函数和近/远剪切平面。在您的示例中,此平面为0 0 1 0
,即X-Y坐标平面。
相机矩阵的其余行也表示平面:第一行和第二行分别是x=0
和y=0
平面。从某种意义上说,它们并不像w=0
平面那样具体。通常,它们将剪辑空间(和视锥体)分成象限。它们通过取w=0
平面坐标的和与差来确定观察平截头体的水平和垂直边界平面。
“投影中心”是x=0
,y=0
和w=0
平面(即第一,第二和第四行)的交点处的点。投影矩阵)。我应该注意到,这表明你的例子是一个非传统的配置:“投影中心”没有明确定义,你的所有点都将用剪辑空间坐标映射,y/w = 1/2
,这通常是一个水平线在屏幕下方四分之一处。另请注意,通常,z=0
平面应与w=0
平面平行,仅在无穷远处相交(而不是沿着X轴,如示例所示)。
近和远剪裁平面是根据图形系统的剪辑空间惯例从z=0
和w=0
平面派生的:
z/w = [near=-1, far=+1]
w=0
和z=0
平面的总和(示例中为0 2 1 0
)0 2 -1 0
)z/w = [near=0, far=-1]
z=0
平面(在您的示例中为0 0 1 0
)0 2 1 0
)