2012-12-12 64 views
5

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

我现在的理解是,我需要计算摄像机空间向量,其中

N =视点 - LOOKAT

U =向上(0,1,0)×N(标准化)

v = n x u

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

回答

3

让我们假设:

  • 眼位Ë =(e_x,E_Y,e_z),
  • 观察方向d =(D_X,d_y,d_z)
  • Up-Vector is UP =(up_x,up_y,up_z)

现在首先构造一个标准正交帧:

  • R = DX UP
  • U = RXD
  • 现在正常化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_R * M_T
  • | 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 |
+0

顺便说一句。你在文章中提到的矩阵对应于(M_R)^ - 1 =(M_R)^ T在我的文章中,是从凸轮坐标到全球坐标的逆向变换。 – Dirk

+0

非常感谢!我一直坚持这一点,你的解释非常明确,易于遵循。 +1 – Freddy

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| 
+0

D_z中的否定取决于系统是使用右手还是左手的规则。 OpenGL使用右手系统,这就是为什么你必须修改你的矩阵(即在右手屏幕中负z点进入屏幕) –

相关问题