fixed hand tracking world position, and picking up objects in VR
[laserbrain_demo] / src / vrinput.cc
1 #include <string.h>
2 #include <goatvr.h>
3 #include "vrinput.h"
4 #include "scene.h"
5 #include "shader.h"
6
7 VRHand vrhand[2];
8
9 static Scene *scn;
10
11 bool init_vrhands()
12 {
13         scn = new Scene;
14         if(!(scn->load("data/vrhands.obj"))) {
15                 return false;
16         }
17         scn->objects[0]->node->set_position(Vec3(0, 150, 0));
18         scn->objects[1]->node->set_position(Vec3(0, 250, 0));
19         scn->update(0);
20         return true;
21 }
22
23 void destroy_vrhands()
24 {
25         delete scn;
26         scn = 0;
27 }
28
29 void update_vrhands(const Avatar *avatar)
30 {
31         Quat qbodyrot;
32         qbodyrot.set_rotation(Vec3(0, 1, 0), -deg_to_rad(avatar->get_body_rotation()));
33         Vec3 pos = avatar->get_position();
34
35         for(int i=0; i<2; i++) {
36                 if(goatvr_hand_active(i)) {
37                         goatvr_hand_position(i, &vrhand[i].pos.x);
38                         goatvr_hand_orientation(i, &vrhand[i].rot.x);
39
40                         vrhand[i].pos = rotate(vrhand[i].pos, qbodyrot) + pos;
41                         vrhand[i].rot = qbodyrot * vrhand[i].rot;
42
43                         vrhand[i].valid = true;
44                 } else {
45                         vrhand[i].valid = false;
46                 }
47         }
48
49         scn->update(0);
50 }
51
52 void draw_vrhands()
53 {
54         bind_shader(0);
55         scn->draw();
56 }