OpenGL补充修改下列代码Eigen::Matrix4f myLookAt(float ex, float ey, float ez, float atx, float aty, float atz, float upx, float upy, float upz) { Eigen::Matrix4f m; m.setZero(); //请在下面空白处完成此函数 m.setIdentity();//这句应该去掉 //请在上面空白处完成此函数 mModelView *= m; return m; }
时间: 2024-02-16 19:04:47 浏览: 81
RcppEigen:Eigen模板线性代数库的Rcpp集成
这段代码是一个用于计算观察矩阵的函数,需要补充的部分如下:
```c++
Eigen::Vector3f eye(ex, ey, ez); // 相机位置
Eigen::Vector3f at(atx, aty, atz); // 物体位置
Eigen::Vector3f up(upx, upy, upz); // 相机的上方向
Eigen::Vector3f z = (eye - at).normalized(); // 相机方向
Eigen::Vector3f x = up.cross(z).normalized(); // 相机右方向
Eigen::Vector3f y = z.cross(x); // 相机上方向
Eigen::Matrix4f m;
m << x.x(), x.y(), x.z(), -x.dot(eye),
y.x(), y.y(), y.z(), -y.dot(eye),
z.x(), z.y(), z.z(), -z.dot(eye),
0, 0, 0, 1;
return m;
```
这里我们先计算出相机的方向向量 $z$,然后通过相机的上方向和 $z$ 叉乘得到相机的右方向向量 $x$,再通过 $z$ 和 $x$ 叉乘得到相机的上方向向量 $y$。然后我们用这三个向量构造出观察矩阵 $m$。需要注意的是,这里的向量都是需要归一化的。
阅读全文