透视投影矩阵似乎具有不正确的FOV

时间:2014-04-20 18:17:26

标签: c# matrix 3d sharpdx

我正在使用SharpDX从头开始编写" 3D软引擎"根据MSDN上的教程。但是,我无法将我期望的和实际的视野匹配起来。

我现在简化的世界包含四个3D顶点,Z = 0 at(0,1,0);(0,-1,0);(1,0,0);( - 1,0,0 )。我将相机放在(0,0,2)并用(0,1,0)向上看(0,0,0)。我设置了具有90度FOV(PI / 2弧度)的投影矩阵,并准备通过调用Vector3.TransformCoordinate(Vector3, Matrix)来渲染四个顶点中的每一个。

我的理解是FOV用于计算可应用于每个(Y,Z)对的比例因子1/TAN(FOV/2),使y' = y * scale / z。类似地,给定纵横比,也计算(X,Z)对的比例。

对于90度(相机距离2)的(垂直)视场,我希望我的所有顶点都远离位图的边缘。但是,顶部和底部顶点的Y值为-0.49和+0.49,这意味着如果渲染它们实际上会触摸屏幕边界。我误解了FOV的概念吗?我所看到的结果是我对大约53度的FOV所期望的结果。它就像在切换之前将切线减半一样......

我首先尝试使用相机在(0,0,1)和FOV为90度,因为我确信比例因子是1(1/TAN(90/2) = 1),但是顶点不在屏幕上。

1 个答案:

答案 0 :(得分:1)

透视变换将坐标从相机空间转换为剪辑空间。

相机空间是一个普通的笛卡尔系统,以相机为原点。

剪辑空间是一个临时空间,后来映射到视口。对于视口内的点,xy坐标都在[-1, 1]范围内。