Engine
look_at.h
1 #include <Eigen/Core>
2 
3 //http://spointeau.blogspot.ca/2013/12/hello-i-am-looking-at-opengl-3.html
4 
5 template<class T>
6 Eigen::Matrix<T,4,4> LookAt
7 (
8  Eigen::Matrix<T,3,1> const & eye, // camera viewport
9  Eigen::Matrix<T,3,1> const & center, // where you are looking
10  Eigen::Matrix<T,3,1> const & up // world up
11 )
12 {
13  typedef Eigen::Matrix<T,4,4> Matrix4;
14  typedef Eigen::Matrix<T,3,1> Vector3;
15 
16  Vector3 f = (center - eye).normalized();
17  Vector3 u = up.normalized();
18  Vector3 s = f.cross(u).normalized();
19  u = s.cross(f);
20 
21  Matrix4 res;
22  res << s.x(),s.y(),s.z(),-s.dot(eye),
23  u.x(),u.y(),u.z(),-u.dot(eye),
24  -f.x(),-f.y(),-f.z(),f.dot(eye),
25  0,0,0,1;
26 
27  return res;
28 };