ChristophHaag / SteamVR-OpenHMD

SteamVR plugin for using OpenHMD drivers in SteamVR
Boost Software License 1.0
195 stars 32 forks source link

rotate eyes properly for direct mode #58

Open ChristophHaag opened 3 years ago

ChristophHaag commented 3 years ago

With this, SteamVR should be able to use direct mode.

The actual rotation isn't well tested though, please someone test.

Possible issues:

ghost commented 3 years ago

EDITED: WVR2 eye transforms are fixed now. Folks please test with whatever headset(s) you have.

ChristophHaag commented 3 years ago

So if I remember correctly only the LG 360 actually has the hack with the rotated projection matrix. This PR extracts the display rotation from that rotated projection matrix. There is also an example for the WVR2 that sets the rotation directly.

More rotations that could be hardcoded can be found in monado https://gitlab.freedesktop.org/monado/monado/-/blob/master/src/xrt/drivers/ohmd/oh_device.c#L307

One thing that should be improved is to clarify whether left rotation means the display is physically built into the HMD rotated to the left and the software should render everything rotated to the right to compensate; or whether left rotation means that we just want to rotate the rendering to the left.

ghost commented 3 years ago

A reminder that the DK2 has the same quirk as WVR2. How do we want to deal with the list of quirks? OpenHMD sits at the driver layer, but SteamVR-OpenHMD is on the same level as Monado, so the quirk-handling responsibility is on this project.

One thing that should be improved is to clarify whether left rotation means the display is physically built into the HMD rotated to the left and the software should render everything rotated to the right to compensate; or whether left rotation means that we just want to rotate the rendering to the left.

I think that encapsulates the difficulty many people have with 3D math, or math in general.

TomateSoft commented 2 years ago

Hi Christoph, I'm currently testing using a Rift S under Linux with AMD GPU. In order to get Driver Direct Mode working I had to force a rotation of both eye to the left (using your code at #68, rotating right made it upside down).

ReazerDev commented 2 years ago

Hi, using this branch, I don't get any image on my Rift S. The display does turn on (I see a slightly gray image and not a completely black one). However, xrandr shows the display as disconnected. Setting non-desktop to 0 doesn't change anything, it doesn't even show up in my Settings. Using the master branch, the SteamVR Window is shown on one of my Monitors, xrandr says it's connected and after setting non-desktop to 0, I can see the Rift S Display in my Settings.

Using the monado-steamvr plugin, I do get an Image on my VR Display, but everything is quite choppy. So far, from what I can see on my monitor, this plugin is smooth, when turning my head.

(I am wearing my Headset in both cases)

thaytan commented 2 years ago

Hi, using this branch, I don't get any image on my Rift S.

I'm in the process of porting the Rift S driver to Monado. You might like to try my branch. I haven't tested SteamVR, but I think it should work. OpenXR apps render correctly.

https://gitlab.freedesktop.org/thaytan/monado/-/commits/dev-rift-s

ReazerDev commented 2 years ago

Hi, I created an Issue in your GitLab repo, so we don't spam this PR :)