ShaderMatrix.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "client/rendering/ShaderMatrix.h"
  2. ShaderMatrix::ShaderMatrix(Shader& shader, MatrixStack<16>& stack, Matrix& view)
  3. : shader(shader), stack(stack), view(view) {
  4. }
  5. void ShaderMatrix::pop() {
  6. stack.pop();
  7. }
  8. void ShaderMatrix::push() {
  9. stack.push();
  10. }
  11. ShaderMatrix& ShaderMatrix::update() {
  12. shader.setMatrix("model", stack.peek().getValues());
  13. return *this;
  14. }
  15. ShaderMatrix& ShaderMatrix::update(const Vector3& pos,
  16. const Quaternion& rotation) {
  17. Vector3 right = rotation * Vector3(1.0f, 0.0f, 0.0f);
  18. Vector3 up = rotation * Vector3(0.0f, 1.0f, 0.0f);
  19. Vector3 back = rotation * Vector3(0.0f, 0.0f, -1.0f);
  20. view.set(0, Vector4(right[0], right[1], right[2], right.dot(-pos)));
  21. view.set(1, Vector4(up[0], up[1], up[2], up.dot(-pos)));
  22. view.set(2, Vector4(back[0], back[1], back[2], back.dot(-pos)));
  23. view.set(3, Vector4(0.0f, 0.0f, 0.0f, 1.0f));
  24. shader.setMatrix("view", view.getValues());
  25. return *this;
  26. }
  27. ShaderMatrix& ShaderMatrix::scale(float sx, float sy, float sz) {
  28. stack.peek().scale(Vector3(sx, sy, sz));
  29. return *this;
  30. }
  31. ShaderMatrix& ShaderMatrix::scale(float s) {
  32. stack.peek().scale(s);
  33. return *this;
  34. }
  35. ShaderMatrix& ShaderMatrix::translate(float tx, float ty, float tz) {
  36. stack.peek().translate(Vector3(tx, ty, tz));
  37. return *this;
  38. }
  39. ShaderMatrix& ShaderMatrix::translateX(float tx) {
  40. stack.peek().translateX(tx);
  41. return *this;
  42. }
  43. ShaderMatrix& ShaderMatrix::translateY(float ty) {
  44. stack.peek().translateY(ty);
  45. return *this;
  46. }
  47. ShaderMatrix& ShaderMatrix::translateZ(float tz) {
  48. stack.peek().translateZ(tz);
  49. return *this;
  50. }
  51. ShaderMatrix& ShaderMatrix::translateTo(float tx, float ty, float tz) {
  52. stack.peek().translateTo(Vector3(tx, ty, tz));
  53. return *this;
  54. }
  55. ShaderMatrix& ShaderMatrix::rotateX(float degrees) {
  56. stack.peek().rotateX(degrees);
  57. return *this;
  58. }
  59. ShaderMatrix& ShaderMatrix::rotateY(float degrees) {
  60. stack.peek().rotateY(degrees);
  61. return *this;
  62. }
  63. ShaderMatrix& ShaderMatrix::rotateZ(float degrees) {
  64. stack.peek().rotateZ(degrees);
  65. return *this;
  66. }
  67. ShaderMatrix& ShaderMatrix::identity() {
  68. stack.peek().translateTo(Vector3());
  69. return *this;
  70. }