(91) 350-9520 support@omarine.org M-F: 7 AM - 7 PM; Weekends: 9 AM - 5 PM

Môi trường lập trình Android, phần 1: Lập trình OpenGL ES, bài 1: Các ma trận biến đổi, mục 2: Ma trận biến đổi camera (camera transformation matrix)

Có hai cách tiếp cận tính toán ma trận camera. Cách tiếp cận thứ nhất xây dựng cơ sở 4 chiều và áp dụng biện pháp đổi cơ sở. Cách tiếp cận thứ hai coi toàn cảnh là một mô hình và sử dụng phép tịnh tiến trong không gian camera.

Xây dựng cơ sở chung

Cả hai cách đều xây dựng cơ sở cho không gian camera từ giả thiết: camera đặt tại vị trí t, nhìn vào điểm c, hướng lên (up) là k.

Hướng nhìn của camera là d = ct.

Trục z hướng về phía người xem, vì vậy vector cơ sở z chuẩn hóa của không gian camera là

c0

Vector cơ sở x chuẩn hóa của không gian camera tính theo dk

c1

c2

Đặt giả thiết

x = (x1, x2, x3)

y = (y1, y2, y3)

z = (z1, z2, z3)

Chúng ta có ma trận cơ sở của không gian camera 3 chiều

c3

Cách tiếp cận thứ nhất: Xây dựng cơ sở 4 chiều và áp dụng biện pháp đổi cơ sở

Một không gian với 3 vector cơ sở chỉ đủ để biểu diễn các điểm trong không gian 3 chiều địa phương của nó. Nếu hệ tọa độ của không gian đó đặt gốc tại vị trí t trong một không gian tổng thể thì cần thêm một vector cơ sở thứ tư để xử lý thông tin này. Nếu t = (t1, t2, t3) thì chúng ta có thể tạo cơ sở không gian 4 chiều cho camera với ma trận cơ sở như sau

c4

Cơ sở này không trực chuẩn, cũng chẳng trực giao, nhưng 4 vector của nó độc lập tuyến tính nên đủ để làm cơ sở. Đặc biệt là, M4 có ma trận con cấp 3 là M, là một ma trận trực giao nên chúng ta dễ dàng tính ma trận nghịch đảo của nó để phục vụ cho việc đổi cơ sở.

Như vậy, ma trận chuyển cơ sở của không gian toàn cảnh sang cơ sở mới (cơ sở của không gian camera) là M4-1.

Qui ước viết t dưới dạng vector cột và gọi

c5

M4 được viết gọn dưới dạng

c6

Chúng ta đi tìm M4-1.

Dạng viết gọn của M4 coi như một ma trận 2 hàng 2 cột. Chúng ta biến đổi M4 bằng cách nhân bên trái nó với một vài ma trận để đưa về ma trận đơn vị.

Nhân bên trái hàng 1 của M4 với M1, điều đó tương đương với nhân bên trái M4 với ma trận

c7

Kết quả là

c8

Tiếp tục, đọc hàng 2 của ma trận kết quả, nhân bên trái nó với -M-1t rồi cộng vào hàng 1, tương đương với nhân bên trái ma trận kết quả với ma trận

c9

Kết quả là một ma trận đơn vị

c10

Vậy

c11

hay

c12

M là ma trận trực giao nên M1 = MT.

Vậy ma trận biến đổi camera là

c13

Trong đó

c14

Cách tiếp cận thứ hai: Coi toàn cảnh là một mô hình và sử dụng phép tịnh tiến trong không gian camera

Trong biến đổi mô hình, chúng ta tịnh tiến đối tượng mô hình trong không gian toàn cảnh để đổi tọa độ sang tọa độ toàn cảnh. Bây giờ, chúng ta coi toàn cảnh là một mô hình và tịnh tiến “mô hình toàn cảnh” trong không gian camera để đổi tọa độ sang tọa độ camera.

Đầu tiên, đặt “mô hình toàn cảnh” tại vị trí của camera. Ma trận chuyển cơ sở của không gian toàn cảnh sang cơ sở của không gian camera là MT.

Tiếp theo, chúng ta cần tịnh tiến “mô hình toàn cảnh” về gốc tọa độ thật sự của nó. Camera đặt tại vị trí t trong không gian toàn cảnh (thật sự) nên vào lúc này gốc tọa độ thật sự của hệ tọa độ toàn cảnh sẽ ở vị trí -t đối với không gian toàn cảnh giả định (chưa tịnh tiến). Vị trí này đổi sang tọa độ camera là MT(-t) = –MTt.

Sử dụng các kí hiệu như trong cách tiếp cận thứ nhất, ma trận chuyển cơ sở ở dạng cấp 4 là

c15

Áp dụng phép tính tịnh tiến, ma trận này phải nhân bên trái với ma trận tịnh tiến, kết quả là

c16

Ví dụ

Cho camera đặt tại t = (0, 2, 0), nhìn vào c = (0, 0, -4), hướng lên k = (0, 1, 0). Hãy tính ma trận Mworldview.

Giải:

Hướng nhìn của camera là d = ct = (0, 0, -4) – (0, 2, 0) = (0, -2, -4).

c17

c18

c19

Advertisements

Gửi phản hồi

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: