Đồ họa 2D - Qui trình hiển thị
Các bước hiển thị
Input : Mô hình các đối tượng
Output : Hình ảnh của các đối tượng
bước 1 : Biến đổi các đối tượng
bước 2 : Xén các đối tượng
bước 3 : Chuyển hệ tọa độ
bước 4 : Vẽ các đối tượng
ĐỒ HỌA 2D QUI TRÌNH HIỂN THỊ Giảng viên : Bùi Tiến Lên Các bước hiển thị Input : Mô hình các đối tượng Output : Hình ảnh của các đối tượng bước 1 : Biến đổi các đối tượng bước 2 : Xén các đối tượng bước 3 : Chuyển hệ tọa độ bước 4 : Vẽ các đối tượng Trang 2 Mô hình đối tượng Trang 3 bước 1 : biến đổi Trang 4 bước 2 + 3 : xén + chuyển tọa độ Trang 5 bước 4 : vẽ Kết quả Trang 6 ĐỒ HỌA 2D MÔ HÌNH Đối tượng được biểu diễn như thế nào ? Các đối tượng cơ sở Điểm Đoạn thẳng Đa giác Đường cong (bezier, spline, bspline …) Trang 8 Các đối tượng phức tạp được tạo thành từ các đối tượng cơ sở Tổ chức tập tin dữ liệu đối tượng cơ sở 1 đối tượng cơ sở 2 .TXT Trang 9 Mô hình bằng đoạn thẳng line x 1 y 1 x 2 y 2 r g b 4 5 TAM_GIAC.TXT Trang 10 1 3 2 1 2 3 4 5 1 2 3 mm //cac doan thang line 0 0 4 0 255 0 0 line 4 0 0 2.5 255 0 0 line 0 2.5 0 0 255 0 0 Mô hình bằng đa giác polygon n x 1 y 1 … x n y n r g b4 5 TAM_GIAC.TXT Trang 11 1 2 3 4 5 1 2 3 mm 1 3 2 //cac da giac polygon 3 0 0 4 0 0 2.5 255 0 0 Ví dụ 4 4 5 //cac doan thang line 0 0 6 0 255 0 0 line 6 0 6 2.5 255 0 0 line 6 2.5 3 3.5 255 0 0 line 3 3.5 0 2.5 255 0 0 line 0 2.5 0 0 255 0 0 NHA.TXT Trang 12 1 5 3 2 9 6 8 7 10 13 12 11 1 2 3 4 5 6 7m 1 2 3 line 1 1 2 1 0 255 0 line 2 1 2 2 0 255 0 line 2 2 1 2 0 255 0 line 1 2 1 1 0 255 0 line 4 0 5 0 0 0 255 line 5 0 5 2 0 0 255 line 5 2 4 2 0 0 255 line 4 2 4 0 0 0 255 Ví dụ 0.8 1.0 // cac doan thang 3 A.TXT Trang 13 0.2 0.4 0.6 0.8 1.0 mm 0.2 0.4 0.6 line 0 0 0.5 1 0 0 0 line 1 0 0.5 1 0 0 0 line 0.25 0.5 0.75 0.5 0 0 0 1 2 4 5 Ví dụ 8 7 11 0.8 1.0 Trang 14 1 65 43 2 9 10 0.2 0.4 0.6 0.8 1.0 mm 0.2 0.4 0.6 Cài đặt // Lưu tọa độ của một điểm struct TPoint2D { double x, y; }; // Lưu thơng tin của một đa giác struct TPolygon2D { int Trang 15 n; TPoint2D point[100]; }; Cài đặt void Read_Draw_2D(CDC *pDC, char *filename) { ifstream f(filename); if(f.fail()) return; while(!f.eof()) { char object[32]; f >> object; if(strcmpi(object, “LINE”) == 0) đọc biến đổi xén chuyển tọa độ vẽ Trang 16 { TPoint2D P1, P2; int r, g, b; // Doc doan thang f >> P1.x >> P1.y >> P2.x >> P2.y >> r >> g >> b; // Ve doan thang pDC->MoveTo(P1.x, P1.y); pDC->LineTo(P2.x, P2.y); } } } ĐỒ HỌA 2D BIẾN ĐỔI TỌA ĐỘ Dẫn nhập Trang 18 Biến đổi tọa độ window – viewport là gì ? Là phép chuyển đổi tọa độ thế giới thực hai chiều sang tọa độ màn hình. Trang 19 hệ tọa độ thế giới thực hệ tọa độ màn hình Công thức cho điểm t l r t vùng quan sát W vùng hiển thị V P P’ Trang 20 thế giới thực màn hình l r b b Công thức cho điểm 2 VV WW VV ) 2 WW P(P 2 VV WW VV ) 2 WW P(P hình màn thực giới Thế bt bt btbt y ' y lr lr lrlr x ' x + + − −+ −= + + − −+ −= → Trang 21 2 WW VV WW ) 2 VV P(P 2 WW VV WW ) 2 VV P(P thực giới Thế hình Màn bt bt btbt' yy lr lr lrlr' xx + + − −+ −= + + − −+ −= → Công thức cho đoạn thẳng A A’ Trang 22 B B’ thế giới thực màn hình Công thức cho đa giác Trang 23 thế giới thực màn hình Hệ số méo Khi xác lập cửa sổ window W và cửa sổ viewport V phải lưu ý đến hệ số “méo” bt bt lr lr WW VV WW VV r − − − − = t l r t W V Trang 24 thế giới thực màn hình l r b b Hệ số méo Trang 25 Cài đặt // Lưu thơng tin cửa sổ quan sát struct TWindow2D { double l, r, b, t; }; // Lưu thơng tin cửa sổ hiển thị struct TViewport2D { int l, r, b, t; Trang 26 }; // Khai báo các cửa sổ TWindow2D W; TViewport2D V; Cài đặt void SetWindow2D(double l, double r, double b, double t) { W.l = l; W.r = r; W.b = b; W.t = t; } W Trang 27 void SetViewport2D(int l, int r, int b, int t) { V.l = l; V.r = r; V.b = b; V.t = t; } V Cài đặt CPoint ConvertWorldToScreen2D(double x, double y) { CPoint Q; Q.x=(x-(W.r+W.l)/2)*(V.r-V.l)/(W.r-W.l)+(V.r+V.l)/2; Q.y=(y-(W.t+W.b)/2)*(V.t-V.b)/(W.t-W.b)+(V.t+V.b)/2; return Q; } Trang 28 CPoint ConvertWorldToScreen2D(TPoint2D P) { CPoint Q; Q.x=(P.x-(W.r+W.l)/2)*(V.r-V.l)/(W.r-W.l)+(V.r+V.l)/2; Q.y=(P.y-(W.t+W.b)/2)*(V.t-V.b)/(W.t-W.b)+(V.t+V.b)/2; return Q; } W V Cài đặt void Read_Convert_Draw_2D(CDC *pDC, char *filename) { ifstream f(filename); if(f.fail()) return; while(!f.eof()) { char object[32]; f >> object; if(strcmpi(object, “LINE”) == 0) { TPoint2D P1, P2; đọc biến đổi xén chuyển tọa độ vẽ Trang 29 CPoint Q1, Q2; int r, g, b; // Doc doan thang f >> P1.x >> P1.y >> P2.x >> P2.y >> r >> g >> b; // Chuyen toa do Q1 = ConvertWorldToScreen2D(P1); Q2 = ConvertWorldToScreen2D(P2); // Ve doan thang pDC->MoveTo(Q1); pDC->LineTo(Q2); } } }
File đính kèm:
- Đồ họa 2D - Qui trình hiển thị.pdf