diff --git a/bin/npvr.dll b/bin/npvr.dll
index a71d1fc..3618fc9 100644
Binary files a/bin/npvr.dll and b/bin/npvr.dll differ
diff --git a/examples/OculusRawData.html b/examples/OculusRawData.html
new file mode 100644
index 0000000..00d9dbf
--- /dev/null
+++ b/examples/OculusRawData.html
@@ -0,0 +1,57 @@
+
+
+
+ NPVR Raw Data
+
+
+
+
+
+
+
+
diff --git a/examples/rift_demo.html b/examples/rift_demo.html
index c2b7498..b2403b1 100644
--- a/examples/rift_demo.html
+++ b/examples/rift_demo.html
@@ -1,4 +1,4 @@
-
+
@@ -151,8 +151,8 @@
controls = new THREE.OculusRiftControls( camera );
scene.add( controls.getObject() );
- // var cameraHelper = new THREE.CameraHelper(camera);
- // scene.add(cameraHelper);
+ //var cameraHelper = new THREE.CameraHelper(camera);
+ //scene.add(cameraHelper);
ray = new THREE.Raycaster();
ray.ray.direction.set( 0, -1, 0 );
@@ -276,12 +276,20 @@
}
// Poll VR, if it's ready.
- if (vr.isReady) {
- vr.poll(vrstate);
- }
+ if (vr.isReady) {
+ vr.poll(vrstate);
+
+ camera.position.x = vrstate.oculus.position[0] * 100;
+ camera.position.y = vrstate.oculus.position[1] * 100 +50;
+ camera.position.z = vrstate.oculus.position[2] * 100;
+
+ camera.rotation.w = vrstate.oculus.rotation[3] * Math.PI;
+ camera.rotation.y = vrstate.oculus.rotation[1] * Math.PI;
+ camera.rotation.z = vrstate.oculus.rotation[2] * Math.PI;
+ camera.rotation.x = vrstate.oculus.rotation[0] * Math.PI;
+ }
controls.update( Date.now() - time, vr.isReady ? vrstate : null );
- //renderer.render( scene, camera );
effect.render( scene, camera );
time = Date.now();
diff --git a/lib/vr.js b/lib/vr.js
index 563e6bb..f93ee77 100644
--- a/lib/vr.js
+++ b/lib/vr.js
@@ -283,12 +283,17 @@ vr.poll = function(state) {
};
function parseOculusChunk(state, data) {
- if (data.length == 5) {
+ if (data.length == 8) {
state.oculus.present = true;
state.oculus.rotation[0] = parseFloat(data[1]);
state.oculus.rotation[1] = parseFloat(data[2]);
state.oculus.rotation[2] = parseFloat(data[3]);
state.oculus.rotation[3] = parseFloat(data[4]);
+
+ state.oculus.position = new Array();
+ state.oculus.position[0] = parseFloat(data[5]);
+ state.oculus.position[1] = parseFloat(data[6]);
+ state.oculus.position[2] = parseFloat(data[7]);
} else {
state.oculus.present = false;
}
diff --git a/src/npvr/ovr_manager.cpp b/src/npvr/ovr_manager.cpp
index d2f5b0a..53aea06 100644
--- a/src/npvr/ovr_manager.cpp
+++ b/src/npvr/ovr_manager.cpp
@@ -11,43 +11,39 @@ OVRManager *OVRManager::Instance() {
}
OVRManager::OVRManager() {
- OVR::System::Init();
- sensor_fusion_ = new OVR::SensorFusion();
- device_manager_ = OVR::DeviceManager::Create();
- hmd_device_ = device_manager_->EnumerateDevices().CreateDevice();
- if (hmd_device_) {
- sensor_fusion_->AttachToSensor(hmd_device_->GetSensor());
- }
- device_manager_->SetMessageHandler(this);
-}
+ ovr_Initialize();
+ ovrHmd hmd_devive = ovrHmd_Create(0);
+ hmd_device_ = hmd_devive;
-void OVRManager::OnMessage(const OVR::Message &message) {
- switch(message.Type) {
- case OVR::MessageType::Message_DeviceRemoved:
- // TODO: Verify that the removed device is the one we're using.
- if (hmd_device_) {
- hmd_device_->Release();
- hmd_device_ = NULL;
- }
- break;
- case OVR::MessageType::Message_DeviceAdded:
- if (!hmd_device_) {
- // TODO: This doesn't work for some reason.
- hmd_device_ = device_manager_->EnumerateDevices().CreateDevice();
- if (hmd_device_) {
- sensor_fusion_->AttachToSensor(hmd_device_->GetSensor());
- }
- }
- break;
- default:
- break;
- }
+ ovrHmd_ConfigureTracking(hmd_devive, ovrTrackingCap_Orientation |
+ ovrTrackingCap_MagYawCorrection |
+ ovrTrackingCap_Position, 0);
}
bool OVRManager::DevicePresent() const {
return hmd_device_;
}
-OVR::Quatf &OVRManager::GetOrientation() const {
- return sensor_fusion_->GetOrientation();
+OVR::Quatf* &OVRManager::GetOrientation() const {
+
+ static ovrPosef eyeRenderPose[2];
+
+ ovrEyeType eye = hmd_device_->EyeRenderOrder[0];
+ eyeRenderPose[0] = ovrHmd_GetEyePose(hmd_device_, eye);
+
+ OVR::Quatf* orientation = new OVR::Quatf(eyeRenderPose[0].Orientation.x, eyeRenderPose[0].Orientation.y, eyeRenderPose[0].Orientation.z, eyeRenderPose[0].Orientation.w);
+
+ return orientation;
+}
+
+OVR::Vector3f* &OVRManager::GetPosition() const {
+
+ static ovrPosef eyeRenderPose[2];
+
+ ovrEyeType eye = hmd_device_->EyeRenderOrder[0];
+ eyeRenderPose[0] = ovrHmd_GetEyePose(hmd_device_, eye);
+
+ OVR::Vector3f* position = new OVR::Vector3f(eyeRenderPose[0].Position.x, eyeRenderPose[0].Position.y, eyeRenderPose[0].Position.z);
+
+ return position;
}
diff --git a/src/npvr/ovr_manager.h b/src/npvr/ovr_manager.h
index 6694375..28c843b 100644
--- a/src/npvr/ovr_manager.h
+++ b/src/npvr/ovr_manager.h
@@ -8,17 +8,15 @@
namespace npvr {
-class OVRManager: public OVR::MessageHandler {
+class OVRManager {
public:
static OVRManager *Instance();
bool DevicePresent() const;
- OVR::Quatf &GetOrientation() const;
- virtual void OnMessage(const OVR::Message &message);
+ OVR::Quatf* &GetOrientation() const;
+ OVR::Vector3f* &GetPosition() const;
private:
OVRManager();
- OVR::DeviceManager *device_manager_;
- OVR::HMDDevice *hmd_device_;
- OVR::SensorFusion *sensor_fusion_;
+ ovrHmd hmd_device_;
};
} // namespace npvr
diff --git a/src/npvr/vr_object.cpp b/src/npvr/vr_object.cpp
index 6ee1a51..a39d202 100644
--- a/src/npvr/vr_object.cpp
+++ b/src/npvr/vr_object.cpp
@@ -165,9 +165,13 @@ void VRObject::PollOculus(std::ostringstream& s) {
OVRManager *manager = OVRManager::Instance();
if (manager->DevicePresent()) {
s << "r,";
- OVR::Quatf o = manager->GetOrientation();
- s << o.x << "," << o.y << "," << o.z << "," << o.w;
- s << "|";
+ OVR::Quatf* o = manager->GetOrientation();
+ // Extended with the three position parameters! ==> Attention: Needs update from VR.js
+ OVR::Vector3f* pos = manager->GetPosition();
+ s << o->x << "," << o->y << "," << o->z << "," << o->w;
+ s << "," << pos->x << "," << pos->y << "," << pos->z;
+
+ s << "|";
}
}
diff --git a/third_party/gyp b/third_party/gyp
deleted file mode 160000
index 12d97ef..0000000
--- a/third_party/gyp
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 12d97efcb0d2cbe321ab6f050c2b2311e7048429