#include <string.h>
+#include <goatvr.h>
#include "vrinput.h"
#include "scene.h"
+#include "shader.h"
VRHand vrhand[2];
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;
}
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(!(vrhand[i].src = goatvr_get_hand_tracker(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;
- continue;
}
- goatvr_source_position(vrhand[i].src, &vrhand[i].pos.x);
- goatvr_source_orientation(vrhand[i].src, &vrhand[i].rot.x);
- float *mat = goatvr_source_matrix(vrhand[i].src);
- memcpy(vrhand[i].xform[0], mat, 16 * sizeof(float));
- vrhand[i].valid = true;
}
+
+ scn->update(0);
}
void draw_vrhands()
{
+ bind_shader(0);
+ scn->draw();
}