diff --git a/src/lava-vr/FeetPlacer.cc b/src/lava-vr/FeetPlacer.cc new file mode 100644 index 0000000000000000000000000000000000000000..93c0b993d911025ada418699a6bc6905ebd6cbcc --- /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 0000000000000000000000000000000000000000..914a8800e743c46c0a3d0d8e33cd892d0271c785 --- /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