MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ compute_view_transform()

ViewTransform MayaFlux::Kinesis::compute_view_transform ( NavigationState state,
float  aspect 
)

Compute a ViewTransform from the current NavigationState.

Computes dt from state.last_tick, advances eye position by held movement flags scaled by move_speed * dt, updates last_tick, then constructs view and projection matrices.

Parameters
stateNavigation state (eye and last_tick mutated by this call)
aspectFramebuffer width / height
Returns
ViewTransform ready for push constant upload

Definition at line 23 of file NavigationState.cpp.

24{
25 const auto now = std::chrono::steady_clock::now();
26 const float dt = std::chrono::duration<float>(now - st.last_tick).count();
27 st.last_tick = now;
28
29 const glm::vec3 forward {
30 std::cos(st.pitch) * std::sin(st.yaw),
31 std::sin(st.pitch),
32 std::cos(st.pitch) * std::cos(st.yaw)
33 };
34 const glm::vec3 right = glm::normalize(glm::cross(forward, glm::vec3(0.0F, 1.0F, 0.0F)));
35
36 const float step = st.move_speed * dt;
37
38 if (st.forward_held)
39 st.eye += forward * step;
40 if (st.back_held)
41 st.eye -= forward * step;
42 if (st.left_held)
43 st.eye -= right * step;
44 if (st.right_held)
45 st.eye += right * step;
46 if (st.down_held)
47 st.eye -= glm::vec3(0.0F, 1.0F, 0.0F) * step;
48 if (st.up_held)
49 st.eye += glm::vec3(0.0F, 1.0F, 0.0F) * step;
50
51 return {
52 .view = glm::lookAt(st.eye, st.eye + forward, glm::vec3(0.0F, 1.0F, 0.0F)),
53 .projection = glm::perspective(st.fov_radians, aspect, st.near_plane, st.far_plane)
54 };
55}

References MayaFlux::Kinesis::NavigationState::back_held, MayaFlux::Kinesis::NavigationState::down_held, MayaFlux::Kinesis::NavigationState::eye, MayaFlux::Kinesis::NavigationState::far_plane, MayaFlux::Kinesis::NavigationState::forward_held, MayaFlux::Kinesis::NavigationState::fov_radians, MayaFlux::Kinesis::NavigationState::last_tick, MayaFlux::Kinesis::NavigationState::left_held, MayaFlux::Kinesis::NavigationState::move_speed, MayaFlux::Kinesis::NavigationState::near_plane, MayaFlux::Kinesis::NavigationState::pitch, MayaFlux::Kinesis::NavigationState::right_held, MayaFlux::Kinesis::NavigationState::up_held, and MayaFlux::Kinesis::NavigationState::yaw.

Referenced by MayaFlux::bind_viewport_preset().

+ Here is the caller graph for this function: