我正在尝试为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,我不清楚如何设置单个单元格值。
答案 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;