Glsl Matrix.h 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. #define Matrix3(m) Vec m[3]
  2. #define Matrix( m) Vec4 m[3]
  3. #define Matrix4(m) Vec4 m[4]
  4. MP Vec MatrixX (MP Matrix(m)) {return Vec(m[0].x, m[1].x, m[2].x);}
  5. MP Vec MatrixY (MP Matrix(m)) {return Vec(m[0].y, m[1].y, m[2].y);}
  6. MP Vec MatrixZ (MP Matrix(m)) {return Vec(m[0].z, m[1].z, m[2].z);}
  7. HP Vec MatrixPos(MP Matrix(m)) {return Vec(m[0].w, m[1].w, m[2].w);}
  8. MP Vec Transform(MP Vec v, MP Matrix3(m))
  9. {
  10. return Vec(Dot(v, m[0]),
  11. Dot(v, m[1]),
  12. Dot(v, m[2]));
  13. }
  14. MP Vec Transform3(MP Vec v, MP Matrix(m))
  15. {
  16. return Vec(Dot(v, m[0].xyz),
  17. Dot(v, m[1].xyz),
  18. Dot(v, m[2].xyz));
  19. }
  20. HP Vec Transform(HP Vec v, HP Matrix(m))
  21. {
  22. return Vec(Dot(v, m[0].xyz) + m[0].w,
  23. Dot(v, m[1].xyz) + m[1].w,
  24. Dot(v, m[2].xyz) + m[2].w);
  25. }
  26. HP Vec4 Transform(HP Vec v, HP Matrix4(m))
  27. {
  28. return Vec4(Dot(v, m[0].xyz) + m[0].w,
  29. Dot(v, m[1].xyz) + m[1].w,
  30. Dot(v, m[2].xyz) + m[2].w,
  31. Dot(v, m[3].xyz) + m[3].w);
  32. }