PHẦN II: NỘI DUNG
HÌNH HỌC TRONG KHÔNG GIAN 3D
Cơ sở toán học:
Một trong những ưu điểm quan trọng của đồ họa là cho phép dễ dàng tác động lên các đối tượng đồ họa. Tất cả các biến đổi trên đồ họa máy tính đều có thể thỏa mãn một cách tương đối dễ dàng vì các hình ảnh khi đưa vào xử lý đã được số hoá, do đó nó có thể thay đổi dễ dàng bằng các phép biến đổi toán học. Phép biến đổi hình học thường được dùng là phép biến đổi Affine.
Có hai quan điểm về phép biến đổi, đó là: Biến đổi đối tượng.
Biến đổi hệ tọa độ.
Biến đổi đối tượng: là thay đổi tọa độ các điểm mô tả nó theo một quy luật nào đó.
Biến đổi hệ tọa độ: sẽ tạo ra một hệ tọa độ mới và tất cả các điểm mô tả đối tượng sẽ được chuyển về hệ tọa độ mới này. Phần này ta sẽ mô tả một số phép biến đổi đối tượng. Phép biến đổi affine 3D biến đổi điểm P(Px,Py,Pz) thành điểm Q:
Q = PM
Với P = (Px, Py, Pz), Q = (Qx, Qy, Qz) và M là ma trận biến hình 4x4
KĨ THUẬT ĐỒ HỌA Trang 25
m m m m m m m m m m m m
Một số phép biến đổi Affine cơ sở, đó là: phép tịnh tiến, phép co dãn, phép quay. a/ Phép tịnh tiến: Dịch chuyển đối tượng từ vị trí này sang vị trí khác. Tịnh tiến với các độ dời tx, ty, tz.
b/Phép co dãn: Với hệ số co Sx , Sy, Sz. Ma trận M là
c/Phép quay quanh trục x gócA: Tọa độ x của vật thể không đổi. Ma trận M là
KĨ THUẬT ĐỒ HỌA Trang 26
M = 1 0 0 0 0 1 0 0 0 0 1 0 tx ty tz 1 Sx 0 0 0 0 Sy 0 0 0 0 Sz 0 0 0 0 1 M = 1 0 0 0 0 cos(A) sin(A) 0 0 -sin(A) cos(A) 0 0 0 0 1 M =
d/Phép quay quanh trục y góc A: Tọa độ y của vật thể không đổi. Ma trận M là:
e/Phép quay trục z gócA: Tọa độ z của vật thể không đổi. Ma trận M là
* Tổng hợp các phép biến hình Phép biến hình T1: PQ’ có ma trận M1. Phép biến hình T2: Q’Q có ma trận M2. Tổng hợp 2 phép biến hình T1, T2 là phép biến hình T: PQ Phép biến hình T có ma trận M = M1 x M2 Giải thuật: - Tính các phần tử của ma trận M.
- Xác định các điểm mới của đối tượng qua phép biến hình. - Vẽ lại đối tượng.
2. Biểu diễn đối tượng 3D
Cơ sở toán học:
Các đối tượng trong thế giới thực hầu hết là các đối tượng 3D. Việc biểu diễn các đối tượng 3D trên mặt phẳng 2D, bằng máy tính phải tuân thủ các quy luật về phối cảnh… nhằm giúp người xem có ấn tượng hình ảnh gần đúng trong thực tế.
Mô hình khung dây(Wireframe) dùng biễu diễn các đối tượng 3D đơn giản như các khối đa diện, các mặt mà có thể đơn giản hóa cách thể hiện nó như gồm tập hợp gồm các đỉnh và các cạnh nối liền các đỉnh đó. Để lưu trữ mô hình khung dây cần phải có 2 danh sách:
KĨ THUẬT ĐỒ HỌA Trang 27
cos(A) 0 -sin(A) 0 0 1 0 0 sin(A) 0 cos(A) 0 0 0 0 1 M = cos(A) sin(A) 0 0 -sin(A) cos(A) 0 0 0 0 1 0 0 0 0 1 M =
+ Danh sách đỉnh chứa tọa độ các đỉnh.
+ Danh sách cạnh chứa các cặp đỉnh nối cạnh đó. Cấu trúc dữ liệu mô tả Wireframe
Typedef struct { int NumVerts; int NumEdges; Point3D vert [ ]; Point3D edge[ ][2]; } wireframe;
Để vẽ các đối tượng biểu diễn bằng mô hình khung dây chúng ta chỉ cần vẽ các cạnh trong danh sách cạnh. Tuy nhiên do các đỉnh và cạnh được định nghĩa trong 3D nên để vẽ ta phải chiếu lên mặt phẳng 2D bằng các phép chiếu thích hợp :
+Chiếu mỗi điểm lên 2D.
+Vẽ đoạn thẳng giữa hai điểm chiếu này.
Giải thuật:
+Khởi tạo danh sách đỉnh.
Đưa các đỉnh đa giác vào danh sách đỉnh. +Khởi tạo danh sách các cạnh.
Đưa các cặp đỉnh nối cạnh vào danh sách cạnh. +Khởi tạo phép chiếu.
Tìm các điểm chiếu của các đỉnh wireframe. +Vẽ các cạnh của đối tượng.
Trong chương trình minh họa, chúng ta sẽ dùng mô hình wireframe để biểu diễn một số đối tượng ba chiều đặc biệt như hình lăng trụ, hình chóp.
♦ Hình lăng trụ: Cơ sở của hình lăng trụ là một đa giác P nằm trên mặt xy và được quét dọc theo trục z đến một chiều cao H nào đó. Nếu đa giác P có n đỉnh, hình lăng trụ có 2*n đỉnh và 3*n cạnh.
Danh sách đỉnh: n đỉnh đầu tiên dành cho đa giác P có tọa độ z bằng 0, n đỉnh kế tiếp có tọa độ z là h.
Danh sách cạnh: n cạnh được chọn đầu tiên thuộc đa giác P sao cho prism.edge[i,1] là i và prism.edge[i,2] là i+1 (ngoại trừ khi i =n thì sẽ là 1 để thành đa giác), tương tự n cạnh kế ở mặt trên của hình trụ. Cuối cùng là n cạnh đứng của hình trụ có prism.edge[i+2n,1] là i và prism.edge[i+2n] là i+n.
♦ Hình chóp: Đáy của hình chóp là đa giác P có n đỉnh nằm trên mặt xy. Và đỉnh hình chóp không thuộc mặt xy. Hình chóp có 2*n đỉnh và 2*n cạnh.
Danh sách đỉnh: n đỉnh đầu tiên dành cho đa giác P có tọa độ z bằng 0, đỉnh kế tiếp (n+1) có tọa độ z là h.
Danh sách cạnh: n cạnh được chọn đầu tiên thuộc đa giác P sao cho pyramide.edge[i,1] là i và pyramide.edge[i,2] là i+1 (ngoại trừ khi i =n thì sẽ là 1 để thành đa giác). n cạnh kế có pyramide.edge[i+n,1] là i và pyramide.edge[i+n,2] là n+1.
3. Quan sát vật thể 3D qua hệ
tọa độ quan sát