Skip to content

Commit ee63815

Browse files
authored
Place the spinning cube in front of user using LOCAL reference space. (#59)
1 parent dd4f866 commit ee63815

File tree

1 file changed

+23
-5
lines changed

1 file changed

+23
-5
lines changed

samples/BasicXrApp/OpenXrProgram.cpp

+23-5
Original file line numberDiff line numberDiff line change
@@ -674,24 +674,42 @@ namespace {
674674
return swapchainImageIndex;
675675
}
676676

677-
void UpdateSpinningCube(XrTime predictedDisplayTime) {
678-
if (!m_mainCubeIndex) {
677+
void InitializeSpinningCube(XrTime predictedDisplayTime) {
678+
auto createReferenceSpace = [session = m_session.Get()](XrReferenceSpaceType referenceSpaceType, XrPosef poseInReferenceSpace) {
679+
xr::SpaceHandle space;
680+
XrReferenceSpaceCreateInfo createInfo{XR_TYPE_REFERENCE_SPACE_CREATE_INFO};
681+
createInfo.referenceSpaceType = referenceSpaceType;
682+
createInfo.poseInReferenceSpace = poseInReferenceSpace;
683+
CHECK_XRCMD(xrCreateReferenceSpace(session, &createInfo, space.Put()));
684+
return space;
685+
};
686+
687+
{
679688
// Initialize a big cube 1 meter in front of user.
680-
Hologram hologram = CreateHologram(xr::math::Pose::Translation({0, 0, -1}), predictedDisplayTime);
689+
Hologram hologram{};
681690
hologram.Cube.Scale = {0.25f, 0.25f, 0.25f};
691+
hologram.Cube.Space = createReferenceSpace(XR_REFERENCE_SPACE_TYPE_LOCAL, xr::math::Pose::Translation({0, 0, -1}));
682692
m_holograms.push_back(std::move(hologram));
683693
m_mainCubeIndex = (uint32_t)m_holograms.size() - 1;
684694
}
685695

686-
if (!m_spinningCubeIndex) {
696+
{
687697
// Initialize a small cube and remember the time when animation is started.
688-
Hologram hologram = CreateHologram(xr::math::Pose::Translation({0, 0, -1}), predictedDisplayTime);
698+
Hologram hologram{};
689699
hologram.Cube.Scale = {0.1f, 0.1f, 0.1f};
700+
hologram.Cube.Space = createReferenceSpace(XR_REFERENCE_SPACE_TYPE_LOCAL, xr::math::Pose::Translation({0, 0, -1}));
690701
m_holograms.push_back(std::move(hologram));
691702
m_spinningCubeIndex = (uint32_t)m_holograms.size() - 1;
692703

693704
m_spinningCubeStartTime = predictedDisplayTime;
694705
}
706+
}
707+
708+
void UpdateSpinningCube(XrTime predictedDisplayTime) {
709+
if (!m_mainCubeIndex || !m_spinningCubeIndex) {
710+
// Deferred initialization of spinning cubes so they appear at right place for the first frame.
711+
InitializeSpinningCube(predictedDisplayTime);
712+
}
695713

696714
// Pause spinning cube animation when app loses 3D focus
697715
if (IsSessionFocused()) {

0 commit comments

Comments
 (0)