in body-tracking-samples/sample_helper_libs/window_controller_3d/WindowController3d.cpp [253:313]
void WindowController3d::RenderScene(ViewControl& viewControl, Viewport viewport)
{
// Assign viewport to viewControl.
viewControl.SetViewport(viewport);
// Change view port
glViewport(viewport.x, viewport.y, viewport.width, viewport.height);
// Update view/projection matrix
linmath::mat4x4 projection;
linmath::mat4x4 view;
viewControl.GetPerspectiveMatrix(projection);
viewControl.GetViewMatrix(view);
UpdateRenderersViewProjection(view, projection);
if (m_enableFloorRendering)
{
m_floorRenderer.Render();
}
if (m_skeletonRenderMode == SkeletonRenderMode::SkeletonOverlayWithJointFrame)
{
m_skeletonRenderer.EnableJointCoordinateAxes(true);
m_skeletonRenderer.EnableSkeletons(true);
}
else
{
m_skeletonRenderer.EnableJointCoordinateAxes(false);
m_skeletonRenderer.EnableSkeletons(true);
}
if (m_skeletonRenderMode == SkeletonRenderMode::SkeletonOverlay ||
m_skeletonRenderMode == SkeletonRenderMode::SkeletonOverlayWithJointFrame)
{
m_pointCloudRenderer.Render(viewport.width, viewport.height);
glClear(GL_DEPTH_BUFFER_BIT);
m_skeletonRenderer.Render();
}
else
{
m_skeletonRenderer.Render();
m_pointCloudRenderer.Render(viewport.width, viewport.height);
}
// Render Camera Pivot Point when interacting with the view control.
const bool ctrl = glfwGetKey(m_window, GLFW_KEY_LEFT_CONTROL);
if (m_cameraPivotPointRenderCount > 0 || m_mouseButtonLeftPressed || m_mouseButtonRightPressed || ctrl)
{
m_cameraPivotPointRenderCount = std::max(0, m_cameraPivotPointRenderCount - 1);
vec3 targetPos;
m_viewControl.GetTargetPosition(targetPos);
// Render Camera Pivot Point the shape of a joint, but red.
vec4 red = { 1.0f, 0.0f, 0.0f, 1.0f };
m_skeletonRenderer.RenderJoint(targetPos, red);
}
}