Bài giảng học phần đồ họa máy tính với C (đại học Hồng Đức) giảng viên Lê Thị Hồng CHƯƠNG 1: GIỚI THIỆU VỀ ĐỒ HỌA MÁY TÍNH 1.1. KHÁI NIỆM VỀ ĐỒ HỌA MÁY TÍNH Đồ họa máy tính là tất cả những gì liên quan đến việc sử dụng máy tính để phát sinh ra hình ảnh. Các vấn đề liên quan tới công việc này bao gồm: tạo, lưu trữ, thao tác trên các mô hình (các mô tả hình học của đối tượng) và các ảnh. Đồ họa máy tính bao gồm việc thiết kế phần cứng như thiết bị hiển thị, các thuật toán cần thiết để phát sinh các đường trên các thiết bị này, các phần mềm được sử dụng cho cả người lập trình hệ thống và người lập trình ứng dụng đồ họa và các chương trình ứng dụng tạo ảnh bằng máy tính. Đồ họa máy tính cung cấp một trong những phương cách tự nhiên nhất cho việc truyền đạt thông tin với máy tính. Ngày nay, trong nhiều quá trình thiết kế, cài đặt và xây dựng, thông tin mà hình ảnh mang lại là hầu như không thể thiếu được. Đồ họa máy tính tương tác là một trong những phương tiện mang lại thêm nhiều sự thuận lợi cho người dùng trong việc phát sinh hình ảnh kể từ khi có phát minh của máy ảnh và truyền hình. Có nhiều cách tiếp cận trong việc học môn đồ họa, trải rộng từ việc nghiên cứu phần cứng tới việc học để sử dụng đồ họa máy tính chỉ trong một lĩnh vực chuyên biệt nào đó như là thiết kế mạch tích hợp cao. Ở đây chúng ta tiếp cận từ góc độ của người lập trình ứng dụng, đó là người sử dụng tất cả các hỗ trợ của phần cứng, các công cụ phần mềm để xây dựng nên các ứng dụng. Tuy nhiên để có thể thiết kế và cài đặt các chương trình ứng dụng đồ họa được tốt, ngoài việc tìm hiểu các khả năng của công cụ lập trình, chúng ta cũng cần phải nắm vững các khái niệm về phần cứng; các vấn đề, các nguyên lí liên quan đến cài đặt phần mềm, các thuật toán, các ứng dụng,… 1.2. MỘT SỐ ỨNG DỤNG CỦA ĐỒ HỌA MÁY TÍNH Đồ họa máy tính được sử dụng trong rất nhiều lĩnh vực khác nhau như công nghiệp, thương mại, quản lí, giáo dục, giải trí, … Số lượng các chương trình đồ họa ứng dụng thật khổng lồ và phát triển liên tục, sau đây là một số ứng dụng tiêu biểu: 1.2.1. Hỗ trợ thiết kế (CAD Computer Aided Design): cao ốc, ô tô, máy bay, tàu thủy, tàu vũ trụ, máy tính, trang trí mẫu vải, và rất nhiều sản phẩm khác. Gồm 2 bước chính Phác thảo của phần khung, mà từ đó có thể thấy được toàn bộ hình dạng và các thành phần bên trong của các đối tượng. Sử dụng kĩ thuật này, người thiết kế sẽ dễ dàng nhận thấy ngay các thay đổi của đối tượng khi tiến hành hiệu chỉnh các chi tiết hay thay đổi góc nhìn,…. Kết hợp các mô hình chiếu sáng, tô màu và tạo bóng bề mặt sẽ được kết hợp để tạo ra kết quả cuối cùng rất gần với thế giới thực. 1.2.2. Biểu diễn thông tin Dùng để phát sinh các biểu đồ, đồ thị, … dùng minh họa mối quan hệ giữa nhiều đối tượng với nhau. Dùng để tóm lược các dữ liệu về tài chính, thống kê, kinh tế, khoa học, toán học, … giúp cho việc nghiên cứu, quản lí, … một cách có hiệu quả. 1.2.3. Giải trí, nghệ thuật Các chương trình máy tính như Paint Shop Pro, Adobe Photoshop, 3D Studio, … hỗ trợ rất đắc lực cho các họa sĩ, các nhà tạo mẫu trong việc thiết kế các hình ảnh sống động và rất thực. Giúp tạo ra các chương trình trò chơi, giải trí; hỗ trợ cho các kĩ xảo điện ảnh, cho các nhà làm phim. Có nhiều bộ phim rất nổi tiếng nhờ vào kĩ xảo điện ảnh như : Công viên Khủng long kỉ Jura (Jurassic Park), Titanic, Thế giới nước (Water World), …
Trang 1TRƯỜNG ĐẠI HỌC HỒNG ĐỨC
KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BÀI GIẢNG HỌC PHẦN
ĐỒ HOẠ MÁY TÍNH VỚI C
(DÙNG CHO ĐẠI HỌC & CAO ĐẲNG CNTT)
Giảng viên: Lê Thị Hồng
Trang 2CHƯƠNG 1: GIỚI THIỆU VỀ ĐỒ HỌA MÁY TÍNH
1.1. KHÁI NIỆM VỀ ĐỒ HỌA MÁY TÍNH
Đồ họa máy tính là tất cả những gì liên quan đến việc sử dụng máy tính để phát sinh ra hình ảnh.Các vấn đề liên quan tới công việc này bao gồm: tạo, lưu trữ, thao tác trên các mô hình (các mô tả hìnhhọc của đối tượng) và các ảnh
Đồ họa máy tính bao gồm việc thiết kế phần cứng như thiết bị hiển thị, các thuật toán cần thiết đểphát sinh các đường trên các thiết bị này, các phần mềm được sử dụng cho cả người lập trình hệ thống vàngười lập trình ứng dụng đồ họa và các chương trình ứng dụng tạo ảnh bằng máy tính
Đồ họa máy tính cung cấp một trong những phương cách tự nhiên nhất cho việc truyền đạt thôngtin với máy tính Ngày nay, trong nhiều quá trình thiết kế, cài đặt và xây dựng, thông tin mà hình ảnh
mang lại là hầu như không thể thiếu được
Đồ họa máy tính tương tác là một trong những phương tiện mang lại thêm nhiều sự thuận lợi chongười dùng trong việc phát sinh hình ảnh kể từ khi có phát minh của máy ảnh và truyền hình
Có nhiều cách tiếp cận trong việc học môn đồ họa, trải rộng từ việc nghiên cứu phần cứng tới việchọc để sử dụng đồ họa máy tính chỉ trong một lĩnh vực chuyên biệt nào đó như là thiết kế mạch tích hợpcao Ở đây chúng ta tiếp cận từ góc độ của người lập trình ứng dụng, đó là người sử dụng tất cả các hỗ trợcủa phần cứng, các công cụ phần mềm để xây dựng nên các ứng dụng
Tuy nhiên để có thể thiết kế và cài đặt các chương trình ứng dụng đồ họa được tốt, ngoài việc tìmhiểu các khả năng của công cụ lập trình, chúng ta cũng cần phải nắm vững các khái niệm về phần cứng;các vấn đề, các nguyên lí liên quan đến cài đặt phần mềm, các thuật toán, các ứng dụng,…
1.2. MỘT SỐ ỨNG DỤNG CỦA ĐỒ HỌA MÁY TÍNH
Đồ họa máy tính được sử dụng trong rất nhiều lĩnh vực khác nhau như công nghiệp, thương mại,quản lí, giáo dục, giải trí, … Số lượng các chương trình đồ họa ứng dụng thật khổng lồ và phát triển liêntục, sau đây là một số ứng dụng tiêu biểu:
tính, trang trí mẫu vải, và rất nhiều sản phẩm khác Gồm 2 bước chính
- Phác thảo của phần khung, mà từ đó có thể thấy được toàn bộ hình dạng và các thành phần bên trongcủa các đối tượng Sử dụng kĩ thuật này, người thiết kế sẽ dễ dàng nhận thấy ngay các thay đổi của
đối tượng khi tiến hành hiệu chỉnh các chi tiết hay thay đổi góc nhìn,…
- Kết hợp các mô hình chiếu sáng, tô màu và tạo bóng bề mặt sẽ được kết hợp để tạo ra kết quả cuối
cùng rất gần với thế giới thực
1.2.2. Biểu diễn thông tin
- Dùng để phát sinh các biểu đồ, đồ thị, … dùng minh họa mối quan hệ giữa nhiều đối tượng với nhau
- Dùng để tóm lược các dữ liệu về tài chính, thống kê, kinh tế, khoa học, toán học, … giúp cho việc
nghiên cứu, quản lí, … một cách có hiệu quả
1.2.3. Giải trí, nghệ thuật
- Các chương trình máy tính như Paint Shop Pro, Adobe Photoshop, 3D Studio, … hỗ trợ rất đắc lực
cho các họa sĩ, các nhà tạo mẫu trong việc thiết kế các hình ảnh sống động và rất thực
- Giúp tạo ra các chương trình trò chơi, giải trí; hỗ trợ cho các kĩ xảo điện ảnh, cho các nhà làm phim
Có nhiều bộ phim rất nổi tiếng nhờ vào kĩ xảo điện ảnh như : Công viên Khủng long kỉ Jura (JurassicPark), Titanic, Thế giới nước (Water World), …
1
Trang 31.2.4. Giáo dục và đào tạo
- Hiện nay các chương trình mô phỏng cấu trúc của các vật thể, tiến trình của các phản ứng hóa học,
hoạt động của các gói tin trên mạng máy tính, … được dùng rất nhiều trong việc hỗ trợ giảng dạy
- Trong đào tạo, các ứng dụng mô phỏng được dùng để kiểm tra trình độ người lái, huấn luyện phi
công, điều khiển giao thông, …
1.2.5. Giao tiếp người máy
- Mọi ứng dụng đều phải có giao diện giao tiếp với người dùng Giao diện đồ họa thực sự là một cuộc
cách mạng mang lại sự thuận tiện và thoải mái cho người dùng ứng dụng Các ứng dụng dựa trên hệđiều hành MS Windows là một minh họa rất trực quan của giao diện đồ họa
1.3 TỔNG QUAN VỀ MỘT HỆ ĐỒ HỌA: Một hệ đồ họa có hai thành phần chính:
- Phần cứng: thiết bị hiển thị (màn hình, máy in,…) và nhập dữ liệu (bàn phím, chuột,…)
Màn hình CRT (cathode ray tube).
Một chùm các tia điện tử (tia âm cực) phát ra từ một súng điện tử, vượt qua cuộn lái tia dẫn đến vịtrí xác định trên màn hình được phủ một lớp phosphor Tại mỗi vị trí tương tác với tia điện tử hạt
phosphor sẽ phát lên một chấm sáng nhỏ Nhưng chấm sáng sẽ mờ dần rất nhanh nên cần có cách nào
nó duy trì ảnh trên màn hình Một trong các cách là: lặp đi lặp lại nhiều lần việc vẽ lại ảnh thật nhanh
bằng cách hướng các tia điện tử trở lại ví trí cũ (làm tươi)
Số lượng tối đa các điểm có thể hiển thị trên một CRT được gọi là độ phân giải
Tia điệntửSúng
Ưu điểm: Đáp ứng nhanh (có độ phân giải cao)
-Màu sắc đa dạng (Có độ sâu và rộng)
-Màu sắc bão hoà và tự nhiên
-Công nghệ không quá đắt và hoàn thiện
-Góc nhìn rộng, tương phản và độ sáng cao
Nhược điểm:
-Lớn và nặng (typ 70x70 cm, 15 kg)
-Tiêu tốn nguồn điện cao (typ 40W)
-Có hại cho sức khoẻ vì trường điện từ và từ tính
-Màn hình nhấp nháy (at 50-80Hz)
- Hình hay bị méo tại 4 góc
Màn hình dạng điểm (Raster Display):
n dòng
m cột
pixel
Hình 1.3 Màn hình raster 2
Trang 4Thường gặp nhất trong số các dạng màn hình sử dụng CRT trên công nghệ truyền hình Mỗi điểmtrên màn hình được gọi là pixel Các thông tin về ảnh hiển thị trên màn hình được lưu trữ trong mộtvùng bộ nhớ gọi là vùng đệm làm tươi hay là vùng đệm khung Vùng lưu trữ tập các giá trị cường độsáng của toàn bộ các điểm trên màn hình và luôn tồn tại một cách song ánh giữa mỗi điểm trên màn hình
và mỗi phần tử trong vùng này
Khi hiển thị ảnh trên màn hình, tia điện tử sẽ quét từng hàng (scan line) từ trên xuống dưới và từtrái qua phải với tần xuất 30 lần/s Trong trường hợp này, khoảng thời gian giữa các lần làm tươi lại cácvùng trên màn hình lớn Do đó gây ra hiện tượng nhấp nháy Để khắc phục hiện tượng trên, người tachia các dòng quét thành 2 nhóm:
có 2b giá trị mầu phân biệt cho pixel đó
Trong các màn hình màu, người ta định nghĩa tập các màu làm việc trong một bảng tra (LookUpTable - LUT) Mỗi phần tử của LUT được định nghĩa một bộ ba giá trị (RGB) mô tả một màu nào đó Khicần sử dụng một màu, ta chỉ cần chỉ định số thứ tự tương ứng của màu đó trong LUT, số phần tử trongbảng LUT chính là số màu có thể được hiển thị cùng một lúc trên màn hình
Việc làm tươi trên màn hình dạng này được thực hiện ở tốc độ 60 - 80 frame/giây Đôi khi tốc độlàm tươi còn được biểu diễn bằng đơn vị Hertz (Hz - số chu kỳ trên/giây), trong đó một chu kỳ tương ứngvới một frame Vậy tốc độ làm tươi 60 frame/giây đơn giản là 60 Hz Khi đạt đến cuối mỗi dòng quét, tiađiện tử quay trở lại bên trái của màn hình để bắt đầu dòng quét kế tiếp Việc quay trở về bên trái mànhình sau khi làm tươi mỗi dòng quét được gọi là tia hồi ngang (Horizontal retrace) Và tới cuối mỗiframe, tia điện tử (tia hồi dọc - Vertical retrace) quay trở lại góc bên trái của màn hình để chuẩn bị bắt đầuframe kế tiếp
* Màn hình tinh thể lỏng (Liquid Crystal Display – LCD)
Trang 5Dựa vào công nghệ truyền ánh sáng qua điện cực mà đặt giữa là cuộn dây xoắn Khi chưa có từtrường (chưa có dòng điện) ở cuộn dây thì ánh sáng truyền thẳng, khi có từ trường thì ánh sáng truyền đổichiều.
Trang 6Hình 1.5 Công nghệ truyền ánh sáng trong màn hình tinh thể lỏng
3
Trang 7Nhận xét:
- Hình dáng nhỏ, trọng lượng nhẹ (approx 1/6 of - Giá thành cao (presently 3x CRT)
CRT, typ 1/5 of CRT)
- Tiêu tốn nguồn thấp (typ 1/4 of CRT)
- Góc nhìn hẹp hơn (typ +/- 50 degrees)
- Độ tương phản thấp (typ 1:100)
- Màn hình phẳng tuyệt đối nên không méo tại - Độ chói (độ ngời) thấp hơn (typ 200 cd/m2)
các góc
- Màu sắc đều, ảnh sinh động
- Không bị hiệu ứng điện từ trường
- Có thể màn hình vừa lớn vừa rộng (>20 inch)
* CÁC HỆ MÀU
Trong tin học, vấn đề cần quan tâm là mối tương tác qua lại giữa sự cảm nhận màu sắc của conngười với các bộ phận phần cứng hiển thị màu sắc của màn hình máy tính và với các phần mềm thiết kếtrên nó Bảng dưới đây sẽ trình bày mối quan hệ này:
Không gian màu do đó được đưa ra để định các màu hiển thị trên máy tính bởi vì chúng làm đơngiản hóa các thao tác tính toán cần thiết cho việc chuyển đổi màu sắc Không gian màu có thể được thiết
kế hoặc là dựa trên cơ sở của bộ phát sinh màu của phần cứng (ví dụ như không gian RGB) hoặc là dựatrên sự cảm nhận màu sắc của mắt (như không gian HSL) Với một ứng dụng, việc chọn không gian màunào để sử dụng tùy thuộc vào một số nhân tố sau: độ chính xác mà các nhà thiết kế cần kiểm soát màusắc, yêu cầu về sự tương tác giữa các màu sắc và tốc độ các tính toán cho ứng dụng đó
Không gian RGB
Không gian RGB mô tả màu sắc bằng ba thành phần Red, Green, Blue Không gian này được
Trang 8minh họa bằng một khối lập phương với các trục chính R, G, B.
Mỗi màu trong không gian RGB đều được biểu diễn như là một vector thông qua ba vector cơ sở
là Red, Green, Blue Do đó, ứng với các tổ hợp khác nhau của ba màu này sẽ cho ta một màu mới
Trang 9Sự cảm nhận của người Đặc điểm phần cứng Đặc điểm phần mềm
Sắc độ màu (Hue) Bước sóng (WaveLength)
Độ bão hòa (Saturation) Sự thuần nhất của màu
Sự "rung" của màn hình Tốc độ làm tươi (refresh)
Hình 1.6 - Mô hình không gian RGB
4
Trang 10Một số thuận lợi khi dùng không gian RGB :
- Không gian RGB là chuẩn công nghiệp cho các thao tác đồ họa máy tính Các thao tác màu sắc cóthể được tính toán trên các không gian màu khác nhưng cuối cùng cần phải chuyển về không gianRGB để có thể hiển thị trên màn hình (do thiết kế của phần cứng dựa trên mô hình RGB)
- Có thể chuyển đổi qua lại giữa không gian RGB với các không gian màu khác như CIE, CMY,HSL, HSV,
- Các thao tác tính toán trên không gian RGB thường đơn giản hơn
Không gian HSL
Không gian này có chú trọng hơn không gian RGB đến các thành phần của sự cảm nhận màu sắccủa mắt (Hue, Saturation, Lightness) Tuy nhiên, không gian HSL thực ra cũng chỉ là một phép biến đổigần đúng của không gian RGB mà thôi Không giống như các không gian màu khác xây dựng trên sự cảmnhận màu sắc của mắt, không gian HSL vẫn còn bị lệ thuộc vào phần cứng của CRT
Không gian HSL được biểu diễn trong hệ tọa độ trụ, hình minh họa là hai hình nón úp vào nhau
H (Hue) là toạ độ ứng với góc quay, S (Saturation) là tọa độ gốc, L là trục thẳng đứng Hầu hết các màuđạt bão hòa khi S = 1 và L = 0.5
Trang 11Hình 1.7 - Mô hình không gian HSL
Một số thuận lợi của không gian HSL :
- Không gian HSL gần với sự cảm nhận các thuộc tính màu sắc của con người hơn không gian RGB(tuy cách tiếp cận đã đơn giản hóa đi nhiều) Các màu được xác định dễ dàng hơn chẳng hạn do Hquay quanh trục đứng nên các màu bù được xác định một cách dễ dàng, đối với các giá trị
lightness cũng vậy
- Việc kiểm soát các màu cơ sở HSL dễ hơn cho người mới làm quen với các chương trình đồ họa
5
Trang 12Hình 1.8 - Mô hình không gian HSV
Theo cách này, các màu đạt bão hòa khi S=1 và V=1 Trong không gian HSV các màu được chuẩnhóa về số các gam (gamut) màu của thiết bị hiển thị
Một số thuận lợi của không gian HSV :
- Không gian HSV dễ dàng đáp ứng các màu sắc của các chương trình đồ họa do được xây dựng dựatrên sự bắt chước luật trộn màu của người họa sĩ Ví dụ: Khi cần thêm màu trắng vào, phải đặtV=S=1 sau đó giảm S từ từ cho tới khi đạt được màu vừa ý; hay khi cần thêm màu đen vào, điều đó
có nghĩa là giảm V (cường độ sáng) và cố định S,
- Do không cần sử dụng các phép biến đổi lượng giác khi muốn chuyển sang không gian RGB nênkhông gian HSV có nhiều thuận lợi về mặt tính toán hơn so với không gian HSL
Một số bất lợi :
- Cần có các phép hiệu chỉnh gamma
Trang 13Bảng so sánh giữa các không gian màu
Trang 14RGB HSL HSV
Chuẩn công nghiệp cho các
thao tác đồ họa máy tính
Hình thức biến đổi khác củakhông gian RGB
Hình thức biến đổi khác củakhông gian RGB
Liên hệ trực tiếp với phần cứng Liên hệ gần hơn với sự cảm
nhận màu sắc của con người
Liên hệ gần hơn với sự cảmnhận màu sắc của con người
Là chuyển đổi cuối cùng cho tất
cả các nhu cầu hiển thị
Đòi hỏi các phép biến đổi phứctạp
Đã đơn giản hóa các thao táctính toán
6
Trang 15Không thể chuyển sang màn
hình khác (phụ thuộc thiết bị)
Độc lập thiết bị Độc lập thiết bị
Không có sự tương ứng 1-1 với
cách cảm nhận màu của người
Mô hình là hình lập phương Mô hình là hai hình nón úp
vào nhau
Mô hình là hình nón đơnĐược chuẩn hóa về 1 Được chuẩn hóa về 1 Được chuẩn hóa về 1
Độ bão hòa đạt max khi S =1 Độ bão hòa đạt max khi S =1,
Bàn phím : Xuất hiện trong hầu hết các máy tính, nó là thiết bị để nhập dữ liệu dạng văn bản và
số Đây là loại thiết bị quen thuộc nhất với người sử dụng tuy có hạn chế là tương tác không cao
Chuột : Cùng với sự xuất hiện của các ứng dụng đồ họa tương tác cao, chuột là thiết bị nhập ngày
càng quen thuộc với người sử dụng Người ta dùng chuột để trỏ và chọn (point-click) các chức năng phùhợp với yêu cầu của mình Bằng cách này, giao tiếp giữa người dùng và máy tính càng ngày càng thân
thiện và dễ dàng hơn Ngoài ra chúng ta cũng có một số thiết bị nhập khác cùng họ với chuột như trackball, …
1.3.2. Phần mềm
Phần mềm đồ họa có thể phân thành 2 loại: các công cụ lập trình và các trình ứng dụng đồ họa
phục vụ cho một mục đích nào đó Các công cụ lập trình cung cấp một tập các hàm đồ họa có thể đượcdùng trong các ngôn ngữ lập trình cấp cao như C, Pascal, Ví dụ như các thư viện đồ họa của các ngônngữ như C, Pascal hay GL (Graphics Library) của Silicon Graphics Các hàm cơ sở của nó bao gồm việctạo các đối tượng cơ sở của hình ảnh như đoạn thẳng, đa giác, đường tròn, …, thay đổi màu sắc, chọn
khung nhìn, áp dụng các phép biến đổi, … Trong khi đó, các ứng dụng đồ họa được thiết kế cho nhữngngười dùng không phải là lập trình viên, cho phép người dùng tạo các đối tượng, hình ảnh, … mà khôngcần quan tâm tới việc chúng được tạo ra như thế nào Ví dụ như là Photoshop, AutoCAD, …
Biểu diễn tọa độ
Thông thường các hệ đồ họa sử dụng hệ tọa độ Descartes để mô tả đối tượng Nếu các tọa độ củađối tượng được mô tả trong các hệ tọa độ khác như tọa độ cầu, …, chúng phải được chuyển về tọa độ
Descartes trước khi dùng
Quy trình hiển thị đối tượng
Trước tiên chúng ta mô tả các đối tượng thành phần của một ảnh phức tạp trong các hệ tọa độ
riêng để thuận tiện cho việc biểu diễn tọa độ của chúng Các hệ tọa độ này được gọi là hệ tọa độ mô hìnhhay còn gọi là hệ tọa độ cục bộ Một khi các đối tượng thành phần được biểu diễn xong, chúng ta sẽ đặtchúng vào các vị trí tương ứng trong ảnh sử dụng hệ tọa độ thế giới thực Sau cùng, các mô tả của ảnh
trong hệ tọa độ thế giới thực sẽ được chuyển đến một hoặc nhiều hệ tọa độ khác nhau của thiết bị hiển thị,tùy vào chúng ta muốn hiển thị trên thiết bị nào Các hệ tọa độ này còn được gọi là hệ tọa độ thiết bị Các
mô tả trong các hệ tọa độ cục bộ và hệ tọa độ thế giới thực cho phép chúng ta sử dụng thứ nguyên thíchhợp cho các đơn vị đo mà không phải bị ràng buộc gì của từng thiết bị hiển thị cụ thể
7
Trang 16Hình 1.13 – Quy trình hiển thị đối tượng
Thông thường, các hệ đồ họa chuyển các mô tả trong hệ tọa độ thế giới thực tới hệ tọa độ thiết bịchuẩn (normalized device coordinates) có các chiều là đơn vị trước khi chuyển tới hệ tọa độ thiết bị Điềunày làm cho hệ thống độc lập với nhiều loại thiết bị khác nhau
1.4. Quản lý màn hình đồ họa
1.4.1. Card màn hình Tính đồng bộ của Card màn hình
Mỗi màn hình nối với máy PC có những thông số kỹ thuật riêng và được điều khiển bởi một vỉ(Card) tương ứng Trên thị trường ta thường gặp các loại màn hình thông dụng sau đây:
- MA – Monochrome Adapter: Màn hình đen trắng (đơn sắc)
- CGA – Color/Graphics Adapter: Màn hình đồ họa/màu
- EGA – Enhanced Graphics Adapter: Màn hình đồ họa hoàn thiện EGA
- VGA – Vidio Graphics Array – Màn hình hiển thị màu
- LCD- Liquid Crystal Displays- Màn hình tinh thể lỏng
Ta sẽ gọi vùng nhớ được hệ thống cấp phát tự động cho mỗi mode nói trên là vùng nhớ màn hình
và viết tắt là VM (Video Memory) Mỗi VM được đặc trưng qua 2 tham số: Địa chỉ đầu tiên của VM vàdung lượng của nó
Để giảm được việc trình bày, ta chọn mode đồ họa 19 với ưu điểm là dễ cài đặt chế độ truy nhậptrực tiếp
1.4.3. Các phương pháp truy nhập màn hình đồ hoạ
Ngoài phương thức gọi các thủ tục và hàm trong thư viện đồ họa có sẵn người ta thường nói tới 3phương pháp truy nhập màn hình:
- Phương pháp 1: Thông qua thủ tục (Ngắt) của dos.
- Phương pháp 2: Thông qua thủ tục của Bios.
- Phương pháp 3: Truy nhập trực tiếp đến bộ nhớ.
BÀI TẬP
1 Khái niệm đồ họa máy tính Các lĩnh vực ứng dụng của đồ họa máy tính
2 Cấu tạo và nguyên lí hoạt động của màn hình dạng điểm
3 Một màn hình có kích thước theo chiều ngang là 12 inche, chiều dọc là 9.6 inch Hãy cho biết đườngkính của mỗi điểm trên màn hình nếu độ phân giải là 1280x1024 và tỉ số phương là 1
4 Các hệ màu Mối liên hệ giữa chúng
5 Quy trình hiển thị đối tượng Ý nghĩa của các hệ tọa độ
8
Trang 17CHƯƠNG 2: CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
2.1. CÁC ĐỐI TƯỢNG ĐỒ HỌA CƠ SỞ
2.1.1 Hệ tọa độ thế giới thực và hệ tọa độ thiết bị
a) Hệ tọa độ thế giới thực
Hệ tọa độ thế giới thực (hay hệ tọa độ thực) là hệ tọa độ được dùng mô tả các đối tượng thế giớithực Một trong các hệ tọa độ thực thường được dùng nhất đó là hệ tọa độ Descartes Với hệ tọa độ này,bất kì một điểm nào trong mặt phẳng cũng được mô tả bằng một cặp tọa độ (x, y) trong đó x, y R Gốctọa độ là điểm O có tọa độ (0, 0) Các trục tọa độ có chiều dương được quy ước như hình 2.3; Ox, Oy lầnlượt được gọi là trục hoành, trục tung; x là khoảng cách từ điểm đến trục hoành hay còn được gọi làhoành độ, y là khoảng cách từ điểm đến trục tung hay còn được gọi là tung độ
Các tọa độ thế giới thực cho phép người dùng sử dụng bất kì một thứ nguyên quy ước như foot,
cm, mm, km, inch, nào và có thể lớn nhỏ tùy ý
- Các tọa độ x, y của hệ tọa độ thiết bị không thể lớn tùy ý mà đều bị giới hạn trong một khoảng nào
đó Một số thiết bị chỉ cho x chạy trong đoạn[0,639], y chạy trong đoạn [0,479] Khoảng giới hạncác tọa độ x, y là khác nhau đối với từng loại thiết bị khác nhau
Trang 18Hình 2.1 – Hệ tọa độ thực (a) và hệ tọa độ thiết bị (b)
Hệ tọa độ với các hướng của các trục tọa độ như trên còn được gọi là hệ tọa độ theo quy ước bàntay phải
Ngoài ra do cách tổ chức bộ nhớ nên thông thường các hệ tọa độ thiết bị thường dựa trên hệ tọa độtheo quy ước bàn tay trái
Trang 19Hình 2.2 - Hệ tọa độ theo quy ước bàn tay phải (a) và quy ước bàn tay trái (b)
Trang 20Một đường thẳng có thể xác định nếu biết hai điểm thuộc nó Phương trình đường thẳng đi qua
hai điểm (x1, y1) và (x2, y2) có dạng sau :
hay ở dạng tương đương :
Khai triển ta có dạng : , trong đó:
Đây còn được gọi là phương trình đoạn chắn của đường thẳng
Nếu khai triển dưới dạng :
và đặt thì phương trình đường thẳng sẽ có
dạng , dạng này được gọi là phương trình tổng quát của đường thẳng
Phương trình tham số của đường thẳng có dạng các tọa độ x, y được mô tả qua một thành phần thứ
ba là t Dạng này rất thuận tiện khi khảo sát các đoạn thẳng
Nếu , ta có các điểm (x,y) thuộc về đoạn thẳng giới hạn bởi hai điểm (x1, y1) và (x2, y2),nếu , ta sẽ có toàn bộ đường thẳng
Một đoạn thẳng là một đường thẳng bị giới hạn bởi hai điểm đầu, cuối.
Trang 21Hình 2.3 – Dạng tham số của phương trình đường thẳng Đường gấp khúc là tập các đoạn thẳng nối với nhau một cách tuần tự Các đoạn thẳng này không
nhất thiết phải tạo thành một hình khép kín và các đoạn có thể cắt lẫn nhau Điểm giao của hai đoạn thẳngđược gọi là đỉnh Các đường gấp khúc được xác định qua danh sách các đỉnh, mỗi đỉnh được cho bởi cáccặp tọa độ
Một đa giác là một đường gấp khúc có điểm đầu và điểm cuối trùng nhau.
Trang 22Hình 2.4 – Đường gấp khúc (a) và đa giác (b)
10
Trang 23Các thuộc tính của đoạn thẳng bao gồm :
- Màu sắc
- Độ rộng của nét vẽ
- Kiểu nét vẽ của đoạn thẳng : có thể là một trong các dạng như hình 2.7 Hầu hết các công cụ đồ
họa đều định nghĩa tập các kiểu nét vẽ đoạn thẳng có thể dùng và cho phép người dùng định nghĩakiểu đoạn thẳng của mình thông qua một mẫu (pattern) gồm các số 0, 1
Đối với đường gấp khúc, các đoạn thẳng trong cùng một đường gấp khúc thì có cùng một thuộctính
Hình 2.5 – Một số kiểu nét vẽ của đoạn thẳng 2.1.4 Vùng tô
Một vùng tô bao gồm đường biên và vùng bên trong Đường biên là một đường khép kín ví dụ
như đa giác
Các thuộc tính của vùng tô bao gồm:
- Thuộc tính của đường biên : chính là các thuộc tính như thuộc tính của đoạn thẳng
- Thuộc tính của vùng bên trong : bao gồm màu tô và mẫu tô
Hình 2.6 – Vùng tô với các dạng đường biên và mẫu tô khác nhau 2.1.5 Kí tự, chuỗi kí tự
Các chuỗi kí tự giúp hiển thị nội dung các thông điệp theo một ngôn ngữ nào đó
Các thuộc tính của kí tự bao gồm :
- Màu sắc của các kí tự
- Font chữ: bộ kí tự dùng hiển thị; Nó định nghĩa kiểu, kích thước của kí tự hiển thị Hình dạng củamỗi kí tự có thể được xác định bởi một tập các đường gấp khúc (trường hợp font vector) hay làmẫu các pixel (font bitmap) Có nhiều loại font khác nhau như font bitmap, font truetype, font
CHR,
- Kích thước: chiều cao và chiều rộng của kí tự Các kí tự định nghĩa bằng đường gấp khúc có thể
dễ dàng thay đổi kích thước hơn là các kí tự định nghĩa bằng mẫu các pixel
Công nghiệp máy tính sử dụng 2 loại font: font bitmap (raster) và font véctơ
Phông raster (bitmap): thực chất, tạo ra phông này là ánh xạ layout pixels của mỗi ký tự
lên màn hình
- Mỗi bit trong bitmap sẽ bật sáng điểm ảnh trên CRT
11
Trang 24- Ví dụ hiển thị phông bitmap cho chữ B
Offset Hex value Binary value
Phông véctơ: sử dụng ngôn ngữ mô tả nào đó
- Ngôn ngữ mô tả bao gồm các lệnh như Line, Curve, Polygon
- Tọa độ: là tọa độ tương đối trong chữ nhật chứa ký tự
- Chương trình con xử lý các lệnh để hiển thị
Hình 2.7 – Dạng bitmap và vector của font kí tự B
unsigned char mask, pattern[8]= {0x00, 0x3c, 0x18,0x18,0x18,0x18,0x3c,0x00};// Chữ I
void display_char(int xoff, int yoff, int color){
2.2. CÁC THUẬT TOÁN VẼ ĐƯỜNG
Giả sử tọa độ các điểm nguyên sau khi xấp xỉ đối tượng thực lần lượt là Đây là cácđiểm nguyên sẽ được hiển thị trên màn hình
Trang 25Đường lý tưởng
y
x
Hình 2.8 Đoạn thẳng rời rạc
Bài toán đặt ra là nếu biết được là tọa độ nguyên xác định ở bước thứ i, điểm nguyên tiếp
theo sẽ được xác định như thế nào
Nhận xét rằng để đối tượng hiển thị trên lưới nguyên được liền nét, các điểm mà có thể
12
Trang 26chọn chỉ là một trong tám điểm được đánh số từ 1 đến 8 trong hình 2.10 (điểm đen chính là ).Haynói cách khác : .
Dáng điệu của đường sẽ cho ta gợi ý khi chọn một trong tám điểm trên Cách chọn các điểm nhưthế nào sẽ tùy thuộc vào từng thuật toán trên cơ sở xem xét tới vấn đề tối ưu tốc độ
Hình 2.9 – Các điểm có thể chọn ở bước (i+1)
2.1.1. Thuật toán vẽ đoạn thẳng
Trang 27Như vậy :
Vấn đề còn lại là cách chọn một trong hai điểm trên như thế nào để có thể tối ưu về mặt tốc độ
2.1.2. Thuật toán trung điểm (MidPoint)
Phương trình của đường thẳng trong không gian 2D được biểu diễn theo công thức dạng ẩn như sau:F(x,y)=ax+by+c=0
Viết phương trình dưới dạng độ dốc của đường thẳng:
Biểu diễn theo dạng ẩn: dy.x dx y B.dx 0
Nếu d>0, M nằm dưới đường thẳng -> chọn U
Nếu d<0, M nằm phía trên -> chọn D
Nếu d=0, chọn U hay D tùy ý, giả thiết là chọn U
Trang 2813
Trang 29Giá trị tăng của d(ký hiệu là dd) là: dd = dnew – dold = a= dy
- Khi điểm tiếp theo được chọn là U, M tăng một đơn vị theo cả hai hướng x và y Tọa độ của trung điểmmới là (xp+2,yp+1+1/2)=(xp+2, yp+3/2):
d new F ( x p 2, y p 3 ) a( x p 2) b( y p 23 ) c d old a b
Giá trị tăng của d (ký hiệu là du) là: du=a+b=dy-dx
Nói tóm lại, tại mỗi bước, thuật toán sẽ chọn giữa hai điểm ảnh dựa trên dấu của d Tại mỗi bước giá trịcủa d sẽ được xác định bằng cách cộng thêm dd hoặc du vào giá trị d trước đó
Do vẽ đường thẳng bắt đầu từ (x0,y0) nên trung điểm đầu tiên là M(x0,y0+1/2) và:
Do vậy ta có: d0=2dy-dx; dd=2dy; du=2(dy-dx)
void MidpointLine1(int x0, int y0, int x1, int y1, int color){
Phương trình đường thẳng đi qua hai điểm trên là: x=my+b Trong đó, m=dx/dy
Do abs(dx)<abs(dy) nên lần lượt tăng giá trị y từ y0 tới y1 và tính ra giá trị của x theo phương trình
x=f(y)
Xét trường hợp hệ số góc đường thẳng thuộc [0,1] Khi đó
+ Khi tăng y thêm 1 thì x tăng dx/dy
Không chia ngay dx/dy
Mỗi lần tăng y thêm 1 thì tích lũy tử số vào biến d để khi nào d>dy thực hiện:
+ tăng x thêm 1
+ giảm d đi một giá trị dy
14
Trang 30+ Thực hiện lặp cho đến tọa độ cuối đoạn thẳng
- Tương tự với trường hợp hệ số góc thuộc [-1,0], thay vì tăng x thêm 1 thì giảm x đi 1 và tăng d lên mộtgiá trị dy
void BresLine(int x 0 , int y 0 , int x 1 , int y 1 , int color){
putpixel (x, y, color); //ve diem (x, y) bang mau color
for(i=1; i<= dx; ++i){
}
}
Nhận xét: Thuật toán Bresenham chỉ làm việc trên số nguyên và các thao tác trên số nguyên chỉ là
phép cộng và phép dịch bit (phép nhân 2) điều này là một cải tiến làm tăng tốc độ Ý tưởng chính của
thuật toán nằm ở chỗ xét dấu để quyết định điểm kế tiếp, và sử dụng công thức truy hồi để tính
bằng các phép toán đơn giản trên số nguyên
2.1.4. Thuộc tính của đường vẽ
- Độ rộng
+ Nếuy>x: các pixel được vẽ thêm tại tọa độ bên trái và bên phải điểm vẽ (x-1 và x+1)
+ Nếux>y: vẽ thêm các pixel phía trên và dưới điểm vừa vẽ
- Đường nét đứt:
+ Sử dụng các pattern, mặt nạ với bit cao nhất bằng 1
+ Dựa trên kết quả phép AND mặt nạ với mẫu để quyết định có vẽ điểm ảnh tại vị trí hiện hành hay
không
2.3. THUẬT TOÁN VẼ ĐƯỜNG TRÒN
Phương trình đường tròn có tâm là gốc tọa độ, bán kính R là : Từ phương trình này
ta có thể đưa về dạng Để vẽ các đường tròn có tâm bất kì, đơn giản chỉ cần tịnh
tiến các điểm sau khi vẽ xong đường tròn có tâm là gốc tọa độ theo vector tịnh tiến
2.3.1 Thuật toán MidPoint
- Một vài tính chất cơ bản:
Để vẽ đường tròn có tâm (a, b), ta vẽ đường tròn có bán
kính tương ứng với đường tròn đó tại tâm (0,0) sau đó
thực hiện phép tịnh tiến đối tượng sao cho điểm (0,0)
trùng với điểm (a,b)
Tính đối xứng: khi biết tọa độ 1 điểm dễ dàng suy ra tọa độ
của 7 điểm còn lại bằng cách lấy đối xứng qua trục tọa độ
và qua các đường phân giác của các góc phần tư như thể
hiện ở hình dưới Do đó để vẽ toàn bộ đường tròn ta chỉ
cần vẽ các điểm trong một góc cung 450
15
Trang 312 2
2 2
Biến quyết định d có giá trị: d F (1, R 12 ) 1 (R R 14 ) R 54 R
Các bước của thuật toán trung điểm vẽ đường tròn:
Do đường tròn có tám phần đối xứng nhau nên chỉ cần tạo ra các điểm trong một góc cung 450.Giả sử ta chọn cung có góc tử 900 đến 450, khi đó x tăng theo hướng +x, y đi theo hướng –y
Ý tưởng thuật toán: Khi đã vẽ điểm P tại (xp, yp), phải quyết định điểm vẽ tiếp theo là U hay D
Việc chọn U hay D làm điểm tiếp theo phụ thuộc vào vị trí của trung điểm M của UD so với
đường tròn Nếu M nằm trong đường tròn, suy ra U gần đường tròn lý tưởng hơn D nên điểm tiếptheo được chọn là U Ngược lại chọn D
Đặt F ( x, y) x 2 y 2 R 2
F(x,y)=0 -> (x,y) trên đường tròn
F(x,y)<0 -> (x,y) trong đường tròn
F(x,y)>0 -> (x,y) ngoài đường tròn
Hằng số tăng của d là: du=dnew - dold=2xp+3
Nếu dold>0 thì chọn D, xp tăng 1, yp giảm 1
d new F ( x p 2, y p 3 2) ( x p 2) 2 ( y p 23 ) 2 R 2
d new d old ( 2x p 2 y p 5)
Hằng số tăng của D là: dd=dnew-dold=2(xp-yp)+5
Vòng lặp của thuật toán
Chọn pixel để vẽ dựa trên dấu biến quyết định d của vòng lặp trước
Cập nhật biến quyết định d bởi giá trị du,dd tương ứng với pixel U hay D vừa chọn
Giá trị khởi đầu của d:
Điểm vẽ đầu tiên có tọa độ (0, R)
Để tránh phần lẻ khởi tạo của d, lấy h=d-1/4 Do đó giá trị khởi tạo của h là 1-R và việc sosánh d<0 sẽ trở thành so sánh h<-1/4 Tuy nhiên chọn h bắt đầu là một giá trị nguyên vàgiá trị tăng cũng nguyên (du và d D) nên thay vào đó là việc so sánh h<0 Do đó có thuậttoán nguyên theo h
void Circle(int x, int y, int color){
putpixel(x,y, color); putpixel(y,x, color); putpixel(y,-x, color); putpixel(x,-y, color);
putpixel(-x,-y, color); putpixel(-y,-x, color); putpixel(-y,x, color); putpixel(-x,y, color);
}
void MidpointCircle(int r, int color){
/*Giả sử tâm đường tròn tại gốc tọa độ*/
Trang 322.3.2 Thuật toán Bresenham
1 Chọn vị trí thứ nhất để vẽ có tọa độ (x1, y1)=(0, r)
2 Tính tham số thứ nhất: p1=3-2r
Nếu p1<0: vị trí vẽ tiếp theo là (x1+1, y1) Ngược lại vẽ tại tọa độ (x1-1, y1-1)
3 Tiếp tục tăng x để tính p tiếp theo từ p trước đó
Nếu trước đó có pi<0: pi+1=pi+4xi+6
Ngược lại, ta có: pi+1=pi+4(xi-yi)+10
Nếu kết quả pi+1<0: điểm sẽ chọn tiếp theo là (xi-2, yi+1)
Ngược lại, ta chọn: (xi+2, yi+1-1)
Nếu pi<0 thì yi+1= yi, ngược lại yi+1= yi-1
y i
y
2.4. THUẬT TOÁN VẼ ELIP
Do Elip chuẩn có bốn phần đối xứng nhau qua hai trục x và y nên chỉ thực hiện vẽ ¼ elip trong ¼ thứ 1
Trước hết chia ¼ elip này thành hai vùng Biên giới giữa hai vùng là điểm tại đó đường cong có độ dốc–1(xem hình 2.7) Độ dốc tiếp
U
DVùng 1
Hình 2.8 Vector Gradient Hình 2.7 Hai vùng của Elip
Vector Gradient vuông góc với tiếp tuyến của đường cong tại điểm đó được xác định như sau:
Với vùng 1:
Giả sử điểm ảnh hiện tại là (xp,yp)
Biến quyết định cho vùng này là d1, là giá trị của F(x,y) xác định tại (xp+1, yp-1/2) và làtrung điểm của UD:
d F ( x p 1, y p 1 ) b 2 ( x p 1) 2 a 2 ( y p 1 ) 2 a 2b 2
17
Trang 33 Nếu d<0: chọn U, x tăng 1, y không thay đổi.
Trung điểm mới có tọa độ (xp+2,yp-1/2) Do đó:
d new F ( x p 2, y p 1 ) b 2 ( x p 2) 2 a 2 ( y p 1 ) 2 a 2b 2
Mà d old F (x p 1, y p 1 ) b 2 (x p 1) 2 a 2 ( y p 1 ) 2 a 2b 2
d new d old b 2 (2 x p 3) d oldU
Nếu d0: chọn D, x tăng 1, y giảm 1
d new F ( x p 2, y p 3 ) b 2 ( x p 2) 2 a 2 ( y p 3 ) 2 a 2b 2
d new d old b 2 (2 x p 3) a 2 (2 y p 2) d old D
Với vùng 2:
Tính biến quyết định d =F(x, y)=F(xp+1/2, yp-1)
- Nếu d<0: chọn SE, x tăng 1, y giảm 1
- Nếu d0: chọn S, x không tăng, y giảm 1
void Ellip (int x, int y, int color){
putpixel (x,y, color); putpixel (x,-y, color);
putpixel (-x,y, color); putpixel (-x,-y, color);
Trang 352.5. CÁC THUẬT TOÁN TÔ MÀU MIỀN KÍN
Các vùng tô là một trong những đối tượng đồ họa cơ sở được hầu hết các công cụ lập trình đồ họa
hỗ trợ Có hai dạng vùng tô thường gặp đó là : tô bằng một màu thuần nhất (solid fill) hay tô theo mộtmẫu tô (fill-pattern) nào đó
Một vùng tô thường được xác định bởi một đường khép kín nào đó gọi là đường biên Một trongnhững dạng đường biên đơn giản nhất đó là đa giác
Để tô màu một vùng tô, người ta thường chia làm hai công đoạn: công đoạn thứ nhất là xác địnhcác điểm nào để tô và công đoạn còn lại đơn giản hơn đó là quyết định tô các điểm đó bằng giá trị màunào Công đoạn thứ hai chỉ thực sự phức tạp nếu ta tô theo một mẫu tô nào đó không phải một màu
Có hai cách tiếp cận chính để tô màu một vùng tô đối với thiết bị hiển thị dạng điểm đó là: tô theolàn và tô dựa theo loang
Miền kín F: - Tất cả các điểm thuộc F có cùng mầu với nhau
- 2 điểm bất kỳ thuộc F phải có con đường 4 láng giềng đi đến nhau
Trang 362.5.1 Thuật toán tô màu loang
Bắt đầu từ điểm nằm bên trong vùng tô, ta sẽ kiểm tra các điểm lân cận của nó đã được tô màu
hay có phải là điểm biên hay không, nếu không phải là điểm đã tô và không phải là điểm biên ta sẽ tô màu
nó Quá trình này được lặp lại cho tới khi nào không còn tô được điểm nào nữa thì dừng Bằng cách này,toàn bộ các điểm thuộc vùng tô được kiểm tra và sẽ được tô hết
19
Trang 37Có hai quan điểm về cách tô này, đó là dùng bốn điểm lân cận hay tám điểm lân cận đối với điểmđang xét được tô bằng màu trắng.
Đoạn chương trình sau minh họa cài đặt thuật toán tô màu dựa theo đường biên sử dụng phươngpháp tô 4 điểm lân cận
- Xuất phát từ (x,y) tô mầu cho 4 điểm láng giềng và đồng thời gọi đệ quy thủ tục tô mầu Loang cho 4
điểm láng giềng này
void Loang(int x, int y, int c){
if(getpixel(x,y)!=c) {
putpixel(x,y,c); Loang(x+1,y,c); Loang(x-1,y,c);
Loang(x,y+1,c); Loang(x,y-1,c)}
}
Nhận xét
- Thuật toán này có thể sẽ không hoạt động chính xác khi có một số điểm nằm trong vùng tô có màu
là màu cần tô của vùng (FillColor) Để khắc phục điều này, trước khi tô màu cần phải đảm bảo
rằng toàn bộ các điểm thuộc về vùng tô có màu khác màu tô
- Nhận xét rằng trong cài đặt thuật toán ở trên, việc gọi thực hiện đệ quy thuật toán cho bốn điểm
lân cận của điểm hiện hành không quan tâm tới một trong bốn điểm đó đã được xét ở bước trướchay chưa Ví dụ khi ta xét bốn điểm lân cận của điểm hiện hành (x,y), thì khi gọi thực hiện đệ quyvới điểm hiện hành là một trong bốn điểm lân cận trên, (x,y) vẫn được xem là điểm lân cận củachúng và lại được gọi thực hiện lại
Hãy cải tiến thuật toán Loang?
2.5.2 Thuật toán tô màu theo làn
Làn: là dãy liên tục các điểm ảnh trên một dòng có cùng mầu với nhau
Ta vận dụng kỹ thuật “điểm phải nhất” để xây dựng thuật toán tô màu như sau Điểm có số hiệu 1chính là điểm (x,y) nơi xuất phát tô màu
Trước hết ta gọi toán tử cc=getpixel(x,y) để xác định màu cũ của hình Nếu cc=c tức là hình đã cómàu c cần tô, ta kết thúc thuật toán Ngược lại, ta xuất phát từ điể 1 trên dòng chứa nó, tức dòng x, điểmbiên phải nhất là điểm 2, lưu điểm này vào stack s Điểm (x,y) trên dòng x được gọi là điểm phải nhất nếumàu của nó là cc và màu của điểm sát phải nó khác cc, tức là:
getpixel(x,y)==cc && getpixel(x,y+1)!=cc
Bản chất của phương pháp điểm phải nhất là như sau Việc tô màu được tổ chức thực hiện theotừng làn Làn là những đoạn gồm liên tiếp các ô trên một dòng của hình Trong hình minh họa trên, dòngthứ 3 gồm có 2 làn biểu thị qua các dãy oo5 và ooo3 Mỗi làn được quản lý theo điểm phải nhất của làn
đó Thí dụ làn oo5 được quản lý bằng điểm 5, còn làn ooo3 bằng điểm 3 Để tô màu cho mỗi làn ta bắt
đầu từ điểm phải nhất của làn đó rồi tô dần qua trái Mỗi khi tô một điểm ta tranh thủ phát hiện và lưu
20
Trang 38giữ các điểm phải nhất nằm trên và dưới điểm đó Nắm giữ được các điểm phải nhất của mỗi làn tức là cóthể quản lý và tổ chức tô màu cho làn đó Trước khi bắt đầu tô mầu, ta xuát phát từ điểm (x,y) chuyển quaphải để tìm điểm phải nhất trên dòng x Mỗi khi bắt đầu xử lý một làn ta lên dòng trên và xuống dòng
dưới của làn dó để tìm điểm phải nhất, nếu tìm được ta nạp chúng vào stack Bước này dựa vào tính chấtliên thông của hình nhằm đảm bảo không bỏ sót việc duyệt các điểm trong hình
Thủ tục tô màu theo kỹ thuật điểm phải nhất sẽ như sau:
3.1. lấy ngọn s đưa vào x, y
3.2. nếu điểm (x,y) đã được tô thì lặp lại bước 3
3.3. từ (x,y) tìm điểm phải nhất trên dòng (x-1,y), nếu có: nạp vào s
3.4. từ (x,y) tìm điểm phải nhát trên dòng (x+1,y), nếu có: nạp vào s
3.5. Lặp: chuyển dần qua trái đến hết làn
3.5.1 Tô màu điểm (x,y)3.5.2 Nếu điểm (x-1,y) là điểm phải nhất: nạp(x-1,y) vào s3.5.3 Nếu điểm (x+1,y) là điểm phải nhất: nạp (x+1,y) vào sTheo hình trên, trước khi xử lý làn 2 ta tìm được điểm 3 là điểm phải nhất Bước 3.4 không chođiểm phải nhất nào Khi di chuyển từ điểm đầu làn qua trái ta nạp thêm được ba điểm 4,5 và 6 vào stack
void Color(int x,int y,int c){
/* Lay ngon Stack dua vao cac bien x va y */
#define POP(x,y) {y=*s ;x=*s ;}
/* Nap toa do (x,y) vao Stack s */
#define PUSH(x,y) {*(++s)=x;*(++s)=y;}
/*Xuat phat tu diem(x,y)qua trai,tim diem phai nhat*/
#define TORIGHT(x,y) {while(getpixel(x,y)==cc) y++;}
/* Kiem tra diem phai nhat */
#define SEARCH(x,y) (getpixel(x,y)==cc&&getpixel(x,y+1)!=cc)
#define OK(x,y) (getpixel(x,y)==cc)
TORIGHT(x,y); /* Tim diem xuat phat */
PUSH(x,y-1); /* Nap vao Stack */
21
Trang 39TORIGHT(x+1,i);
if(i>y+1) PUSH(x+1,i-1);
}do{
Các giải pháp cắt xén:
1.Kiểm tra từng pixel của đoạn thẳng có ở trong chữ nhật?
2.Tính toán các điểm cắt của từng đoạn thẳng với cạnh chữ nhật
cắt xén
3.Thuật toán Sutherland-Cohen: loại bỏ ngay được các đoạn không
cần cắt xén bằng cách xét tọa độ đầu mút của các đoạn thẳng
4.Các thuật toán khác: Cyrus-Beck sử dụng đường thẳng tham số,
Liang-Barsky dành cho khối
2.6.1 Các thuật toán cắt xén điểm, đoạn thẳng
Thuật toán Sutherland-Cohen:
Mã hóa đầu mút các đoạn thẳng: mỗi đầu mút được mã hóa bằng 4 bit, 4 bit này cho biết vịtrí của điểm đầu mút đó so với hình chữ nhật:
Trang 4022