Actual gopherVR
===============
As most of you know, GopherVR is a gopher client that lets you browse
gopherspace in 3d - it's been around forever, runs on Irix too, and
while it's fun- it's not actual Virtual Reality.
So I finally figured out how to browser gopherspace with actual VR
goggles - It took some doing because the state of VR on linux is a
complete mess right now.
I have a valve index which I got a while ago to mess with vr coding,
and whilst there are open toolkits such as openxr/monado/etc... they
are in various states of brokenness and are not seeing a lot of dev
work. WebXR doesn't work at all in any of the browsers, there's
basically no way to play 360 video's on Linux, etc,...
SteamVR somewhat works, but it's still a bugridden mess, and it too
won't play video.
One thing that does work is vr-video-player, which can use steamvr
via their openvr library. The name is a bit of a misnomer- because it
isn't really a video player. It's more of a 'make-a-window-vr-ish'
type thing. You pass it an xorg window ID, and it will present that
window's content in VR, complete with head-tracking and everything.
So, for 360 video, you'd play it in mplayer or vlc or whatever, then
pass the video player window ID to vr-video-player and then it would
cubemap it so it all looks proper 3d in the goggles. It's all a bit
hacky.
vr-video-player has various cli options to map the captured window's
content in various different ways, --sphere, --sphere360, --flat, etc
One option caught my eye:
--plane : View the window as a slightly curved screen.
This is recommended for non-stereoscopic content
Non-stereoscopic content, you say? I tried it with a terminal window
and sure enough, it was usable in VR! Now i can use phetch or
whatever favorite gopher client and browse gopherspace like a real
cyberpunk! :P
http://www.linkerror.com/stuff/vrbaby.jpg
Getting vr-video-player to compile was also a fun mess.
It depends on openvr, but openvr is not a package in my distro- nor
does it even compile to anything remotely installable for me when I
grab the latest master from git. (it depends on a corevr folder which
doesn't exist anywhere in their repo, nor can i find anything on that
might contain it after lots of googling around) Thankfully steam
comes with a pre-compiled lib out of the box, so we can get away
with some build hackery and use the steam-bundled lib, and then just
the headers from the git repo.
Here's the changes i made:
diff --git a/build.sh b/build.sh
index cacabdc..27588ad 100755
--- a/build.sh
+++ b/build.sh
@@ -1,8 +1,8 @@
#!/bin/sh -e
-dependencies="glm glew sdl2 openvr x11 xcomposite xfixes"
-includes=$(pkg-config --cflags $dependencies)
-libs=$(pkg-config --libs $dependencies)
-gcc -c src/window_texture.c -O2 $includes
-g++ -c src/main.cpp -O2 $includes
-g++ -o vr-video-player window_texture.o main.o -s $libs
+dependencies="glm glew sdl2 x11 xcomposite xfixes"
+includes="$(pkg-config --cflags $dependencies) -I$HOME/src/openvr/headers"
+libs="$(pkg-config --libs $dependencies) -lopenvr_api -L$HOME/.local/share/Steam/steamapps/common/SteamVR/bin/linux64/"
+gcc -ggdb -O0 -c src/window_texture.c $includes
+g++ -ggdb -O0 -c src/main.cpp $includes
+g++ -ggdb -O0 -o vr-video-player window_texture.o main.o -s $libs
Then after compiling you'll have to set your LD_LIBRARY_PATH to the
folder containing the libopenvr_api.so in order to run the executable
YMMV of course, since the steam-bundled lib and the headers from git
would eventually diverge- i'd imagine. I guess this hacked-together
mess puts the /punk/ in cyberpunk :P
It'd be nice if non-windows VR could get more developer attention
though.
Oh oh oh, and because we can swallow any window into VR now, we can
run gopherVR in VR! Finally - all dreams come true eventually :)
Other random idea: Run an xorg xephyr window (yo dawg I heard you
like xorg, so i put xorg in your xorg so you can xorg while you
xorg) - and then capture that - now you've got the full desktop in
vr
Here's a little video of a direct capture of phetch running in
cool-old-term running in vr-video-player (that's a mouthful):
http://www.linkerror.com/stuff/vrgopher.webm