Tải bản đầy đủ (.pdf) (23 trang)

Bài giảng Đồ họa máy tính: Các phép biến đổi - Ngô Quốc Việt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.63 MB, 23 trang )

CÁC PHÉP BIẾN ĐỔI

NGÔ QUỐC VIỆT
2009


Tịnh tiến

Tỉ lệ

• Biến đổi quanh gốc
tọa độ

Xoay

2


Khối đặt tại gốc O

Quay quanh Z 45;
Tịnh tiến trên X 1

Tịnh tiến trên X 1;
Quay quanh Z 45

3





Tịnh tiến

4




Đồng nhất sx = sy = sz.

5


Xoay quanh trục Z:

Xoay quanh trục Y:

Xoay quanh trục X:

 x' cos 
 y '  sin 
 z'   0
 w   0

 sin 
cos 
0
0

 x '  cos 
 y '  0

 
 z '   sin 
  
w   0

 x' 1
 y ' 0
 z '   0
 w  0

0
cos 
sin 
0

0
1
0
0

0
0
1
0

0  x 
0  y 
0  z 
1  w


sin 
0
cos 
0

0  x 
0  y 
0  z 
 
1  w 

0
 sin 
cos 
0

0  x 
0  y 
0  z 
1  w
6




Quay quanh vector A bất kỳ một góc .
 Quay quanh trục Y góc  sao cho A nằm trong mặt phẳng










YZ.
Quay quanh trục X góc  sao cho A trùng với +Z
Quay quanh trục Z góc 
Quay ngược theo trục X (góc -)
Quay ngược theo trục Y (góc -)

Hỏi: cách tính  và .

7




Cách tính ?
 Chiếu A lên mặt phẳng XZ (Loại bỏ y-coordinate)
 Tìm góc  để quay A đến x-axis:

 = -(90° - ) =  - 90 °



Cách tính ?

8





Cần có các ma trận sau:
 p: The point to be rotated about A by 

 Ry : Quay quanh Y góc 
 Rx  : Quay quanh X góc 
 Rz : Quay quanh Z góc 

 Rx  -1: Quay quanh X góc -
 Ry-1 : Quay quanh Y góc -



Nhân theo thứ tự nào?
9







Trả lời: các phép biến đổi, theo thứ tự được
viết từ phải sang trái.
Vì vậy:
p’ = Ry-1 Rx  -1 Rz Rx  Ry p
Hỏi: làm cách nào tính Rx  -1

 Trả lời: tính Rx (-)
 Rõ hơn: ma trận xoay là trực giao.

10


Công thức Rodrigues: c = cos(), s=sin()

11









Viewing transformation: định vị camera và
hướng vào cảnh cần chụp.
Modeling transformation: Sắp xếp, định vị
cảnh (nhiều đối tượng)
Projection transformation: Chọn ống kính và
độ zoom.
Viewport transformation: Xác định độ lớn
cảnh sau cùng
Tất cả đều dựa trên ma trận 4x4.
12





Nhằm định vị và hướng của camera: sử dụng hàm
gluLookAt(), với toạ độ và hai vector (một hướng
lên, và một nhằm vào “tâm” đối tượng). Là định vị
và hướng của điểm nhìn (eye coordinate).
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

 (0, 0, 5): vị trí camera

 (0, 0, 0): vị trí hướng đến.
 (0, 1, 0): đầu vector hướng lên


Xem glutLession05
13









Nhằm xác định viewing volume. Chiếu lên màn hình,
và xem được những gì.
Hiệu ứng tương tự như việc chọn ống kính (wideangle, normal, telephoto), và vùng nhìn (field of
view).
Hàm glFrustum hoặc gluPerspective().

Có thể dùng glMatrixMode(transformation type) để
xác lập biến đổi tương ứng.
Chú ý: chỉ số ma trận biến đổi trong OpenGL là hoán
vị (hàng và cột) so với ma trận chuẩn trong C.
14




Chiếu phối cảnh: glFrustum.



(left, bottom, -near) và (right, top, -near) thuộc mặt
near được chiếu lên (lower, left) và (upper, right) của
cửa sổ nếu điểm nhìn (mắt) ở (0, 0, 0).
15




Giá trị near, far luôn dương
 2  Near

 right  left

0


0



0


0
2 Near
Top  Bottom
0
0


0


B 0

C 0
 1 1 
A

Right  Left
Top  Bottom
;B 
;
Right  Left
Top  Bottom
Far  Near
2.Far  Near
C

;D 
Far  Near
Far  Near
A

16




Chiếu phối cảnh: gluPerspective.

17




Xác lập ma trận chiếu phối cảnh
gluPerspective( GLdouble fovy, GLdouble aspect,
GLdouble
zNear, GLdouble
zFar)

fovy: liếc theo góc thẳng đứng; aspect: tỉ lệ giữa
ngang và dọc; zNear, zFar: khoảng xén
 Ma trận chiếu xác định như sau


18



fov*0.5 = arctan ((top-bottom)*0.5 / near)
top = tan(fov*0.5)*near
bottom = -top
 top = tan(fov*3.14159/360.0) * near
 left = aspect * bottom
 right = aspect * top




19




Khối nhìn có dạng



Khoảng cách camera khơng ảnh hưởng đến
kích cỡ hiển thị đối tượng
20


void glOrtho(GLdouble Left, GLdouble Right, GLdouble
Bottom,
GLdouble
Top,
GLdouble

Near,
GLdouble Far )
Giá trị của far hay near là âm, nếu mặt nằm
sau điểm nhìn, và dương nếu trước điểm nhìn
2


 Right  Left

0



0


0




0
2
Top  Bottom
0
0


0
tx 



0
ty 

2
tz 

Far  Near
0
1 

Right  Left
Right  Left
Top  Bottom
ty  
Top  Bottom
Far  Near
tz  
Far  Near
tx  

(left, bottom, near) và (right, top, near) thuộc mặt near được
chiếu lên (lower, left) và (upper, right) của cửa sổ.
21









Vùng chữ nhật theo đơn vị pixel trên
windows để render cảnh (đã được tính qua
model view và projection view).
Tỉ lệ (dài/rộng) viewport nên đồng dạng với
khối nhìn.
Chú ý: mắt nhìn theo hướng z âm. Vì vậy nếu
near=1, far=3 thì chỉ những toạ độ có giá trị z
từ 1 đến 3 mới thấy được (mặc định mắt tại
gốc).
22




Khi chọn đối tượng bằng mouse  cần
chuyển về toạ độ đối tượng.
Sử dụng gluUnProject().



INV: ma trận nghịch đảo



23




×