特征透视投影矩阵
Eigen perspective projection matrix
我正在尝试为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。
相关文章:
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 特征命名访问向量段
- 将特征矩阵的向量设置为0
- 特征:模板函数中矩阵的平面图
- 在其特征向量上投影点云
- 在 OpenGL 中使用透视与正交投影时的光线投射(鼠标拾取)
- OpenGL 透视投影裁剪多边形与顶点在视锥体之外 = 错误的纹理映射?
- 从正交投影平滑过渡到透视投影
- 现代Opengl:同时正投影和透视投影
- 绕Y轴旋转二维正方形,并使用DirectX或openGL以透视投影方式显示
- 透视投影 OPENGL 和计算着色器
- 透视到世界空间逆投影
- 在C++中的OpenGL中将坐标从三维透视投影映射到二维正投影
- 如何在透视投影中检查点是否在四边形内
- OpenGL透视投影来映射屏幕像素
- 为什么这个透视投影矩阵计算不能给出正确的结果
- 特征透视投影矩阵
- 三维头部的透视投影和z -缓冲以形成面部图像