特征透视投影矩阵

时间:2013-02-20 03:19:56

标签: c++ opengl-es-2.0 eigen

我正在尝试为OpenGL创建透视投影矩阵。我知道怎么用float[16]来做,但为了一致,我想用一个特征矩阵。

formula是:

    [ 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

由于公式是column-major而c-arrays是定义为row-major,因此您可以使用以下命令定义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?查看the documentation,我不清楚如何设置单个单元格值。

2 个答案:

答案 0 :(得分:4)

在您的情况下,最简单的方法是使用comma initializer语法:

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;

答案 1 :(得分:1)

设置单个单元格值可以简单地用paren完成,例如:矩阵(0,0)= xScale;