Bài giảng Đồ họa máy tính: Các phép biến đổi cung cấp cho người học những kiến thức như: Các phép biến đổi cơ bản; Ma trận của biến đổi tịnh tiến; Phép xoay; Kết hợp các phép xoay; Quay quanh vecto k bất kỳ;... Mời các bạn cùng tham khảo!
Trang 1CÁC PHÉP BIẾN ĐỔI
NGÔ QUỐC VIỆT
Trang 2• Biến đổi quanh gốc
tọa độ
Xoay
2
Trang 3Tịnh tiến trên X 1; Quay quanh Z 45
Quay quanh Z 45;
Tịnh tiến trên X 1 Khối đặt tại gốc O
Trang 4 Tịnh tiến
4
Trang 5 Đồng nhất sx = sy = sz
Trang 6w z y x
1 0
0 0
0 1
0 0
0 0
cos sin
0 0
sin cos
' '
w z y x
1 0
0 0
0 cos
0 sin
0 0
1 0
0 sin
0 cos
' '
w z y x
1 0
0 0
0 cos
sin 0
0 sin
cos 0
0 0
0 1
' ' '
Xoay quanh trục X:
Trang 7 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ẳngYZ.
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à .
Trang 10 Trả lời: các phép biến đổi, theo thứ tự được viết từ phải sang trái.
Trang 11Công thức Rodrigues: c = cos( ), s=sin( )
Trang 12 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
Trang 13 Nhằm định vị và hướng của camera: sử dụng hàmgluLookAt(), với toạ độ và hai vector (một hướnglê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)
Trang 14 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 angle, normal, telephoto), và vùng nhìn (field ofview)
(wide- 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
Trang 15 Chiếu phối cảnh: glFrustum.
(left, bottom, -near) và (right, top, -near) thuộc mặtnear được chiếu lên (lower, left) và (upper, right) của
Trang 16 Giá trị near, far luôn dương
0
0 0
0
0
2 0
0 0
2
C
B Bottom
Top
Near
A left
right
Near
Near Far
Near Far
D Near
Far
Near Far
C
Bottom Top
Bottom Top
B Left
Right
Left Right
;
;
;
Trang 17 Chiếu phối cảnh: gluPerspective.
Trang 18 Xác lập ma trận chiếu phối cảnh
gluPerspective( GLdouble fovy, GLdouble aspect,
fovy: liếc theo góc thẳng đứng; aspect: tỉ lệ giữa
Ma trận chiếu xác định như sau
18
Trang 19 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
Trang 20 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
Trang 21void glOrtho(GLdouble Left , GLdouble Right, GLdouble
GLdouble Far )
(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ổ.
0 0
2 0
0
0
2 0
0 0
2
z y x
t Near Far
t Bottom
Top
t Left
Right
Near Far
Near Far
t
Bottom Top
Bottom Top
t
Left Right
Left Right
t
z y x
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
Trang 22 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.
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
Trang 23 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