特征透视投影矩阵

Eigen perspective projection matrix

本文关键字:透视投影 特征      更新时间:2023-10-16

我正在尝试为OpenGL创建透视投影矩阵。我知道如何使用float[16],但为了一致性,我想使用特征矩阵。

公式为:

    [ xScale   0                 0                        0               ]
P = [   0    yScale              0                        0               ]
    [   0      0    -(zFar+zNear)/(zFar-zNear) -2*zNear*zFar/(zFar-zNear) ]
    [   0      0                -1                        0               ]

其中:

yScale = cot(fovY/2)
xScale = yScale/aspectRatio

由于公式以列为主,c数组以行为主,因此您可以定义一个float[16]矩阵,其中包含:

float P[16] = {
  xScale, 0, 0, 0,
  0, yScale, 0, 0,
  0, 0, -(zFar+zNear)/(zFar-zNear), -1
  0, 0, -2*zNear*zFar/(zFar-zNear), 0
};

那么,我该如何用Eigen创建这样一个矩阵呢?我要使用Eigen::Affine3f还是Eigen::Matrix4f?查看文档,我不清楚如何设置单个单元格的值。

在您的情况下,最简单的是使用逗号初始化器语法:

Eigen::Matrix4f pmat;
pmat << xScale, 0, 0, 0,
        0, yScale, 0, 0,
        0, 0, -(zFar+zNear)/(zFar-zNear), -1,
        0, 0, -2*zNear*zFar/(zFar-zNear), 0;

只需使用paren即可设置单个单元格值,例如Matrix(0,0)=xScale。