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();补充完整函数
时间: 2023-12-03 16:45:00 浏览: 182
以下是补充完整的函数:
```
Eigen::Matrix4f myLookAt(float ex, float ey, float ez, float atx, float aty, float atz, float upx, float upy, float upz) {
Eigen::Vector3f eye(ex, ey, ez);
Eigen::Vector3f target(atx, aty, atz);
Eigen::Vector3f up(upx, upy, upz);
Eigen::Vector3f zaxis = (eye - target).normalized();
Eigen::Vector3f xaxis = up.cross(zaxis).normalized();
Eigen::Vector3f yaxis = zaxis.cross(xaxis);
Eigen::Matrix4f view_matrix;
view_matrix << xaxis.x(), yaxis.x(), zaxis.x(), 0,
xaxis.y(), yaxis.y(), zaxis.y(), 0,
xaxis.z(), yaxis.z(), zaxis.z(), 0,
-xaxis.dot(eye), -yaxis.dot(eye), -zaxis.dot(eye), 1;
return view_matrix;
}
```
此函数实现了OpenGL中的lookAt函数,返回一个观察矩阵。其中,ex、ey、ez为相机位置坐标,atx、aty、atz为相机看向的目标点坐标,upx、upy、upz为相机向上方向的向量坐标。函数首先计算出相机坐标系的三个轴向量,然后将其组合成一个四维矩阵返回。
阅读全文