View.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include "math/View.h"
  2. const Matrix& View::update(float lengthAngle, float widthAngle,
  3. const Vector3& pos) {
  4. back.setAngles(lengthAngle, widthAngle);
  5. right = back.cross(Vector3(0.0f, 1.0f, 0.0f));
  6. right.normalize();
  7. up = right.cross(back);
  8. up.normalize();
  9. back = -back;
  10. view.set(0, Vector4(right[0], right[1], right[2], right.dot(-pos)));
  11. view.set(1, Vector4(up[0], up[1], up[2], up.dot(-pos)));
  12. view.set(2, Vector4(back[0], back[1], back[2], back.dot(-pos)));
  13. view.set(3, Vector4(0.0f, 0.0f, 0.0f, 1.0f));
  14. return view;
  15. }
  16. const Matrix& View::update(const Quaternion& q, const Vector3& pos) {
  17. up = q * Vector3(0.0f, 1.0f, 0.0f);
  18. back = q * Vector3(-1.0f, 0.0f, 0.0f);
  19. right = up.cross(back);
  20. right.normalize();
  21. view.set(0, Vector4(right[0], right[1], right[2], right.dot(-pos)));
  22. view.set(1, Vector4(up[0], up[1], up[2], up.dot(-pos)));
  23. view.set(2, Vector4(back[0], back[1], back[2], back.dot(-pos)));
  24. view.set(3, Vector4(0.0f, 0.0f, 0.0f, 1.0f));
  25. return view;
  26. }
  27. Vector3 View::getUp() const {
  28. return up;
  29. }
  30. Vector3 View::getDown() const {
  31. return -up;
  32. }
  33. Vector3 View::getLeft() const {
  34. return -right;
  35. }
  36. Vector3 View::getRight() const {
  37. return right;
  38. }
  39. Vector3 View::getFront() const {
  40. return -back;
  41. }
  42. Vector3 View::getBack() const {
  43. return back;
  44. }