From 25d2da3659a7a17795d4e07dfdb55d72ba9e234c Mon Sep 17 00:00:00 2001
From: Christian Mattes <christian.mattes@rwth-aachen.de>
Date: Fri, 25 Jan 2019 16:58:08 +0100
Subject: [PATCH] Added FeetPlacer

---
 src/lava-vr/FeetPlacer.cc | 33 +++++++++++++++++++++++++++++++++
 src/lava-vr/FeetPlacer.hh | 23 +++++++++++++++++++++++
 2 files changed, 56 insertions(+)
 create mode 100644 src/lava-vr/FeetPlacer.cc
 create mode 100644 src/lava-vr/FeetPlacer.hh

diff --git a/src/lava-vr/FeetPlacer.cc b/src/lava-vr/FeetPlacer.cc
new file mode 100644
index 0000000..93c0b99
--- /dev/null
+++ b/src/lava-vr/FeetPlacer.cc
@@ -0,0 +1,33 @@
+#include "FeetPlacer.hh"
+#include <glm/glm.hpp>
+#include <glm/gtx/transform.hpp>
+#include <lava-extras/openvr/OpenVRControllerInput.hh>
+
+namespace lava {
+namespace vr {
+
+FeetPlacer::FeetPlacer(MeshHandle foot, Tracker const &left,
+                       Tracker const &right)
+    : mFoot(foot), mLeft(left), mRight(right) {}
+
+void FeetPlacer::place(BatchingRenderer &renderer) {
+    glm::mat4 trackerToShoe = {1, 0, 0,  0, //
+                               0, 0, -1, 0, //
+                               0, 1, 0,  0, //
+                               0, 0, 0,  1};
+    // trackerToShoe = glm::mat4(1.0);
+
+    {
+        auto leftXf = mLeft.pose() * trackerToShoe;
+        leftXf = leftXf * scale(glm::vec3{-1.f, 1.f, 1.f});
+
+        renderer.enqueue(mFoot, leftXf);
+    }
+    {
+        auto rightXf = mRight.pose() * trackerToShoe;
+        renderer.enqueue(mFoot, rightXf);
+    }
+}
+
+} // namespace vr
+} // namespace lava
diff --git a/src/lava-vr/FeetPlacer.hh b/src/lava-vr/FeetPlacer.hh
new file mode 100644
index 0000000..914a880
--- /dev/null
+++ b/src/lava-vr/FeetPlacer.hh
@@ -0,0 +1,23 @@
+#pragma once
+#include <lava-extras/openvr/fwd.hh>
+#include <lava-vr/BatchingRenderer.hh>
+
+namespace lava {
+namespace vr {
+
+class FeetPlacer {
+  public:
+    using MeshHandle = lava::vr::BatchingRenderer::MeshHandle;
+    using Tracker = lava::openvr::OpenVRController;
+
+    FeetPlacer(MeshHandle foot, Tracker const &left, Tracker const &right);
+    void place(lava::vr::BatchingRenderer &renderer);
+
+  protected:
+    MeshHandle mFoot;
+    Tracker const &mLeft;
+    Tracker const &mRight;
+};
+
+} // namespace vr
+} // namespace lava
-- 
GitLab