Main driver code for SteamVR driver provider.
More...
#include <cstring>
#include <thread>
#include "math/m_api.h"
#include "ovrd_log.hpp"
#include "openvr_driver.h"
#include "ovrd_interface.h"
#include <math.h>
#include <math/m_space.h>
#include "os/os_time.h"
#include "util/u_debug.h"
#include "util/u_device.h"
#include "util/u_builders.h"
#include "util/u_hand_tracking.h"
#include "xrt/xrt_space.h"
#include "xrt/xrt_system.h"
#include "xrt/xrt_defines.h"
#include "xrt/xrt_device.h"
#include "xrt/xrt_instance.h"
#include "bindings/b_generated_bindings.h"
#include "math/m_vec3.h"
|
#define | MODELNUM_LEN (XRT_DEVICE_NAME_LEN + 9) |
| When set, all controllers pretend to be Index controllers. More...
|
|
#define | OPENVR_BONE_COUNT 31 |
|
#define | OPENVR_BONE_COUNT 31 |
|
#define | NUM_XDEVS 16 |
|
|
static void | copy_vec3 (struct xrt_vec3 *from, double *to) |
|
static void | copy_quat (struct xrt_quat *from, vr::HmdQuaternion_t *to) |
|
static void | apply_pose (struct xrt_space_relation *rel, vr::DriverPose_t *m_pose) |
|
template<class T , class U > |
void | convert_quaternion (const T &p_quatA, U &p_quatB) |
|
xrt_quat | apply_bone_hand_transform (xrt_quat p_rot, xrt_hand hand) |
|
void | metacarpal_joints_to_bone_transform (struct xrt_hand_joint_set *hand_joint_set, vr::VRBoneTransform_t *out_bone_transforms, xrt_hand hand) |
|
void | flexion_joints_to_bone_transform (struct xrt_hand_joint_set *hand_joint_set, vr::VRBoneTransform_t *out_bone_transforms, xrt_hand hand) |
|
void | hand_joint_set_to_bone_transform (struct xrt_hand_joint_set hand_joint_set, vr::VRBoneTransform_t *out_bone_transforms, xrt_hand hand) |
|
static void | create_translation_rotation_matrix (struct xrt_pose *pose, struct vr::HmdMatrix34_t *res) |
|
static constexpr vr::HmdQuaternion_t | HmdQuaternion_Init (double w, double x, double y, double z) |
|
void | WatchdogThreadFunction () |
|
void * | ovrd_hmd_driver_impl (const char *pInterfaceName, int *pReturnCode) |
| Implementation of the HmdDriverFactory function. More...
|
|
◆ MODELNUM_LEN
#define MODELNUM_LEN (XRT_DEVICE_NAME_LEN + 9) |
When set, all controllers pretend to be Index controllers.
Provides best compatibility with legacy games due to steamvr's legacy binding for Index controllers, but input mapping may be incomplete or not ideal.
◆ metacarpal_joints_to_bone_transform()
void metacarpal_joints_to_bone_transform |
( |
struct xrt_hand_joint_set * |
hand_joint_set, |
|
|
vr::VRBoneTransform_t * |
out_bone_transforms, |
|
|
xrt_hand |
hand |
|
) |
| |
- if you try applying the metacarpal transforms without the magic quaternion, everything from the metacarpals onwards is rotated 90 degrees. In the neutral pose sample, all the metacarpals have a rotation relatively close to {w=0.5, x=0.5, y=-0.5, z=0.5} which is an Important Quaternion because it probably represents some 90 degree rotation. Maybe, and this was just a random guess, if I took the regular metacarpal orientations and rotated them by that quat, everything would work.