首页 > 解决方案 > 如何反转 3D look_at 函数?

问题描述

我正在尝试从预定义的相机过渡到自由观看模式。我有从glTF数据中4x4读取的视图矩阵。我认为这些与函数返回的内容相同。look_at

我需要完成转换是从 4x4 视图矩阵中提取eye和值:look_at_dir

// Return (eye, look_at_dir)
decode(view_matrix: Matrix4<f32>) -> (Point3<f32>, Vector3<f32>)

我正在使用 Rust、gltf crate、cgmath crate 并编译为 wasm 目标。但我想答案应该与语言无关。

标签: openglmatrixrust3dcamera

解决方案


look_at_dir很简单,假设它遵循与 glm 相同的矩阵布局,第三行是您的查看方向。

眼睛有点困难。

如果仰视和向上方向与世界轴共线,则最后一列的前三个值是眼睛。

如果它们不是共线的,则该列的眼睛位置坐标以由注视方向、注视方向与向上向量的叉积的向量以及这两个向量的叉积定义的正交基表示。

该基的上向量是第二行,侧向量是第一行,因此要获得眼睛,您需要根据您的基来表示该基,然后转换眼睛位置的坐标。


推荐阅读