fixed hand tracking world position, and picking up objects in VR
[laserbrain_demo] / src / vrinput.cc
index 2a25f53..6bb2aaa 100644 (file)
@@ -2,6 +2,7 @@
 #include <goatvr.h>
 #include "vrinput.h"
 #include "scene.h"
+#include "shader.h"
 
 VRHand vrhand[2];
 
@@ -13,6 +14,9 @@ bool init_vrhands()
        if(!(scn->load("data/vrhands.obj"))) {
                return false;
        }
+       scn->objects[0]->node->set_position(Vec3(0, 150, 0));
+       scn->objects[1]->node->set_position(Vec3(0, 250, 0));
+       scn->update(0);
        return true;
 }
 
@@ -22,19 +26,31 @@ void destroy_vrhands()
        scn = 0;
 }
 
-void update_vrhands()
+void update_vrhands(const Avatar *avatar)
 {
+       Quat qbodyrot;
+       qbodyrot.set_rotation(Vec3(0, 1, 0), -deg_to_rad(avatar->get_body_rotation()));
+       Vec3 pos = avatar->get_position();
+
        for(int i=0; i<2; i++) {
                if(goatvr_hand_active(i)) {
                        goatvr_hand_position(i, &vrhand[i].pos.x);
                        goatvr_hand_orientation(i, &vrhand[i].rot.x);
+
+                       vrhand[i].pos = rotate(vrhand[i].pos, qbodyrot) + pos;
+                       vrhand[i].rot = qbodyrot * vrhand[i].rot;
+
                        vrhand[i].valid = true;
                } else {
                        vrhand[i].valid = false;
                }
        }
+
+       scn->update(0);
 }
 
 void draw_vrhands()
 {
+       bind_shader(0);
+       scn->draw();
 }