OpenFrames
Classes | Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
OpenFrames::OpenVRDevice Class Reference

Represents data needed to use an OpenVR-supported HMD. More...

#include <OpenVRDevice.hpp>

Inheritance diagram for OpenFrames::OpenVRDevice:

Classes

class  DeviceModel
 Encapsulates an OpenVR device's model. More...
 
class  DeviceModelEventCallback
 Event callback that shows/hides a VR controller's laser when its trigger is pressed. More...
 
class  LaserModel
 Encapsulates the laser attached to OpenVR devices (usually controllers). More...
 

Public Types

enum  DeviceClass { NONE = 0, HMD = 1, BASESTATION = 2, CONTROLLER = 3 }
 

Public Member Functions

 OpenVRDevice (double worldUnitsPerMeter, double userHeight)
 
bool initVR ()
 
void shutdownVR ()
 
void getRecommendedTextureSize (int &w, int &h) const
 
bool isInitialized () const
 
osg::MatrixTransform * getDeviceRenderModels () const
 
unsigned int getNumDeviceModels () const
 
const DeviceModelgetDeviceModel (unsigned int id) const
 
void updateDeviceModels ()
 
const osg::Matrixd & getHMDPoseMatrix () const
 
void updateProjectionMatrices ()
 
osg::Matrixd & getRightEyeProjectionMatrix ()
 
osg::Matrixd & getLeftEyeProjectionMatrix ()
 
osg::Matrixd & getCenterProjectionMatrix ()
 
osg::Vec3d & getRightEyeViewOffset ()
 
osg::Vec3d & getLeftEyeViewOffset ()
 
osg::Vec3d & getCenterViewOffset ()
 
void waitGetPoses ()
 
void computeDeviceTransforms ()
 
void setWorldUnitsPerMeter (const double &worldUnitsPerMeter)
 
double getWorldUnitsPerMeter () const
 
void setWorldUnitsPerMeterLimits (const double &minWorldUnitsPerMeter, const double &maxWorldUnitsPerMeter)
 
void getWorldUnitsPerMeterLimits (double &minWorldUnitsPerMeter, double &maxWorldUnitsPerMeter) const
 
void setUserHeight (double userHeight)
 
double getUserHeight () const
 
osg::MatrixTransform * getGroundPlane ()
 
void submitFrame (GLuint rightEyeTexName, GLuint leftEyeTexName)
 
bool pollNextEvent (OpenVREvent *event)
 
vr::IVRSystem * getVRSystem () const
 

Protected Types

typedef std::map< std::string, osg::ref_ptr< osg::Geode > > DeviceGeodeMap
 
typedef std::vector< DeviceModelDeviceModelVector
 TODO: Make this a vector of pointers, then DeviceModel can be subclassed. More...
 

Protected Member Functions

void updateViewOffsets ()
 
void createDeviceRenderModels ()
 
void setupRenderModelForTrackedDevice (uint32_t deviceID)
 

Protected Attributes

double _worldUnitsPerMeter
 
double _minWorldUnitsPerMeter
 
double _maxWorldUnitsPerMeter
 
double _userHeight
 
int _width
 
int _height
 
bool _isInitialized
 
vr::IVRSystem * _vrSystem
 
vr::IVRRenderModels * _vrRenderModels
 
DeviceGeodeMap _deviceNameToGeode
 
DeviceModelVector _deviceIDToModel
 
osg::ref_ptr< osg::MatrixTransform > _deviceModels
 
osg::ref_ptr< osg::MatrixTransform > _controllerMidpoint
 
osg::ref_ptr< osg::MatrixTransform > _roomGround
 
osg::Matrixd _rightEyeProj
 
osg::Matrixd _leftEyeProj
 
osg::Matrixd _centerProj
 
osg::Vec3d _rightEyeViewOffset
 
osg::Vec3d _leftEyeViewOffset
 
osg::Vec3d _centerViewOffset
 
osg::Vec3d _rightEyeViewOffsetRaw
 
osg::Vec3d _leftEyeViewOffsetRaw
 
osg::Vec3d _centerViewOffsetRaw
 

Detailed Description

Represents data needed to use an OpenVR-supported HMD.

Member Typedef Documentation

◆ DeviceGeodeMap

typedef std::map<std::string, osg::ref_ptr<osg::Geode> > OpenFrames::OpenVRDevice::DeviceGeodeMap
protected

Map between a device's OpenVR name and its OSG render model

◆ DeviceModelVector

TODO: Make this a vector of pointers, then DeviceModel can be subclassed.

Vector of each device's rendering data indexed by its OpenVR id

Member Enumeration Documentation

◆ DeviceClass

An OpenVR device's class

Constructor & Destructor Documentation

◆ OpenVRDevice()

OpenFrames::OpenVRDevice::OpenVRDevice ( double  worldUnitsPerMeter,
double  userHeight 
)

Create a new OpenVR device, specifying relationship between world units and real-world meters, and the user height in meters.

Member Function Documentation

◆ createDeviceRenderModels()

void OpenFrames::OpenVRDevice::createDeviceRenderModels ( )
protected

Create the render models for each OpenVR device and misc UI elements

◆ getDeviceRenderModels()

osg::MatrixTransform* OpenFrames::OpenVRDevice::getDeviceRenderModels ( ) const
inline

Get render models for devices

◆ getGroundPlane()

osg::MatrixTransform* OpenFrames::OpenVRDevice::getGroundPlane ( )
inline

Get the ground plane

◆ getHMDPoseMatrix()

const osg::Matrixd& OpenFrames::OpenVRDevice::getHMDPoseMatrix ( ) const
inline

Get the HMD pose matrix, in world units

◆ getNumDeviceModels()

unsigned int OpenFrames::OpenVRDevice::getNumDeviceModels ( ) const
inline

Get device models

◆ getRecommendedTextureSize()

void OpenFrames::OpenVRDevice::getRecommendedTextureSize ( int &  w,
int &  h 
) const
inline

Get the per-eye texture size recommended by OpenVR

◆ getRightEyeViewOffset()

osg::Vec3d& OpenFrames::OpenVRDevice::getRightEyeViewOffset ( )
inline

Get the per-eye world offset vector, in world units (see worldUnitsPerMeter)

◆ getVRSystem()

vr::IVRSystem* OpenFrames::OpenVRDevice::getVRSystem ( ) const
inline

Get the OpenVR subsystem

◆ initVR()

bool OpenFrames::OpenVRDevice::initVR ( )

Initialize OpenVR and connect to the HMD Return status: whether OpenVR was initialized

◆ isInitialized()

bool OpenFrames::OpenVRDevice::isInitialized ( ) const
inline

Get whether OpenVR has been initialized

◆ pollNextEvent()

bool OpenFrames::OpenVRDevice::pollNextEvent ( OpenVREvent event)

Get the next OpenVR event

◆ setupRenderModelForTrackedDevice()

void OpenFrames::OpenVRDevice::setupRenderModelForTrackedDevice ( uint32_t  deviceID)
protected

Load a device's render model by its OpenVR ID

◆ setUserHeight()

void OpenFrames::OpenVRDevice::setUserHeight ( double  userHeight)
inline

Get/set the user height in meters

◆ setWorldUnitsPerMeter()

void OpenFrames::OpenVRDevice::setWorldUnitsPerMeter ( const double &  worldUnitsPerMeter)

Get/set the world units per meter ratio and its limits

◆ submitFrame()

void OpenFrames::OpenVRDevice::submitFrame ( GLuint  rightEyeTexName,
GLuint  leftEyeTexName 
)

Submits the latest rendered eye textures to OpenVR

◆ updateDeviceModels()

void OpenFrames::OpenVRDevice::updateDeviceModels ( )

Update all device models, e.g. controller states

◆ updateProjectionMatrices()

void OpenFrames::OpenVRDevice::updateProjectionMatrices ( )

Update the per-eye projection matrix

◆ updateViewOffsets()

void OpenFrames::OpenVRDevice::updateViewOffsets ( )
protected

Update the per-eye raw view offset vector, in OpenVR units [meters]

◆ waitGetPoses()

void OpenFrames::OpenVRDevice::waitGetPoses ( )

Update raw poses (in OpenVR units [meters]) of all VR devices, and wait for the signal to start the next frame.


The documentation for this class was generated from the following file: