@@ -1594,6 +1594,18 @@ static void handle_output_frame(struct wl_listener *listener, void *data)
|
|||||||
|
|
||||||
if (!wm->xr.available && !wm->renderer.first_frame) {
|
if (!wm->xr.available && !wm->renderer.first_frame) {
|
||||||
wm->renderer.camera.target = SphericalToVector3(wm->wm.pointer);
|
wm->renderer.camera.target = SphericalToVector3(wm->wm.pointer);
|
||||||
|
|
||||||
|
Vector3 forward = Vector3Normalize(Vector3Subtract(
|
||||||
|
wm->renderer.camera.target, wm->renderer.camera.position));
|
||||||
|
Vector3 worldUp = (Vector3) { 0, 1, 0 };
|
||||||
|
|
||||||
|
if (fabsf(Vector3DotProduct(forward, worldUp)) > 0.999f) {
|
||||||
|
worldUp = (Vector3) { 0, 0, 1 };
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 right = Vector3Normalize(Vector3CrossProduct(forward, worldUp));
|
||||||
|
wm->renderer.camera.up
|
||||||
|
= Vector3Normalize(Vector3CrossProduct(right, forward));
|
||||||
}
|
}
|
||||||
|
|
||||||
int const hud_size = wm->cman->cfg.displays.hud.size;
|
int const hud_size = wm->cman->cfg.displays.hud.size;
|
||||||
|
|||||||
Reference in New Issue
Block a user