Cinder-VR: Initial Release

Hi Everyone,

Been a while since my last post…and that was on the old forums. Happy to be posting this on a shiny new forum!

Today (7/7) is the birthday of Cinder’s fearless leader, Andrew Bell. There’s no known history of any Cinder birthday traditions so in following with that - I’d like to wish him a “Happy Birthday!” along with introducing Cinder-VR:

Nothing says caring like C++.

VR is pretty hot right now - and it’s also fun to play with! About a month ago, we set out to consolidate VR functionality into one place and try to make it as accessible to Cinder users as much as possible. Poor @num3ric had to endure endless questions about the Oculus Rift :slight_smile: - hopefully he’ll forgive me one day. Starting with @num3ric’s Cinder-OculusRift Block the design was evolved to incorporate OpenVR for the HTC Vive.

Currently, OpenGL is the default and only supported render. We’re looking into making Vulkan possible in a sane way.

Cinder-VR will attempt to automatically detect which headset is present when it starts up. It has not been tested on a system with both plugged in. If someone has this config, please let us know how it turns out. :slight_smile:

What APIs are used?

  • Oculus Rift - Oculus SDK
  • HTC Vive - OpenVR (Rift doesn’t always play nice with OpenVR - so that combo is not recommended)

What controllers are supported?

  • Oculus Rift - Remote and Xbox controller (Touch will be added once it’s released)
  • HTC Vive - Vive Controllers

There were two primary design goals:

  1. Support major devices (Rift and Vive for now) that accessible to Cinder users
  2. Create common coordinate system between the different environments (Rift and Vive)

As far as coordinate systems go, the major things to know:

  • Device Coordinate System - coordinate system that’s local to the device (similar object space for those familiar with 3D packages)
  • Tracking Coordinate System - base coordinate system that’s used by the device to track its position.
  • World Coordinate System - coordinate system defined by an “origin” matrix applied to the Tracking Coordinate System to move the origin into a more accessible place.

The samples provide an idea of how all this comes together. More samples to come soon! @bantherewind has been talking one up.

Please check it out and let us know what you think! This is the initial release, so still very much a WIP. We welcome any feedback to improve the design so Cinder-VR becomes a solid VR solution taht works for Cinder users!

Thanks to @num3ric and @bantherewind for reviewing the code before it was initially release.

I’ll update with a cool screenshot soon.




One question, is GoogleVR on the road-map?

Once DayDream matures enough - we’ll take a look if it’s possible to integrate.

I don’t currently know enough about it to make any good guesses.


1 Like

Looks great Hai!
Clean code, full controller support and nice samples, that’s amazing!
Any plan to add audio at some point?

Thanks, Simon!

Audio and haptic feedback are on the list. Audio will probably require some help from Cinder’s resident audio experts.

1 Like

Extremely excited about this! Thanks so much for all of your hard work, Hai

Awesome, we just got our hands on a Rift - can’t wait, thanks! … and happy birthday Andrew!!

fantastic! cinder just got even more awesome !

will test it today at home (where i have a vive). cheers !

Tested on Vive, works fantastic! Can’t wait to dive in to VR projects with this.

Our Vive finally arrived today and I got to fire this up - worked perfectly right out of the box. Thanks for this Hai - one of the best and probably the most abstract birthday gift I’ve ever received :).


Awesome and timely! I’ll definitely be giving this a look…

Also related, some folks know this, some don’t, I left Intel and moved to HTC recently, so if anyone has Vive questions, technical or otherwise, let me know and I’ll do my best to get you an answer.

Just perused through the samples and some of the library code. This looks great! I can’t wait to jump in. Thanks for putting this out there, Hai. And happy belated birthday, Andrew!

hey, just arriving now. whatup!

UPDATE: Added a Hmd:::setLookAt( pos ) to allow for teleporting around in world space.

Works on both Rift and Vive!

More complex version of that function will come once I figure out why the rotation matrix is collapsing in on itself when another rotation on top.

Minor updates to Cinder-VR block. Added more mirroring options:

  • Distorted (already existed)
  • Undistorted
  • Left/Right Eye
  • Cyclops (HMD cnetered)

You can find these in the Teleport sample.



Left, Right and Cyclops all look kinda the same - so you get just one screenshot


He guys I’m new to vr but really like to dig in. Question is:
What to buy? Valve or oculus? Also does libcinder-be work with roomscale vr and the remote controllers that valve and the rift supplies?



1 Like

Hi everyone,
A quick question here - It has been asked before in this discourse with no answer. I have a HTC Vive and starting the view works fine and all, but what if I want to stop rendering to vive device (monitor only). endSession @ openvr causes cinder to crash. Any ideas on this topic?

Edit: Visual Studio outputs a warning that some files output same obj file - it makes a difference which (Context.cpp for example) file was being built last. Renaming \cinder\vr\context.cpp to \cinder\vr\icontext.cpp (controller, device manager too) resulted in a different obj to be build and endSession working properly. A quick patch.