2012-12-12 20 views
5

Tôi đang bối rối về cách chuyển đổi tọa độ không gian thế giới thành tọa độ camera.Không gian thế giới cho không gian camera

hiểu biết hiện tại của tôi là tôi sẽ cần phải tính toán vector không gian camera nơi

n = eyepoint - lookat

u = lên (0,1,0) Xn (bình thường)

v = n X u

Sau đó, khi tôi có < U, V, N> tôi có thể nhân đơn giản với từng điểm không?

Trả lời

3

Cho phép giả định:

  • vị trí MắtE = (e_x, e_y, e_z),
  • Xem hướngD = (d_x, d_y, d_z)
  • Up-VectorLÊN = (up_x, up_y, up_z)

Bây giờ đầu tiên xây dựng một khung trực giao:

  • R = DX UP
  • U = RXD
  • Bây giờ bình thường D, R, U và bạn có một khung trực giao cho máy ảnh (D, R, U)

để chuyển đổi khung coord toàn cầu vào khung cam-coord bạn có thể áp dụng các ma trận sau 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 |

Nếu cam của bạn không được đặt ở gốc toàn cầu bạn cũng phải áp dụng một dịch M_T:

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

Cuối cùng ma trận chuyển đổi hoàn toàn từ toàn cầu để cam-coords là:

  • M = M_R * M_T
  • | R_x, R_y, R_z, (R dot -E) |
  • | U_x, U_y, U_z, (U chấm -E) |
  • | -D_x, -D_y, -D_z, (D chấm E) |
  • | 0,0, 0,0, 0,0, 1,0 |
+0

btw. ma trận bạn đã đề cập trong bài viết của bạn tương ứng với (M_R)^- 1 = (M_R)^T trong bài viết của tôi và là chuyển đổi nghịch đảo ... từ co-co đến các coords toàn cầu. – Dirk

+0

Cảm ơn bạn rất nhiều! Tôi đã bị mắc kẹt về điều này một chút và lời giải thích của bạn rất rõ ràng và dễ làm theo. +1 – Freddy

0

Tôi nghĩ rằng đó là một lỗi trong bài trước

ma trận này

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

nên (tôi thử nghiệm nó trong OpenGL, điều này là đúng)

| 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 bản trong D_z tùy thuộc vào việc hệ thống có sử dụng quy tắc tay phải hoặc trái hay không. OpenGL sử dụng hệ thống tay phải, đó là lý do tại sao bạn phải sửa đổi ma trận của mình (tức là các điểm z âm vào màn hình trong màn hình tay phải) –

Các vấn đề liên quan