世界空间到相机空间

时间:2012-12-12 03:55:29

标签: math matrix 3d

我对如何将世界空间坐标转换为相机坐标感到困惑。

我目前的理解是我需要计算相机空间矢量

n = eyepoint - lookat

u = up(0,1,0)X n(标准化)

v = n X u

然后我有了< U,V,N>我会简单地将每个点乘以吗?

2 个答案:

答案 0 :(得分:4)

让我们假设:

  • 眼睛位置 E =(e_x,e_y,e_z),
  • 查看方向 D =(d_x,d_y,d_z)
  • Up-Vector UP =(up_x,up_y,up_z)

现在首先构建一个标准正交框架:

  • R = D X UP
  • U = R X D
  • 现在将D,R,U标准化,你有一个相机的正交框架(D,R,U)

为了将全局坐标系转换为凸轮坐标系,您可以应用以下矩阵 M_R

  
      
  • | R_x,R_y,R_z,0 |
  •   
  • | U_x,U_y,U_z,0 |
  •   
  • | -D_x,-D_y,-D_z,0 |
  •   
  • | 0.0,0.0,0.0,1.0 |
  •   

如果您的摄像头未定位于全局原点,您还必须应用翻译 M_T

  
      
  • | 1,0,0,-e_x |
  •   
  • | 0,1,0,-e_y |
  •   
  • | 0,0,1,-e_z |
  •   
  • | 0,0,0,1 |
  •   

最后,从全局到凸轮坐标的完整转换矩阵是:

  • M = M_R * M_T
  
      
  • | R_x,R_y,R_z,(R dot -E)|
  •   
  • | U_x,U_y,U_z,(U点-E)|
  •   
  • | -D_x,-D_y,-D_z,(D dot E)|
  •   
  • | 0.0,0.0,0.0,1.0 |
  •   

答案 1 :(得分:0)

我认为以前的帖子中有错误

这个矩阵

| R_x, R_y, R_z, (R dot -E) |
| U_x, U_y, U_z, (U dot -E) |
| -D_x, -D_y, D_z, (D dot E)|
| 0.0, 0.0, 0.0, 1.0|

应该是(我在openGL中测试,这个是正确的)

| R_x, R_y, R_z, (R dot -E) |
| U_x, U_y, U_z, (U dot -E) |
| -D_x, -D_y, -D_z, (D dot E)|
| 0.0, 0.0, 0.0, 1.0|