opengl - 如何反转 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 目标。但我想答案应该与语言无关。
解决方案
这look_at_dir
很简单,假设它遵循与 glm 相同的矩阵布局,第三行是您的查看方向。
眼睛有点困难。
如果仰视和向上方向与世界轴共线,则最后一列的前三个值是眼睛。
如果它们不是共线的,则该列的眼睛位置坐标以由注视方向、注视方向与向上向量的叉积的向量以及这两个向量的叉积定义的正交基表示。
该基的上向量是第二行,侧向量是第一行,因此要获得眼睛,您需要根据您的基来表示该基,然后转换眼睛位置的坐标。
推荐阅读
- crystal-reports - Crystal Reports - 创建日历
- ios - 如何使用 TypedRowControllerType 在 Eureka 4.3 中创建自定义演示者行?
- r - R:data.table 在实际存在时返回一个空行
- java - 设置 HorizontalAlignment 不能完全右对齐 PageXofYBuilder
- linux-kernel - Puppeteer 沙箱:没有可用的沙箱
- swift - 为 Swift 程序中启动的命令设置终端环境
- php - Symfony2 - 已注册自定义 DQL 函数但不起作用
- typescript - ts-jest - 运行 jest 时从类型 (.d.ts) 中声明 const 值未定义
- ssl - 自定义域上的 Heroku 证书不起作用
- codeigniter - CodeIgniter 3.1.9 表单验证