TỔNG QUAN VỀ ĐỒ HỌA MÁY TÍNH Đồ họa máy tính là một lãnh vực phát triển nhanh nhất trong Tin học. Nó được áp dụng rộng rãi trong nhiều lãnh vực khác nhau thuộc về khoa học, kỹ nghệ, y khoa, kiến trúc và giải trí. Thuật ngữ đồ họa máy tính (Computer Graphics) được đề xuất bởi nhà khoa học người Mỹ tên là William Fetter vào năm 1960 khi ông đang nghiên cứu xây dựng mô hình buồng lái máy bay cho hãng Boeing. Các chương trình đồ họa ứng dụng cho phép chúng ta làm việc...
CHƯƠNG I CÁC YẾU TỐ CƠ SỞ CỦA ĐỒ HỌA 1.1 TỔNG QUAN VỀ ĐỒ HỌA MÁY TÍNH Đồ họa máy tính lãnh vực phát triển nhanh Tin học Nó áp dụng rộng rãi nhiều lãnh vực khác thuộc khoa học, kỹ nghệ, y khoa, kiến trúc giải trí Thuật ngữ đồ họa máy tính (Computer Graphics) đề xuất nhà khoa học người Mỹ tên William Fetter vào năm 1960 ông nghiên cứu xây dựng mô hình buồng lái máy bay cho hãng Boeing Các chương trình đồ họa ứng dụng cho phép làm việc với máy tính cách thoải mái, tự nhiên 1.1.1 Giới thiệu đồ họa máy tính Đồ họa máy tính ngành khoa học Tin học chuyên nghiên cứu phương pháp kỹ thuật để mơ tả thao tác đối tượng giới thực máy tính Về chất: q trình xây dựng phát triển công cụ hai lĩnh vực phần cứng phần mềm hổ trợ cho lập trình viên thiết kế chương trình có khả đồ họa cao Với việc mô tả liệu thông qua hình ảnh màu sắc đa dạng nó, chương trình đồ họa thường thu hút người sử dụng tính thân thiện, dể dùng, kích thích khả sáng tạo nâng cao suất làm việc 1.1.2 CÁC KỸ THUẬT ĐỒ HỌA Dựa vào phương pháp xử lý liệu hệ thống, ta phân làm hai kỹ thuật đồ họa: 1.1.2.1 Kỹ thuật đồ họa điểm Chương I Các yếu tố sở đồ họa Nguyên lý kỹ thuật sau: hình ảnh hiển thị thơng qua pixel (từng mẫu rời rạc) Với kỹ thuật này, tạo ra, xóa thay đổi thuộc tính pixel đối tượng Các hình ảnh hiển thị lưới điểm rời rạc (grid), điểm có vị trí xác định hiển thị với giá trị nguyên biểu thị màu sắc dộ sáng điểm Tập hợp tất pixel grid tạo nên hình ảnh đối tượng mà ta muốn biểu diễn 1.1.2.2 Kỹ thuật đồ họa vector Nguyên lý kỹ thuật xây dựng mơ hình hình học (geometrical model) cho hình ảnh đối tượng, xác định thuộc tính mơ hình hình học, sau dựa mơ hình để thực q trình tơ trát (rendering) để hiển thị điểm mơ hình, hình ảnh đối tượng Ở kỹ thuật này, lưu trữ mơ hình tốn học thành phần mơ hình hình học với thuộc tính tương ứng mà khơng cần lưu lại tồn tất pixel hình ảnh đối tượng 1.1.3 Ứng dụng đồ họa máy tính Ngày nay, đồ họa máy tính sử dụng rộng rãi nhiều lĩnh vực khác như: Công nghiệp, thương mại, quản lý, giáo dục, giải trí, Sau số ứng dụng tiêu biểu: 1.1.3.1 Tạo giao diện (User Interfaces): chương trình ứng dụng WINDOWS, WINWORD, EXCEL đa số người sử dụng ưa chuộng nhờ tính thân thiện, dể sử dụng 1.1.3.2 Tạo biểu đồ dùng thương mại, khoa học kỹ thuật: Các biểu đồ tạo đa dạng, phong phú bao gồm hai chiều lẫn ba chiều góp phần thúc đẩy xu hướng phát triển mơ hình liệu hổ trợ đắc lực cho việc phân tích thơng tin trợ giúp định 1.1.3.3 Tự động hóa văn phịng chế điện tử: dùng ứng dụng đồ họa để in ấn tài liệu với nhiều loại liệu khác như: văn bản, biểu đồ, đồ thị nhiều loại hình ảnh khác 1.1.3.4 Thiết kế với trợ giúp máy tính (Computer aided design): Một lợi ích lớn máy tính trợ giúp người việc thiết kế Các ứng Chương I Các yếu tố sở đồ họa dụng đồ họa cho phép thiết kế thiết bị khí, điện, điện tử, tơ, máy bay, phần mềm AUTOCAD 1.1.3.5 Lĩnh vực giải trí, nghệ thuật: cho phép họa sĩ tạo hình ảnh hình máy tính Người họa sĩ tự pha màu, trộn màu, thực số thao tác: cắt, dán, tẩy, xóa, phóng to, thu nhỏ phần mềm PAINTBRUSH, CORELDRAW, 1.1.3.6 Lĩnh vực đồ: xây dựng in ấn đồ địa lý Một ứng dụng đồ họa hệ thống thông tin địa lý (GIS - Geographical Information System) 1.1.4 Các lĩnh vực đồ họa máy tính 1.1.4.1 Các hệ CAD/CAM (CAD – Computer Aided Design, CAM – Computer Aided Manufacture) Các hệ xây dựng tập hợp công cụ đồ họa trợ giúp cho việc thiết kế chi tiết hệ thống khác nhau: thiết bị khí, điện tử Chẳng hạn phần mềm Auto Cad hảng AutoDesk 1.1.4.2 Xử lý ảnh (Image Processing) Đây lĩnh vực xử lý liệu ảnh sống Sau trình xử lý ảnh, liệu đầu ảnh đối tượng Trong trình xử lý ảnh, sử dụng nhiều kỹ thuật phức tạp: khơi phục ảnh, xác định biên Ví dụ: phần mềm PhotoShop, Corel Draw, 1.1.4.3 Khoa học nhận dạng (Pattern Recognition) Nhận dạng lĩnh vực kỹ thuật xử lý ảnh Từ mẫu ảnh có sẵn, ta phân loại theo cấu trúc theo phương pháp xác định thuật tốn chọn lọc để phân tích hay tổng hợp ảnh cho thành tập hợp ảnh gốc, ảnh gốc lưu thư viện vào thư viện để nhận dạng ảnh khác Ví dụ: Phần mềm nhận dạng chữ viết (VnDOCR) viện Công nghệ Thông tin Hà Nội, nhận dạng vân tay, nhận dạng mặt người khoa học hình 1.1.4.4 Đồ họa minh họa (Presentation Graphics) Chương I Các yếu tố sở đồ họa Đây lĩnh vực đồ họa bao gồm công cụ trợ giúp cho việc hiển thị số liệu thống kê cách trực quan thông qua mẫu đồ thị biểu đồ có sẵn Chẳng hạn biểu đồ (Chart) phần mềm Word, Excel 1.1.4.5 Hoạt hình nghệ thuật Lĩnh vực đồ họa bao gồm công cụ giúp cho họa sĩ, nhà thiết kế phim ảnh chun nghiệp thực cơng việc thơng qua kỹ xảo vẽ tranh, hoạt hình kỹ xảo điện ảnh khác Ví dụ: Phần mềm xử lý kỹ xảo hoạt hình như: 3D Animation, 3D Studio Max , phần mềm xử lý kỹ xảo điện ảnh: Adobe Primiere, Cool 3D, 1.1.5 Tổng quan hệ đồ họa (Graphics System) 1.1.5.1 Hệ thống đồ họa Phần mềm đồ họa: Là tập hợp câu lệnh đồ họa hệ thống Các câu lệnh lập trình dùng cho thao tác đồ họa khơng ngơn ngữ lập trình thơng dụng PASCAL, C, hổ trợ Thơng thường, cung cấp tập công cụ thêm vào ngôn ngữ Tập công cụ dùng để tạo thành phần sở hình ảnh đồ họa như: Điểm, đoạn thẳng, đường tròn, màu sắc, Qua đó, nhà lập trình phải tạo chương trình đồ họa có khả ứng dụng cao Phần cứng đồ họa: Là thiết bị điện tử: CPU, Card, hình, chuột, phím giúp cho việc thực phát triển phần mềm đồ họa 1.1.5.2 Các thành phần hệ thống đồ họa Tập hợp công cụ phân loại dựa cơng việc hồn cảnh cụ thể: xuất, nhập, biến đổi ảnh, bao gồm: • Tập cơng cụ tạo ảnh gốc (output primitives): cung cấp công cụ cho việc xây dựng hình ảnh Các ảnh gốc bao gồm chuỗi ký tự, thực thể hình học điểm, đường thẳng, đa giác, đường trịn, • Tập cơng cụ thay đổi thuộc tính (attributes): dùng để thay đổi thuộc tính ảnh gốc Các thuộc tính ảnh gốc bao gồm màu sắc (color), kiểu đường thẳng (line style), kiểu văn (text style), mẫu tô vùng (area filling pattern), Chương I Các yếu tố sở đồ họa • Tập công cụ thay đổi hệ quan sát (viewing transformation): Một mà ảnh gốc thuộc tính xác định hệ tọa độ thực, ta cần phải chiếu phần quan sát ảnh sang thiết bị xuất cụ thể Các công cụ cho phép định nghĩa vùng quan sát hệ tọa độ thực để hiển thị hình ảnh • Tập công cụ phục vụ cho thao tác nhập liệu (input operations): Các ứng dụng đồ họa sử dụng nhiều loại thiết bị nhập khác bút vẽ, bảng, chuột, Chính vậy, cần xây dựng thêm công cụ để điều khiển xử lý liệu nhập cho có hiệu Một u cầu phần cứng khơng thể thiếu đặt cho phần mềm đồ họa là: tính dễ mang chuyển (portability), có nghĩa chương trình chuyển đổi cách dễ dàng kiểu phần cứng khác Nếu khơng có chuẩn hóa, chương trình thiết kế thường khơng thể chuyển đổi đến hệ thống phần cứng khác mà khơng viết lại gần tồn chương trình Sau nổ lực tổ chức chuẩn hóa quốc tế, chuẩn cho việc phát triển phần mềm đồ họa đời: GKS (Graphics Kernel System - Hệ đồ họa sở) Hệ thống ban đầu thiết kế tập cơng cụ đồ họa hai chiều, sau phát triển để mở rộng đồ họa ba chiều Ngoài ra, cịn có số chuẩn đồ họa phổ biến như: • CGI (Computer Graphics Interface System): hệ chuẩn cho phương pháp giao tiếp với thiết bị ngoại vi • OPENGL: thư viện đồ họa hảng Silicon Graphics • DIRECTX: thư viện đồ họa hảng Microsoft 1.2 MÀN HÌNH ĐỒ HỌA Mỗi máy tính có CARD dùng để quản lý hình, gọi Video Adapter hay Graphics Adapter Có nhiều loại adapter như: CGA, MCGA, EGA, VGA, Hercules Các adapter làm việc hai chế độ: văn (Text Mode) đồ họa (Graphics Mode) Có nhiều cách để khởi tạo mode đồ họa Ta sử dụng hàm $00 ngắt $10 BIOS với Mode sau: Chương I Các yếu tố sở đồ họa • Mode $12: chế độ phân giải 640x480x16 • Mode $13: chế độ phân giải 320x200x256 Ta viết thủ tục để khởi tạo chế độ đồ họa sau: Procedure InitGraph(Mode:Word); var Reg:Registers; Begin reg.ah := 0; reg.al := mode; intr($10,reg); End; Các bạn tham khảo thêm tài liệu lập trình hệ thống 1.3 CÁC KHÁI NIỆM 1.3.1 Điểm (Pixel) Trong hệ thống đồ họa, điểm biểu thị tọa độ số Ví du: Trong mặt phẳng, điểm cặp (x,y) Trong không gian ba chiều, điểm ba (x,y,z) Trên hình máy tính, điểm vị trí vùng nhớ hình dùng để lưu trữ thông tin độ sáng điểm tương ứng hình Số điểm vẽ hình gọi độ phân giải hình (320x200, 480x640, 1024x1024, ) Cách hiển thị thơng tin lên hình đồ họa: Vùng đệm hình hay cịn gọi nhớ hiển thị địa A000h:$0000h Vì vậy, để hiển thị thơng tin hình ta cần đưa thơng tin vào vùng đệm hình địa Có nhiều cách để vẽ điểm hình: dùng phục vụ BIOS truy xuất trực tiếp vào vùng nhớ hình • Nếu dùng phục vụ BIOS, ta dùng hàm $0C ngắt $10: Procedure PutPixel(Col,Row:Word; Color:Byte); Chương I Các yếu tố sở đồ họa Var reg:Registers; Begin reg.ah:=$0C; reg.al:=Color; reg.bh:=0; reg.cx:=Col; reg.dx:=Row; Intr($10,reg); End; • Nếu muốn truy xuất trực tiếp vào vùng đệm hình: Giả sử điểm (x,y) vẽ hình với độ phân giải 320x200x256 (mode 13h), điểm định vị vùng đệm địa segment A000h địa offset tính theo cơng thức: Offset = y*320 + x Ta viết thủ tục sau: Procedure PutPixel(x,y:Word; Color:Byte); Var Offset:Word; Begin Offset:=(y shl 8) + (y shl 6) + x; Mem[$A000:Offset]:=Color; End; 1.3.2 Các biểu diễn tọa độ Hầu hết chương trình đồ họa dùng hệ tọa độ Decartes Ta biến đổi: Chương I Các yếu tố sở đồ họa O MaxX Y O Y X X MaxY Tọa độ giới thực Tọa độ thiết bị hình Hình 1.1 1.3.3 Đoạn thẳng Trong hệ thống đồ họa, đoạn thẳng biểu thị việc “tô” đoạn thẳng điểm đầu mút kéo dài gặp điểm đầu mút 1.4 CÁC THUẬT TOÁN VẼ ĐOẠN THẲNG 1.4.1 Bài toán: Vẽ đoạn thẳng qua điểm A(x1,y1) B(x2,y2) * Trường hợp x1=x2 y1=y2: đơn giản * Trường hợp đường thẳng có hệ số góc m: Ý tưởng: Vì Pixel vẽ vị trí nguyên nên đường thẳng vẽ giống hình bậc thang (do làm trịn) Vấn đề đặt chọn tọa độ nguyên gần với đường thẳng 1.4.2 Thuật toán DDA (Digital differential analyzer) Xét đường thẳng có hệ số góc 01: ta hốn đổi vai trị x,y cho Nếu chọn ∆y=1 thì: xk+1 = xk + 1/m Chương I Các yếu tố sở đồ họa Tương tự, điểm B nằm bên trái A nằm bên phải thì: yk+1 = yk - m (01, ∆y= -1) Tóm lại: Ta có thuật tốn vẽ đường thẳng DDA sau: ¾ Nhập A(x1,y1) B(x2,y2) ¾ Tính ∆x = x2 - x1 ∆y = y2 - y1 Step = Max(|∆x| , |∆y|) ¾ Khởi tạo giá trị: IncX = ∆x/Step; x = x1; IncY = ∆y/Step; {bước tăng vẽ} y = y1; {Chọn điểm vẽ đầu tiên} Vẽ điểm (x,y); ¾ Cho i chạy từ đến Step: x = x + IncX; Vẽ điểm (Round(x),Round(y)) y = y + IncY; Từ ta có thủ tục vẽ đoạn thẳng theo thuật toán DDA sau: Procedure DDALine(x1,y1,x2,y2:Integer); var dx,dy,step,i:integer; xInc,yInc,x,y:real; Begin dx:=x2-x1; dy:=y2-y1; If abs(dx)>abs(dy) Then step:=abs(dx) else step:=abs(dy); xInc:=dx/step; yInc:=dy/step; x:=x1; y:=y1; Putpixel(round(x),round(y),15); for i:=1 to step Begin x:=x+xInc; y:=y+yInc; Putpixel(round(x),round(y),15); End; Chương I Các yếu tố sở đồ họa End; 1.4.3 Thuật tốn Bresenham Phương trình đường thẳng phát biểu dạng: y = m.x + b (1) Phương trình đường thẳng qua điểm: y − y1 x − x1 = y − y1 x − x1 Đặt (*) yi+ y yi ∆x = x2 - x1 ∆y = y2 - y1 (*) ⇔ y = x Suy m = ∆y ∆y + y1 - x1 ∆x ∆x ∆y ∆x xi xi+1 x +2 Hình 1.2 ∆y = m ∆x (2) b = y1 - m.x1 (3) nên Ta xét trường hợp hệ số góc 0