按照我的理解:(不一定正确,请老师指正)
1. MVP中的V矩阵是处理视角的位置+方向(框架代码中只有一个位置参数,方向固定为(0, 0, -1) )
2. P实现透视效果,定义视锥体为对称的四棱柱就保证了t=-b,l=-r(top=-bottom,left=-right)
3. 计算P需要的四个参数(fov、ratio、zNear、zFar)是用来表达对称四棱柱的宽扁程度(这四个参数在保证有意义的情况下任意变化,视锥体都是对称四棱柱),这四个参数应该与具体坐标系无关。不管是左手还是右手坐标系,P矩阵值都一样,都有 0 < zNear < zFar
4. 有一节课老师留了一个问题,视锥体压缩成长方体,内部点的深度是靠近zNear还是zFar,我算出来在(z+f)/2点,zafter/zbefore > 1,深度值变大,由于zNear<zFar,所以我得到的答案是靠近zFar(远平面),不知道对不对
5. 关于问题1,框架提供的V矩阵如下:
Eigen::Matrix4f get_view_matrix(Eigen::Vector3f eye_pos) {
Eigen::Matrix4f view = Eigen::Matrix4f::Identity();
Eigen::Matrix4f translate;
translate << 1,0,0,-eye_pos[0],
0,1,0,-eye_pos[1],
0,0,1,-eye_pos[2],
0,0,0,1;
view = translate*view;
return view;
}
这里矩阵对应的是视角位置在eye_pos,看向z负半轴
如果改成位置在eye_pos,看向z正半轴,对应矩阵应该是:
-1, 0, 0, eye_pos[0],
0, 1, 0, -eye_pos[1],
0, 0, -1, eye_pos[2],
0, 0, 0, 1,