use*_*450 3 c++ eigen opengl-es-2.0
我正在尝试为 OpenGL 创建一个透视投影矩阵。我知道如何使用 afloat[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 ]
Run Code Online (Sandbox Code Playgroud)
在哪里:
yScale = cot(fovY/2)
xScale = yScale/aspectRatio
Run Code Online (Sandbox Code Playgroud)
由于公式是列优先的,并且 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
};
Run Code Online (Sandbox Code Playgroud)
那么我究竟如何用 Eigen 创建一个这样的矩阵呢?我会使用 anEigen::Affine3f
还是 a 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;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4497 次 |
最近记录: |