我很困惑如何将世界空间坐标转换为相机坐标。世界空间相机空间
我现在的理解是,我需要计算摄像机空间向量,其中
N =视点 - LOOKAT
U =向上(0,1,0)×N(标准化)
v = n x u
然后,一旦我有< U,V,N>我会简单地乘以每个点?
我很困惑如何将世界空间坐标转换为相机坐标。世界空间相机空间
我现在的理解是,我需要计算摄像机空间向量,其中
N =视点 - LOOKAT
U =向上(0,1,0)×N(标准化)
v = n x u
然后,一旦我有< U,V,N>我会简单地乘以每个点?
让我们假设:
现在首先构造一个标准正交帧:
为了改造全局坐标框架装入凸轮坐标框架可以应用以下矩阵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 |
最终从全球的完整变换矩阵凸轮坐标为:
- | 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 |
我认为这是在以前的帖子错误
这个矩阵
| 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|
D_z中的否定取决于系统是使用右手还是左手的规则。 OpenGL使用右手系统,这就是为什么你必须修改你的矩阵(即在右手屏幕中负z点进入屏幕) –
顺便说一句。你在文章中提到的矩阵对应于(M_R)^ - 1 =(M_R)^ T在我的文章中,是从凸轮坐标到全球坐标的逆向变换。 – Dirk
非常感谢!我一直坚持这一点,你的解释非常明确,易于遵循。 +1 – Freddy