humanoid_math.h 840 B

12345678910111213141516171819202122232425262728293031
  1. #pragma once
  2. #include <QVector3D>
  3. #include <cmath>
  4. #include <cstdint>
  5. namespace Render::GL {
  6. inline float hash01(uint32_t x) {
  7. x ^= x << 13;
  8. x ^= x >> 17;
  9. x ^= x << 5;
  10. return (x & 0x00FFFFFF) / float(0x01000000);
  11. }
  12. inline QVector3D rotY(const QVector3D &v, float angleRad) {
  13. const float c = std::cos(angleRad);
  14. const float s = std::sin(angleRad);
  15. return QVector3D(c * v.x() + s * v.z(), v.y(), -s * v.x() + c * v.z());
  16. }
  17. inline QVector3D rightOf(const QVector3D &fwd) {
  18. const QVector3D UP(0.0f, 1.0f, 0.0f);
  19. return QVector3D::crossProduct(UP, fwd).normalized();
  20. }
  21. QVector3D elbowBendTorso(const QVector3D &shoulder, const QVector3D &hand,
  22. const QVector3D &outwardDir, float alongFrac,
  23. float lateralOffset, float yBias, float outwardSign);
  24. } // namespace Render::GL