reckfellENGINE

XRPose

Transform, velocities and flags for one tracked pose.

On this page
class XRPoseReckfellSharpInherits RefCounted

XRPose stores one named pose state. Name can be grip or aim; it is not a tracker name. A new pose has an Identity transform, zero velocities, an empty name, HasTrackingData=false and TrackingConfidence=None. Constructing it or editing fields does not connect a device.

Distinguish three spaces: Transform is raw provider data; GetAdjustedTransform scales position by WorldScale and applies the reference frame; world space additionally includes the gameplay XROrigin3D.GlobalTransform. GetAdjustedTransform includes no XRServer.WorldOrigin, changes no velocities and checks no tracking flag. Do not apply scale or origin twice.

This executed helper reads a world-transform copy. It creates no tracked Entity and does not assess tracking accuracy:

C#
using Reckfell;

public static class PoseToWorld
{
    // Borrowed pose/origin. Result is a value copy, not a tracked Entity.
    public static bool TryRead(XRPose pose, XROrigin3D origin, out Transform3D world)
    {
        world = Transform3D.Identity;
        if (pose is null || origin is null || !origin.IsInsideTree()
            || !pose.HasTrackingData) return false;
        world = origin.GlobalTransform * pose.GetAdjustedTransform();
        return true;
    }
}

A tracker’s GetPose returns shared state, not a snapshot. Do not dispose or mutate borrowed poses; copy values for storage. You own a separate instance created with new XRPose. High confidence and HasTrackingData are independent: setting one does not update the other. Coordinates remain accessible even when false.

Defaults, setters/getters, copies, position scaling, exclusion of gameplay origin from the adjusted transform and the helper were checked in the installed runtime. The test reference frame was Identity; composition order was reviewed in source, not through real recenter or headset use. Safe shared-pose reads: XRPositionalTracker.

Declarations checked against C# SDK 1.0.0. Expand a name to see declarations and documentation.

Constructors1

XRPoseConstructor
# XRPose
C#
public XRPose();

Creates a separate object: empty Name, Transform=Identity, zero velocities, HasTrackingData=false and TrackingConfidence=None. Creates no tracker entry and starts no tracking. You own an instance you create; borrowed tracker poses have a different lifetime.

Properties6

AngularVelocityProperty
# AngularVelocity
C#
public Vector3 AngularVelocity { get; set; }

Stored angular velocity, initially Vector3.Zero. Written separately from Transform, not derived from rotation. GetAdjustedTransform does not convert the velocity to gameplay space; do not assume it is automatically a world-space velocity.

HasTrackingDataProperty
# HasTrackingData
C#
public bool HasTrackingData { get; set; }

Tracking-availability flag, initially false. The setter changes only the flag: it clears no transform, velocities or confidence and checks no device. Do not edit provider-owned pose state from gameplay. Check this flag before using retained coordinates.

LinearVelocityProperty
# LinearVelocity
C#
public Vector3 LinearVelocity { get; set; }

Stored linear velocity, initially Vector3.Zero. The setter does not derive it from transforms or apply WorldScale/reference frame. GetAdjustedTransform does not convert this field either. The tracking provider defines its space and unit conventions.

NameProperty
# Name
C#
public StringName Name { get; set; }

Pose name, initially empty; for example grip or aim in tracker data. Not a tracker name or button action. The setter changes only the field: renaming the object does not rekey its XRPositionalTracker entry. Do not rename provider-owned poses.

TrackingConfidenceProperty
# TrackingConfidence
C#
public XRPose.TrackingConfidenceEnum TrackingConfidence { get; set; }

Provider confidence estimate, initially None. None, Low and High describe reported quality, but the setter checks no device and does not change HasTrackingData. High confidence is not a substitute for checking pose freshness.

TransformProperty
# Transform
C#
public Transform3D Transform { get; set; }

Raw pose transform in provider tracking space, initially Identity. The setter stores it without WorldScale, reference frame or gameplay origin. The getter returns a Transform3D value: editing the copy does not change the pose. A transform alone does not establish current tracking.

Methods13

GetAdjustedTransformTransform3D
# GetAdjustedTransform
C#
public Transform3D GetAdjustedTransform();

Returns a Transform copy: first multiplies only its position by XRServer.WorldScale, then left-multiplies by XRServer.GetReferenceFrame(). Includes neither XRServer.WorldOrigin nor the gameplay XROrigin3D.GlobalTransform. Changes no raw pose or velocities and checks no HasTrackingData. For world space apply origin.GlobalTransform to the result once.

Returns Transform3D

Copy after position scale and reference frame, excluding gameplay origin and tracking validation.

GetAngularVelocityVector3
# GetAngularVelocity
C#
public Vector3 GetAngularVelocity();

Returns the stored angular-velocity Vector3, initially zero. Derives no velocity from Transform and applies no reference frame.

Returns Vector3

Stored angular-velocity Vector3 without conversion.

GetHasTrackingDatabool
# GetHasTrackingData
C#
public bool GetHasTrackingData();

Returns the stored bool, initially false. Does not request a device update or inspect confidence.

Returns bool

Stored flag; initially false.

GetLinearVelocityVector3
# GetLinearVelocity
C#
public Vector3 GetLinearVelocity();

Returns the stored linear-velocity Vector3 without gameplay-space conversion. Initially zero; does not check tracking validity.

Returns Vector3

Stored linear-velocity Vector3 without conversion.

GetNameStringName
# GetName
C#
public StringName GetName();

Returns the stored pose name, initially empty. Not the left_hand/right_hand tracker name.

Returns StringName

Pose name, initially empty.

GetTrackingConfidenceXRPose.TrackingConfidenceEnum
# GetTrackingConfidence
C#
public XRPose.TrackingConfidenceEnum GetTrackingConfidence();

Returns the stored estimate, initially None. Does not replace HasTrackingData or measure quality independently.

Returns XRPose.TrackingConfidenceEnum

Stored confidence estimate, initially None.

GetTransformTransform3D
# GetTransform
C#
public Transform3D GetTransform();

Returns a raw Transform copy in tracking space, without scale or gameplay origin. Retained coordinates remain accessible when HasTrackingData=false.

Returns Transform3D

Raw Transform3D value; not an Entity world transform.

SetAngularVelocityvoid
# SetAngularVelocity
C#
public void SetAngularVelocity(Vector3 velocity);

Stored angular velocity, initially Vector3.Zero. Written separately from Transform, not derived from rotation. GetAdjustedTransform does not convert the velocity to gameplay space; do not assume it is automatically a world-space velocity.

Parameters
NameTypeDefault
velocityVector3—
velocity

Angular-velocity Vector3 in provider conventions, without automatic conversion.

SetHasTrackingDatavoid
# SetHasTrackingData
C#
public void SetHasTrackingData(bool hasTrackingData);

Tracking-availability flag, initially false. The setter changes only the flag: it clears no transform, velocities or confidence and checks no device. Do not edit provider-owned pose state from gameplay. Check this flag before using retained coordinates.

Parameters
NameTypeDefault
hasTrackingDatabool—
hasTrackingData

New data-availability flag; clears no other fields and checks no device.

SetLinearVelocityvoid
# SetLinearVelocity
C#
public void SetLinearVelocity(Vector3 velocity);

Stored linear velocity, initially Vector3.Zero. The setter does not derive it from transforms or apply WorldScale/reference frame. GetAdjustedTransform does not convert this field either. The tracking provider defines its space and unit conventions.

Parameters
NameTypeDefault
velocityVector3—
velocity

Linear-velocity Vector3 in provider conventions, without automatic conversion.

SetNamevoid
# SetName
C#
public void SetName(StringName name);

Pose name, initially empty; for example grip or aim in tracker data. Not a tracker name or button action. The setter changes only the field: renaming the object does not rekey its XRPositionalTracker entry. Do not rename provider-owned poses.

Parameters
NameTypeDefault
nameStringName—
name

Pose name in provider data; changing it does not rekey a tracker entry.

SetTrackingConfidencevoid
# SetTrackingConfidence
C#
public void SetTrackingConfidence(XRPose.TrackingConfidenceEnum trackingConfidence);

Provider confidence estimate, initially None. None, Low and High describe reported quality, but the setter checks no device and does not change HasTrackingData. High confidence is not a substitute for checking pose freshness.

Parameters
NameTypeDefault
trackingConfidenceXRPose.TrackingConfidenceEnum—
trackingConfidence

None, Low or High; changing the estimate does not enable tracking.

SetTransformvoid
# SetTransform
C#
public void SetTransform(Transform3D transform);

Raw pose transform in provider tracking space, initially Identity. The setter stores it without WorldScale, reference frame or gameplay origin. The getter returns a Transform3D value: editing the copy does not change the pose. A transform alone does not establish current tracking.

Parameters
NameTypeDefault
transformTransform3D—
transform

Raw tracking-space transform; add gameplay origin separately.

XRPose.TrackingConfidenceEnum

ValueDescription
High = 2

Tracking information is considered accurate and up to date.

Low = 1

Tracking information may be inaccurate or estimated. For example, with inside out tracking this would indicate a controller may be (partially) obscured.

None = 0

No tracking information is available for this pose.

Reckfell Engine documentationBack to top ↑
QUICK LINKSGetting startedEntity hierarchyC# & .NET 10Scenes and prefabs
Reckfell guides and full API K
reckfellENGINE
RECKFELL ACCOUNT

Sign in

Sign in to your Reckfell account.

One account for the entire Reckfell platform.