| 145 | } |
| 146 | |
| 147 | Mat4 LookAt(const Vec3& eye, const Vec3& center, const Vec3& up) |
| 148 | { |
| 149 | Vec3 f = Normalize(center - eye); |
| 150 | Vec3 s = Normalize(Cross(f, up)); |
| 151 | Vec3 u = Cross(s, f); |
| 152 | |
| 153 | Mat4 r = Identity(); |
| 154 | r.at(0, 0) = s.x; |
| 155 | r.at(0, 1) = s.y; |
| 156 | r.at(0, 2) = s.z; |
| 157 | r.at(1, 0) = u.x; |
| 158 | r.at(1, 1) = u.y; |
| 159 | r.at(1, 2) = u.z; |
| 160 | r.at(2, 0) = -f.x; |
| 161 | r.at(2, 1) = -f.y; |
| 162 | r.at(2, 2) = -f.z; |
| 163 | r.at(0, 3) = -Dot(s, eye); |
| 164 | r.at(1, 3) = -Dot(u, eye); |
| 165 | r.at(2, 3) = Dot(f, eye); |
| 166 | return r; |
| 167 | } |
| 168 | |
| 169 | Mat4 Ortho(float l, float r, float b, float t, float n, float f) |
| 170 | { |