7

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

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

n = 视点 - 观察

u = up(0,1,0) X n(归一化)

v = n X u

那么一旦我有 < U, V, N > 我会简单地将每个点乘以 吗?

4

2 回答 2

5

让我们假设:

  • 眼睛位置E =(e_x, e_y, e_z),
  • 观察方向D =(d_x, d_y, d_z)
  • 上向量UP =(up_x, up_y, up_z)

现在首先构造一个正交框架:

  • R = DX向上
  • 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 = M_R * M_T
  • | R_x, R_y, R_z, (R 点 -E) |
  • | U_x, U_y, U_z, (U 点 -E) |
  • | -D_x,-D_y,-D_z,(D点E)|
  • | 0.0, 0.0, 0.0, 1.0|
于 2012-12-12T08:50:55.297 回答
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|
于 2013-09-05T14:27:11.687 回答