I've done some experiments with my PSVR headset and put together a Cinder-PSVR block, and I also have a Cinder-VR fork that integrates the PSVR block.
It uses libusb-1.0 as the usb driver stuff under the hood, so it should work across all platforms.
There is one known issues right now that the vr mode video doesn't play on my MacBook air - only shows a black screen in the headset but fine on the external monitor - guess it must be something to do with pixel format (which for radeon cards it need to be set to RGB4:4:4), but have yet figured exactly why.
And another little math thing that I'd like to ask for help:
the gyro sensor data comes out from PSVR's axis is twisted: Yaw points to x and Pitch points to y.
Right now I convert the quaternion to euler angles and convert it back which works (see the code below):
//cant figure out the math to swap x and y axis in quaternion, doing with euler angles
auto tmp = glm::eulerAngles(quat);
return glm::normalize(glm::quat_cast(glm::eulerAngleYXZ(-tmp.x, -tmp.y, -tmp.z)));
but i'd like to do this within the quaternion to avoid locks.
It is not simply a hand coordinates change - which I guess is for yaw and roll.
I flipped x and y in quat and tried every +/- combination but none of them was correct.
So if someone could shed some lights on this it would be really helpful.