Giáo Trình Lý Thuyết Đồ Họa Phần 1 Tại Trường Đại Học Công Nghiệp Quảng Ninh

Giáo trình về lý thuyết đồ họa phần 1 trường đh công nghiệp quảng ninh, biên soạn theo chương trình đào tạo chuẩn, hệ thống hóa kiến thức từ cơ bản đến nâng cao.

Chuyên ngành

Lý Thuyết Đồ Họa

Người đăng

Ẩn danh

Thể loại

Giáo Trình

2020

66
0
0

Phí lưu trữ

30 Point

Mục lục chi tiết

1. CHƯƠNG 1: CÁC YẾU TỐ CƠ SỞ CỦA ĐỒ HỌA

1.1. Tổng quan về đồ họa máy tính

1.2. Giới thiệu về đồ họa máy tính

1.3. Các kỹ thuật đồ họa

1.3.1. Kỹ thuật đồ họa điểm

1.3.2. Kỹ thuật đồ họa vector

1.4. Ứng dụng của đồ họa máy tính

1.5. Các lĩnh vực của đồ họa máy tính

1.6. Tổng quan về một hệ đồ họa

1.7. Màn hình đồ họa

1.8. Các biểu diễn tọa độ

1.9. Các thuật toán vẽ đoạn thẳng

1.9.1. Thuật toán DDA

1.9.2. Thuật toán Bresenham

1.9.3. Thuật toán MidPoint

1.10. Thuật toán vẽ đường tròn

1.10.1. Thuật toán Bresenham

1.10.2. Thuật toán MidPoint

1.11. Thuật toán vẽ Ellipse

1.11.1. Thuật toán Bresenham

1.11.2. Thuật toán MidPoint

1.12. Phương pháp vẽ đồ thị hàm số

2. CHƯƠNG 2: TÔ MÀU

2.1. Giới thiệu các hệ màu

2.2. Các thuật toán tô màu

2.2.1. Thuật toán xác định P ∈ S

2.2.2. Thuật toán tô màu theo dòng quét

2.2.3. Thuật toán tô màu theo vết dầu loang

3. CHƯƠNG 3: XÉN HÌNH

3.1. Đặt vấn đề

3.2. Xén đoạn thẳng vào vùng hình chữ nhật

3.2.1. Cạnh của hình chữ nhật song song với các trục tọa độ

3.2.2. Thuật toán Cohen – Sutherland

3.2.3. Thuật toán chia nhị phân

3.2.4. Thuật toán Liang – Barsky

3.3. Khi cạnh của hình chữ nhật tạo với trục hoành một góc α

3.4. Xén đoạn thẳng vào hình tròn

3.5. Xén đường tròn vào hình chữ nhật

3.6. Xén đa giác vào hình chữ nhật

4. CHƯƠNG 4: CÁC PHÉP BIẾN ĐỔI

4.1. Các phép biến đổi trong mặt phẳng

4.2. Cơ sở toán học

4.3. Ví dụ minh họa

4.4. Các phép biến đổi trong không gian

4.5. Các hệ trục tọa độ

4.6. Các công thức biến đổi

4.7. Ma trận nghịch đảo

4.8. Các phép chiếu của vật thể trong không gian lên mặt phẳng

4.8.1. Phép chiếu phối cảnh

4.8.2. Phép chiếu song song

4.8.3. Công thức của các phép chiếu lên màn hình

4.8.4. Ví dụ minh họa

5. CHƯƠNG 5: BIỂU DIỄN CÁC ĐỐI TƯỢNG BA CHIỀU

5.1. Mô hình WireFrame

5.2. Vẽ mô hình WireFrame với các phép chiếu

5.3. Vẽ các mặt toán học

6. CHƯƠNG 6: THIẾT KẾ ĐƯỜNG VÀ MẶT CONG BEZIER VÀ B-SPLINE

6.1. Đường cong Bezier và mặt Bezier

6.2. Thuật toán Casteljau

6.3. Dạng Bernstein của đường cong Bezier

6.4. Dạng biểu diễn ma trận của đường Bezier

6.5. Tạo và vẽ đường cong Bezier

6.6. Các tính chất của đường Bezier

6.7. Đánh giá các đường cong Bezier

6.8. Đường cong Spline và B-Spline

6.9. Các tính chất hữu ích trong việc thiết kế các đường cong B-Spline

6.10. Thiết kế các mặt Bezier và B-Spline

6.11. Dán các băng Bezier với nhau

7. CHƯƠNG 7: KHỬ ĐƯỜNG VÀ MẶT KHUẤT

7.1. Các phương pháp khử mặt khuất

7.2. Giải thuật sắp xếp theo chiều sâu

7.3. Giải thuật BackFace

7.4. Giải thuật vùng đệm độ sâu

8. CHƯƠNG 8: TẠO BÓNG VẬT THỂ 3D

8.1. Nguồn sáng xung quanh

8.2. Nguồn sáng định hướng

8.3. Nguồn sáng điểm

8.4. Mô hình bóng Gouraud

PHỤ LỤC: MỘT SỐ CHƯƠNG TRÌNH MINH HỌA

I.1. Các thuật toán tô màu

I.2. Các thuật toán xén hình

I.3. Vẽ các đối tượng 3D

TÀI LIỆU THAM KHẢO

LỜI MỞ ĐẦU

Tóm tắt

I. Tổng quan về Giáo Trình Lý Thuyết Đồ Họa Đại Học Công Nghiệp Quảng Ninh

Giáo trình Lý thuyết Đồ họa tại Đại học Công nghiệp Quảng Ninh cung cấp kiến thức cơ bản và nâng cao về đồ họa máy tính. Nội dung giáo trình được biên soạn chi tiết, giúp sinh viên nắm vững các khái niệm và thuật toán quan trọng trong lĩnh vực này. Đồ họa máy tính không chỉ là một môn học mà còn là một công cụ thiết yếu trong nhiều lĩnh vực như thiết kế, kiến trúc và giải trí.

1.1. Nội dung chính của giáo trình

Giáo trình bao gồm 8 chương, từ các yếu tố cơ sở của đồ họa đến các thuật toán phức tạp. Mỗi chương đều có phần bài tập để kiểm tra kiến thức và rèn luyện kỹ năng lập trình.

1.2. Đối tượng sử dụng giáo trình

Giáo trình này được thiết kế cho sinh viên ngành Công nghệ thông tin, những người muốn tìm hiểu sâu về lý thuyết và ứng dụng của đồ họa máy tính.

II. Các thách thức trong việc học Lý Thuyết Đồ Họa

Học lý thuyết đồ họa không chỉ đơn thuần là việc nắm vững lý thuyết mà còn phải thực hành nhiều. Sinh viên thường gặp khó khăn trong việc áp dụng lý thuyết vào thực tế. Các thuật toán đồ họa phức tạp có thể gây khó khăn cho người học, đặc biệt là trong việc lập trình.

2.1. Khó khăn trong việc hiểu các thuật toán

Nhiều sinh viên gặp khó khăn trong việc hiểu và áp dụng các thuật toán như DDA, Bresenham hay MidPoint. Việc này đòi hỏi sự kiên nhẫn và thực hành thường xuyên.

2.2. Thiếu tài liệu tham khảo

Mặc dù giáo trình cung cấp kiến thức cơ bản, nhưng sinh viên vẫn cần thêm tài liệu tham khảo để hiểu sâu hơn về các khái niệm và ứng dụng thực tế.

III. Phương pháp học hiệu quả Lý Thuyết Đồ Họa

Để học tốt lý thuyết đồ họa, sinh viên cần áp dụng các phương pháp học tập hiệu quả. Việc kết hợp lý thuyết với thực hành sẽ giúp sinh viên nắm vững kiến thức hơn. Tham gia các dự án thực tế cũng là một cách tốt để củng cố kiến thức.

3.1. Thực hành thường xuyên

Thực hành là cách tốt nhất để hiểu rõ các thuật toán đồ họa. Sinh viên nên dành thời gian để lập trình và thử nghiệm các thuật toán đã học.

3.2. Tham gia các dự án nhóm

Tham gia vào các dự án nhóm giúp sinh viên học hỏi lẫn nhau và áp dụng lý thuyết vào thực tế. Điều này cũng giúp phát triển kỹ năng làm việc nhóm.

IV. Ứng dụng thực tiễn của Lý Thuyết Đồ Họa

Lý thuyết đồ họa có nhiều ứng dụng trong thực tiễn, từ thiết kế giao diện người dùng đến mô phỏng 3D. Các ứng dụng này không chỉ giúp sinh viên hiểu rõ hơn về lý thuyết mà còn mở ra nhiều cơ hội nghề nghiệp.

4.1. Thiết kế giao diện người dùng

Đồ họa máy tính được sử dụng rộng rãi trong việc thiết kế giao diện người dùng cho các ứng dụng phần mềm. Điều này giúp tạo ra trải nghiệm người dùng tốt hơn.

4.2. Mô phỏng và hoạt hình

Lý thuyết đồ họa cũng được áp dụng trong mô phỏng và hoạt hình, giúp tạo ra các sản phẩm giải trí hấp dẫn và sống động.

V. Kết luận về tương lai của Lý Thuyết Đồ Họa

Lý thuyết đồ họa sẽ tiếp tục phát triển và đóng vai trò quan trọng trong công nghệ thông tin. Với sự phát triển của công nghệ, các ứng dụng đồ họa sẽ ngày càng phong phú và đa dạng hơn. Sinh viên cần nắm vững kiến thức để có thể theo kịp xu hướng này.

5.1. Xu hướng phát triển công nghệ đồ họa

Công nghệ đồ họa đang phát triển nhanh chóng với sự xuất hiện của các công nghệ mới như thực tế ảo (VR) và thực tế tăng cường (AR).

5.2. Cơ hội nghề nghiệp trong lĩnh vực đồ họa

Nhu cầu về chuyên gia đồ họa ngày càng tăng trong các lĩnh vực như game, phim ảnh và thiết kế web. Điều này mở ra nhiều cơ hội nghề nghiệp cho sinh viên.

25/07/2025

Trích đoạn nội dung tài liệu

Chương I. Các yếu tố cơ sở của ñồ họa • Bước 4: Tiếp tục tăng x lên 1 Pixel. Ở vị trí xi +1, ta tính: pi+1 = pi + 2∆y nếu pi < 0 pi+1 = pi + 2.( ∆y - ∆x) nếu pi ≥ 0 Nếu pi+1 < 0 thì ta chọn toạ ñộ y kế tiếp là yi+1 Ngược lại thì ta chọn yi+1 +1 • Bước 5: Lặp lại bước 4 cho ñến khi x = x2. Sau ñây là thủ tục cài ñặt thuật toán: Procedure LINE(x1,y1,x2,y2:integer); { 0<m<1} var dx,dy,x,y,p,c1,c2,xMax:integer; Begin dx:=abs(x1-x2); dy:=abs(y1-y2); c1:=2*dy; c2:=2*(dy-dx); p:=2*dy-dx; if x1>x2 then begin x:=x2; y:=y2; xMax:=x1; end else begin x:=x1;y:=y1;xMax:=x2; end; putpixel(x,y,red); while x<xMax do begin x:=x+1; if p<0 then p:=p+c1 else begin y:=y+1; p:=p+c2; end; 11 Chương I.

Các yếu tố cơ sở của ñồ họa putpixel(x,y,red); end; end; 1. Thuật toán MidPoint Ta chỉ xét trường hợp hệ số góc 0<m<1. Thuật toán này ñưa ra cách chọn ñiểm S(xi+1,yi) hay P(xi+1,yi+1) bằng cách so sánh ñiểm thực Q(xi+1,y) với ñiểm M (trung ñiểm của S và P).  Nếu ñiểm Q nằm dưới ñiểm M thì chọn ñiểm S  Ngược lại, chọn ñiểm P.3) Ta có dạng tổng quát của phương trình ñường thẳng: Ax + By + C = 0 với A = y2 – y1 , B = –(x2 – x1) , C = x2.y2 ðặt F(x,y) = Ax + By + C, ta có nhận xét: < 0 nếu (x,y) nằm phía trên ñường thẳng F(x,y) = 0 nếu (x,y) thuộc về ñường thẳng > 0 nếu (x,y) nằm phía dưới ñường thẳng Lúc này, việc chọn các ñiểm S hay P ñược ñưa về việc xét dấu của: 1 pi = F(M) = F(xi + 1,yi + ) 2  Nếu pi < 0 ⇒ M nằm trên ñoạn thẳng ⇒ Q nằm dưới M ⇒ Chọn S P  Nếu pi ≥ 0 ⇒ M nằm dưới ñoạn yi+ 1 Q thẳng ⇒ Q nằm trên M ⇒ Chọn P M Mặt khác: yi S 1 pi = F(xi + 1,yi + ) 2 1 xi pi+1 = F(xi+1 + 1,yi+1 + ) xi+1 2 Hình 1.3 nên 1 1 pi+1 - pi = F(xi+1 + 1,yi+1 + ) - F(xi + 1,yi + ) 2 2 12 Chương I.

Các yếu tố cơ sở của ñồ họa 1 1 = A(xi+1+1) + B(yi+1 + ) + C - A(xi+1) - B(yi + ) - C 2 2 = A(xi+1 - xi) + B(yi+1 - yi) = A + B(yi+1 - yi) (vì xi+1 - xi =1) Suy ra: pi+1 = pi + A + B(yi+1 - yi) (*) *Nhận xét:. Nếu pi < 0: Chọn ñiểm S: yi+1 = yi Từ (*) suy ra pi+1 = pi + A. Nếu pi ≥ 0: Chọn ñiểm P: yi+1 = yi + 1 Từ (*) suy ra pi+1 = pi + A + B Với ñiểm mút ñầu tiên, ta có: 1 1 p1 = F(x1 + 1,y1 + ) = A(x1+1) + B(y1 + ) + C 2 2 B B = Ax1 + Bx1 + C + A + =A+ (vì Ax1 + Bx1 + C = 0) 2 2 Thuật toán MidPoint cho kết quả tương tự như thuật toán Bresenham. THUẬT TOÁN VẼ ðƯỜNG TRÒN Xét ñường tròn (C) tâm O(xc,yc) bán kính R.

x) y,- * Ý tưởng: Hình Do tính ñối xứng của ñường tròn nên nếu ñiểm 1.4) Vì vậy, ta chỉ cần vẽ một phần tám cung tròn rồi lấy ñối xứng qua gốc O và 2 trục toạ ñộ thì ta có ñược toàn bộ ñường tròn. Thuật toán Bresenham Giả sử (xi,yi) ñã vẽ ñược. Cần chọn ñiểm kế tiếp là (xi +1,yi) hoặc (xi +1,yi -1) (Hình 1.5) Từ phương trình: x2 + y2 = R2 ta tính ñược giá trị y thực ứng với xi +1 là: 13 Chương I. Các yếu tố cơ sở của ñồ họa y2 = R2 - (xi +1)2 ðặt: d1 = yi2 - y2 = yi2 - R2 + (xi + 1)2 d2 = y2 - (yi - 1)2 = R2 - (xi + 1)2 - (yi - 1)2 yi y Suy ra: yi- pi = d1 - d2 = 2.(xi+1 + 1)2 + y2i+1 + (yi+1 - 1)2 - 2R2 (3) Từ (2) và (3) ta có: xi xi+1 pi+1 - pi = 4xi + 6 + 2.5 ⇒ pi+1 = pi + 4xi + 6 + 2.

Ngược lại chọn ñiểm (xi + 1,yi - 1) • Bước 3: x:=x + 1, tính lại p: Nếu pi < 0: pi+1 = pi + 4xi + 6. Ngược lại: pi+1 = pi + 4. Ngược lại chọn ñiểm (xi+1,yi+1-1) • Bước 4: Lặp lại bước 3 cho ñến khi x = y. Sau ñây là thủ tục ñể cài ñặt thuật toán: Procedure Circle(x0,y0,r:Integer); Var p,x,y:Integer; Procedure VeDiem; Begin PutPixel( x0 + x , y0 + y , color); PutPixel( x0 - x , y0 + y , color); PutPixel( x0 + x , y0 - y , color); PutPixel( x0 - x , y0 - y , color); 14 Chương I.

Các yếu tố cơ sở của ñồ họa PutPixel( x0 + y , y0 + x , color); PutPixel( x0 - y , y0 + x , color); PutPixel( x0 + y , y0 - x , color); PutPixel( x0 - y , y0 - x , color); End; Begin x:=0; y:=r; p:=3 - 2*r; While x<=y do Begin VeDiem; If p<0 then p:=p + 4*x + 6 Else Begin p:=p + 4*(x-y) + 10; y:=y-1; End; x:=x+1; End; End; 1. Thuật toán MidPoint Từ phương trình ñường tròn: x2 + y2 = R2 S 2 2 2 yi ðặt F(x,y) = x + y - R ,ta có: M < 0 nếu (x,y) ở trong ñường tròn Q yi- P F(x,y) = 0 nếu (x,y) ở trên ñường tròn 1 > 0 nếu (x,y) ở ngoàiñường tròn Lúc này, việc chọn các ñiểm S(xi+1,yi) hay xi xi+1 P(xi+1,yi-1) ñược ñưa về việc xét dấu của: Hình 1.6) 2  Nếu pi < 0 ⇒ M nằm trong ñường tròn ⇒ Q gần S hơn ⇒ Chọn S  Nếu pi ≥ 0 ⇒ M nằm ngoài ñường tròn ⇒ Q gần P hơn ⇒ Chọn P 15 Chương I. Các yếu tố cơ sở của ñồ họa Mặt khác: 1 pi = F(xi + 1,yi - ) 2 1 pi+1 = F(xi+1 + 1,yi+1 - ) 2 nên 1 1 pi+1 - pi = F(xi+1 + 1,yi+1 - ) - F(xi + 1,yi - ) 2 2 1 2 1 = [(xi+1+1)2 + (yi+1 - ) - R2] - [(xi+1)2 + (yi - )2 - R2] 2 2 1 2 1 = [(xi+2)2 + (yi+1 - ) - R2] - [(xi+1)2 + (yi - )2 - R2] 2 2 = 2xi + 3 + (yi+12 - yi2) - (yi+1 - yi) Suy ra: pi+1 = pi + 2xi + 3 + (yi+12 - yi2) - (yi+1 - yi) (*) *Nhận xét:. Nếu pi < 0: Chọn ñiểm S : yi+1 = yi Từ (*) ⇒ pi+1 = pi + 2xi + 3.

Nếu pi ≥ 0: Chọn ñiểm P: yi+1 = yi - 1 Từ (*) ⇒ pi+1 = pi + 2(xi - yi) + 5 Với ñiểm ñầu tiên (0,R), ta có: 1 1 1 5 p1 = F(x1 + 1,y1 - ) = F(1,R - ) = 1 + (R - )2 - R2 = - R 2 2 2 4 1. THUẬT TOÁN VẼ ELLIPSE ðể ñơn giản, ta chọn Ellipse có tâm ở gốc tọa ñộ. Phương trình của nó có dạng: x2 y2 + =1 a2 b2 b2 2 Ta có thể viết lại: y2 = - 2 .x + b2 (*) a *Ý tưởng: Giống như thuật toán vẽ ñường tròn.7 Chỉ có sự khác biệt ở ñây là ta phải vẽ 2 nhánh: Một nhánh từ trên xuống và một nhánh từ dưới lên và 2 nhánh này sẽ gặp nhau tại ñiểm mà ở ñó hệ số góc của tiếp tuyến với Ellipse = -1 (Hình 1. Phương trình tiếp tuyến với Ellipse tại ñiểm (x0,y0) ∈ (E) : 16 Chương I.

Các yếu tố cơ sở của ñồ họa x y x0 .b 2 Suy ra, hệ số góc của tiếp tuyến tại ñiểm ñó là: -. Thuật toán Bresenham Ở ñây, ta chỉ xét nhánh vẽ từ trên xuống. Giả sử ñiểm (xi,yi) ñã ñược vẽ. ðiểm tiếp theo cần chọn sẽ là (xi+1,yi) hoặc (xi+1,yi-1) b2 Thay (xi +1) vào (*): y2 = - 2 .(xi +1)2 + b2 a ðặt: b2 d1= yi2 - y2 = yi2 + 2 .(yi+12 + yi+1) -1 a Suy ra: b2 pi+1 - pi = 2.(2x + 3) - 4yi a2 Với ñiểm ñầu tiên (0,b), ta có: b2 p1 = 2 - 2b + 1 a2 Từ ñó, ta có thủ tục vẽ Ellipse như sau: 17 Chương I.

Các yếu tố cơ sở của ñồ họa Procedure Ellipse(xc,yc,a,b:Integer;Color:Byte); Var p,a2,b2:real; x,y:integer; (*-------------------*) Procedure VeDiem; Begin PutPixel(xc+x,yc+y,Color); PutPixel(xc-x,yc+y,Color); PutPixel(xc-x,yc-y,Color); PutPixel(xc+x,yc-y,Color); End; (*-------------------*) Begin a2:=a*a; b2:=b*b; {Nhanh 1} x:=0; y:=b; p:=2*b2/a2 - 2*b + 1; While (b2/a2)*(x/y)<1 do Begin VeDiem; If p<0 then p:=p + 2*(b2/a2)*(2*x+3) else Begin p:=p - 4*y + 2*(b2/a2)*(2*x+3); y:=y-1; End; x:=x+1; End; {Nhanh 2} y:=0; x:=a; p:=2*(a2/b2) - 2*a + 1; While (a2/b2)*(y/x)<=1 do 18 Chương I. Các yếu tố cơ sở của ñồ họa Begin VeDiem; If p<0 then p:=p + 2*(a2/b2)*(2*y+3) else Begin p:=p - 4*x + 2*(a2/b2)*(2*y+3); x:=x-1; End; y:=y+1; End; End; 1. Thuật toán MidPoint Gợi ý: x2 y2 Phương trình Ellipse: + =1 a2 b2 Nhánh 1: 1 2 p1 = b2 - a 2 b + .a 4 If pi < 0 Then pi+1 = pi + b2 + 2b2xi+1 else pi+1 = pi + b2 + 2b2xi+1 - 2a2yi+1 Nhánh 2: 1 2 p1 = b2(xi + ) + a2(yi - 1)2 - a2b2 2 If pi > 0 Then pi+1 = pi + a2 - 2a2yi+1 else pi+1 = pi + a2 + 2b2xi+1 - 2a2yi+1 Procedure MidEllipse(xc,yc,a,b:Integer;Color:Byte); Var p,a2,b2:real; x,y:Integer; (*-------------------*) Procedure VeDiem; Begin PutPixel(xc+x,yc+y,Color); PutPixel(xc-x,yc+y,Color); PutPixel(xc-x,yc-y,Color); 19 Chương I. Các yếu tố cơ sở của ñồ họa PutPixel(xc+x,yc-y,Color); End; (*-------------------*) Begin a2:=a*a; b2:=b*b; {Nhanh 1} x:=0; y:=b; Vediem; p:=b2 - a2*b + 0.25*a2; While (b2/a2)*(x/y)<1 do Begin x:=x+1; If p<0 Then p:=p + b2 + 2*b2*x else begin y:=y-1; p:=p + b2 + 2*b2*x - 2*a2*y; end; Vediem; End; {Nhanh 2} p:=b2*(x+0.5) + a2*(y-1)*(y-1)- a2*b2 ; While y>0 do Begin y:=y-1; If p>0 Then p:=p + a2 - 2*a2*y else begin x:=x+1; p:=p + a2 + 2*b2*x - 2*a2*y; end; Vediem; End; 20 Chương I.

Các yếu tố cơ sở của ñồ họa End; 1. PHƯƠNG PHÁP VẼ ðỒ THỊ HÀM SỐ 1. Bài toán: Vẽ ñồ thị của hàm số y = f(x) trên ñoạn [Min,Max]. *Ý tưởng: Cho x chạy từ ñầu ñến cuối ñể lấy các tọa ñộ (x,f(x)) sau ñó làm tròn thành số nguyên rồi nối các ñiểm ñó lại với nhau.

Giải thuật: • Bước 1: Xác ñịnh ñoạn cần vẽ [Min,Max]. • Bước 2: - ðặt gốc tọa ñộ lên màn hình (x0,y0). - Chia tỷ lệ vẽ trên màn hình theo hệ số k. - Chọn bước tăng dx của mỗi ñiểm trên ñoạn cần vẽ.

• Bước 3: Chọn ñiểm ñầu cần vẽ: x = Min, tính f(x) ðổi qua tọa ñộ màn hình và làm tròn: x1:=x0 + Round(x.k); Di chuyển ñến (x1,y1): MOVETO(x1,y1); • Bước 4: Tăng x lên với số gia dx: x:=x + dx; ðổi qua tọa ñộ màn hình và làm tròn: x2:=x0 + Round(x.k); Vẽ ñến (x2,y2): LINETO(x2,y2); • Bước 5: Lặp lại bước 4 cho ñến khi x > Max thì dừng.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ