- Hands-On C++ Game Animation Programming
- Gabor Szauer
- 392字
- 2021-06-30 14:46:00
Look at
The view matrix is the inverse of the camera's transformation (the position, rotation, and scale of the camera). Instead of having to create the camera's transform matrix and then invert it, you will be implementing a lookAt function that generates this matrix directly.
A lookAt function typically takes a position, the target point at which the camera is looking and a reference up direction. The rest of the work is finding the inverted basis vectors and figuring out where the position is.
Since the basis vectors are orthonormal, their inverse is the same as their transpose. The position can be calculated by negating the dot product of the position column vector with the inverted basis vectors.
Implement the lookAt function in mat4.cpp. Don't forget to add the function declaration to mat4.h. Remember, the view matrix maps the game world forward to the positive Z axis:
mat4 lookAt(const vec3& position, const vec3& target,
const vec3& up) {
vec3 f = normalized(target - position) * -1.0f;
vec3 r = cross(up, f); // Right handed
if (r == vec3(0, 0, 0)) {
return mat4(); // Error
}
normalize(r);
vec3 u = normalized(cross(f, r)); // Right handed
vec3 t = vec3(
-dot(r, position),
-dot(u, position),
-dot(f, position)
);
return mat4(
// Transpose upper 3x3 matrix to invert it
r.x, u.x, f.x, 0,
r.y, u.y, f.y, 0,
r.z, u.z, f.z, 0,
t.x, t.y, t.z, 1
);
}
The lookAt function is the most convenient way of constructing a view matrix. All of the code samples throughout the rest of this book will use the lookAt function to set up a view matrix.
- GAE編程指南
- 羅克韋爾ControlLogix系統應用技術
- Interactive Applications Using Matplotlib
- 小程序,巧運營:微信小程序運營招式大全
- Visual C++應用開發
- Mastering Apache Spark 2.x(Second Edition)
- Spring Boot進階:原理、實戰與面試題分析
- Nginx Lua開發實戰
- 深入實踐Kotlin元編程
- Illustrator CS6設計與應用任務教程
- 零基礎學HTML+CSS
- MySQL數據庫教程(視頻指導版)
- Cloud Development andDeployment with CloudBees
- Analytics for the Internet of Things(IoT)
- Node.js進階之路