WVR_GetTrackerPoseState¶
-
WVR_EXPORT WVR_Result WVR_GetTrackerPoseState(WVR_TrackerId trackerId, WVR_PoseOriginModel originModel, uint32_t predictedMilliSec, WVR_PoseState_t * poseState)
Function to get the pose of the tracker device with or without prediction.
Recommend calling this get tracker pose API just after WVR_GetSyncPose to make sure tracker model moving smooth.
- Version
- API Level 8
- Parameters
trackerId
: Indicates what id of the tracker device. (Refer to WVR_TrackerId.)originModel
: Specify the tracking universe of the origin tracking model. (Refer to WVR_PoseOriginModel.)predictedMilliSec
: Number of milliseconds from now to predict poses for. Positive numbers are in the future. Pass 0 to get the state at the instant the function is called.poseState
: Obtain the pose data. (Refer to WVR_PoseState.)
- Return Value
WVR_Success
: Get the pose of the tracker successfully.Others
: means failure. (Refer to WVR_Result.)
Note
- Parameter predictedMilliSec can determine the prediction time of tracker pose. (Supported on SDK 4.4.0 or later.)
- If parameter predictedMilliSec is set as 0, the prediction time will be aligned with prediction time of HMD pose.
- Developers can turn on/off prediction feature through function WVR_SetPosePredictEnabled (with parameter WVR_DeviceType_Tracker).
How to use¶
Here is an example for the function:
- Header & global variables
#include <wvr/wvr.h> // for enum WVR_SupportedFeature
#include <wvr/wvr_events.h>
#include <wvr/wvr_tracker.h>
#include <wvr/wvr_types.h>
bool gRunningTR = false;
// Global variable for device capabilities of WVR_TrackerId_0
WVR_TrackerCapabilities_t gCapabilitiesId0;
- Start tracker feature first if it has not been started yet. (See also WVR Supported Features)
- And (Timing 1 - After starting tracker feature successfully) use function WVR_GetTrackerCapabilities to get tracker capabilities to check whether the pose tracking features (capability supportsOrientationTracking, supportsPositionTracking) are supported or not.
if (WVR_GetSupportedFeatures() & WVR_SupportedFeature_Tracker) { // the tracker feature is supported or not
WVR_Result res = WVR_StartTracker();
if (res == WVR_Success) gRunningTR = true;
}
// Timing 1: Update the tracker capabilities if the tracker device has been connected before.
if (gRunningTR && WVR_IsTrackerConnected(WVR_TrackerId_0)) {
WVR_Result ret = WVR_GetTrackerCapabilities(event.tracker.trackerId, &gCapabilitiesId0);
// Needs gCapabilitiesId0.supportsOrientationTracking, gCapabilitiesId0.supportsPositionTracking
}
- (Timing 2 - When receiving event WVR_EventType_TrackerConnected) Use function WVR_GetTrackerCapabilities to get tracker capabilities to check whether the pose tracking features (capability supportsOrientationTracking, supportsPositionTracking) are supported or not.
Note
- If capability supportsOrientationTracking is true, the tracker pose (obtained from WVR_GetTrackerPoseState) supports rotation.
- If capability supportsPositionTracking is true, the tracker pose (obtained from WVR_GetTrackerPoseState) supports position.
void ProcessEvent() {
WVR_Event_t event;
while(WVR_PollEventQueue(&event)) {
switch (event.common.type) {
/* Timing 2: Update tracker capabilities when tracker device has just been connected.*/
case WVR_EventType_TrackerConnected:
{
if (gRunningTR && event.tracker.trackerId == WVR_TrackerId_0) {
WVR_Result ret = WVR_GetTrackerCapabilities(event.tracker.trackerId, &gCapabilitiesId0);
LOGI("Tracker capabilities of TrackerId_%d: ret: %d, capabilities: %d, %d, %d, %d, %d, %d",
event.tracker.trackerId, ret,
gCapabilitiesId0.supportsOrientationTracking,
gCapabilitiesId0.supportsPositionTracking,
gCapabilitiesId0.supportsInputDevice,
gCapabilitiesId0.supportsHapticVibration,
gCapabilitiesId0.supportsBatteryLevel,
gCapabilitiesId0.supportsExtendedData);
}
}
break;
default:
break;
}
}
}
- Use function WVR_GetTrackerPoseState to get tracker pose continuously.
WVR_PoseState_t mPose;
uint32_t predictedMS = 0; // aligned with prediction time of HMD pose
WVR_Result ret = WVR_Error_SystemInvalid;
while(1) {
if (gRunningTR &&
WVR_IsTrackerConnected(WVR_TrackerId_0) &&
(gCapabilitiesId0.supportsOrientationTracking || gCapabilitiesId0.supportsPositionTracking)) {
ret = WVR_GetTrackerPoseState(WVR_TrackerId_0, WVR_PoseOriginModel_OriginOnGround, predictedMS, &mPose);
if (ret == WVR_Success && mPose.isValidPose) {
// Then the pose data in mPose would be valid.
}
}
}