GIÁO TRÌNH ĐỒ HỌA MÁY TÍNH – TS. NGUYỄN HỮU TÀI

Tổng quan về giáo trình

Giáo trình Đồ họa Máy tính do TS. Nguyễn Hữu Tài biên soạn, được Nhà xuất bản Đại học Huế phát hành năm 2017 (Mã số sách: GT/ -2017), là tài liệu giảng dạy chính thức phục vụ chương trình đào tạo Cử nhân ngành Công nghệ Thông tin tại Khoa Công nghệ Thông tin – Trường Đại học Khoa học, Đại học Huế. Học phần được thiết kế với thời lượng 3 tín chỉ, giữ vị trí môn học cơ sở ngành nhằm cung cấp nền tảng toán học và kỹ thuật lập trình tương tác hình ảnh trên máy tính.

Mục tiêu học tập của giáo trình bao gồm việc trang bị cho người học các kiến thức từ cơ bản đến chuyên sâu trong lĩnh vực đồ họa máy tính; rèn luyện phương pháp luận trong việc phân tích, đánh giá độ phức tạp và tính tối ưu của các giải thuật dựng hình; đồng thời hình thành năng lực lập trình thực nghiệm thông qua việc tự xây dựng các ứng dụng đồ họa 2D và 3D.

Cấu trúc giáo trình bao gồm 6 chương lý thuyết trọng tâm, 2 phần phụ lục nghiên cứu mở rộng và hệ thống 7 bài thực nghiệm có mã nguồn hướng dẫn chi tiết. Cách tiếp cận của tài liệu đi từ bản chất phần cứng và toán học giải tích đến việc cài đặt thuật toán trên môi trường máy tính thực tế.

Điểm đặc thù của giáo trình là sự gắn kết chặt chẽ giữa cơ sở lý thuyết toán học (đại số tuyến tính, hình học Affine) với năng lực hiện thực hóa mã nguồn trên nền tảng Microsoft Visual C++ và thư viện MFC (Microsoft Foundation Classes), giúp người học hiểu rõ quy trình xử lý điểm ảnh từ tầng bộ nhớ video đến tầng giao diện người dùng.


Nội dung kiến thức cốt lõi

Các chương và chủ đề chính

Nội dung giáo trình được triển khai theo tiến trình logic chặt chẽ qua 6 chương và 2 phụ lục:

[Chương 1: Yếu tố cơ sở & Dựng hình 2D]
               │
               ▼
[Chương 2: Hệ màu & Tổ chức bộ nhớ Video]
               │
               ▼
[Chương 3: Phép xén hình & Thuật toán tô màu]
               │
               ▼
[Chương 4: Biến đổi Affine 2D/3D & Phép chiếu]
               │
               ▼
[Chương 5: Mô hình khung dây (Wireframe)]
               │
               ▼
[Chương 6: Mô hình mặt đa giác & Khử mặt khuất]
               │
               ▼
[Phụ lục 1 & 2: Đường cong Bezier/Spline & Mô hình chiếu sáng Phong]
  • Chương 1: Các yếu tố cơ sở của đồ họa: Trình bày khái niệm phần cứng hiển thị, cấu tạo ma trận điểm ảnh (Pixel) và hệ tọa độ thiết bị số nguyên. Phân tích chi tiết và so sánh giải thuật vẽ đoạn thẳng theo phương trình vi phân với giải thuật số nguyên Bresenham; giải thuật vẽ đường tròn MidPoint và Bresenham; giải thuật vẽ hình Ellipse. Cung cấp quy trình thiết lập ứng dụng giao diện Dialog-based thông qua Bài thực nghiệm số 1.
  • Chương 2: Các hệ màu và cơ chế tổ chức bộ nhớ màn hình: Trình bày cấu trúc vật lý của màn hình CRT, LCD; hiện tượng giao thoa ánh sáng; không gian màu chuẩn CIE 1931 cùng các mô hình màu RGB, CMY/CMYK, HSV, HSL và Lab. Đi sâu vào cấu trúc tổ chức bộ nhớ màn hình ở chế độ Mode 13H ($320 \times 200$, 256 màu) và chuẩn VESA; kỹ thuật vẽ hậu trường (Off-screen Rendering) thông qua cấu trúc DIB (Device-Independent Bitmap).
  • Chương 3: Các phép xén hình và tô màu: Khảo sát các giải thuật xén đoạn thẳng vào cửa sổ hình chữ nhật (Cohen-Sutherland, Liang-Barsky) và giải thuật xén đa giác Sutherland-Hodgman. Trình bày hai thuật toán tô màu kinh điển: tô theo vết dầu loang (Flood Fill) và tô đa giác theo dòng quét (Scan-line). Bài thực nghiệm số 2 tập trung tối ưu hóa tốc độ tô màu bằng cách can thiệp trực tiếp vào mảng byte của bộ nhớ DIB thay cho các hàm API GetPixel/SetPixel.
  • Chương 4: Các phép biến đổi hình học: Xây dựng lý thuyết biến đổi Affine 2D và 3D (tịnh tiến, quay quanh gốc và quay quanh điểm bất kỳ, tỉ lệ/đồng dạng, đối xứng, biến dạng - Twist). Định nghĩa hệ tọa độ thuần nhất (Homogeneous Coordinates) với ma trận $4 \times 4$. Phân tích hệ quan sát 3 chiều, chuyển đổi từ hệ tọa độ cục bộ sang hệ tọa độ người quan sát và thực hiện các phép chiếu (chiếu song song, chiếu phối cảnh - Perspective).
  • Chương 5: Mô hình WireFrame: Trình bày cấu trúc dữ liệu mô hình khung dây (Wireframe) gồm danh sách đỉnh và danh sách cạnh. Hướng dẫn thiết lập phép chiếu phối cảnh và chiếu trực giao. Bài thực nghiệm số 3 hướng dẫn lập trình ứng dụng WireFrameDemo cho phép điều khiển góc nhìn không gian 3 chiều thông qua sự kiện chuột.
  • Chương 6: Mô hình các mặt đa giác và vấn đề khử mặt khuất: Trình bày cấu trúc mô hình lưới đa giác (Polygon mesh). Phân tích các giải thuật khử mặt khuất: giải thuật người thợ sơn (Depth-Sorting), giải thuật chọn lọc mặt sau (Back-Face Detection) và giải thuật vùng đệm độ sâu (Z-Buffer). Bài thực nghiệm số 4 và số 5 xây dựng phần mềm 3DViewer hoàn chỉnh.
  • Phụ lục 1 & 2: Đường cong, mặt cong và mô hình chiếu sáng: Trình bày phương pháp dựng đường cong Bézier, giải thuật De Casteljau, đa thức Bernstein, đường cong Spline và B-Spline. Phân tích các nguồn sáng (Ambient, Directional, Point Light) và giải thuật tô bóng Phong (Phong Shading). Bài thực nghiệm số 6 và 7 hoàn thiện ứng dụng mô phỏng 3D kết hợp Z-Buffer và chiếu sáng.

Kiến thức nền tảng được xây dựng

Giáo trình thiết lập hệ thống kiến thức nền tảng dựa trên các trụ cột khoa học:

  1. Đại số tuyến tính và Hình học tính toán: Sử dụng ma trận biến đổi Affine, hệ tọa độ thuần nhất để gộp các phép biến đổi liên tiếp thành một phép nhân ma trận tổng hợp; ứng dụng tích có hướng của hai vector để tính vector pháp tuyến bề mặt phục vụ việc xác định hướng nhìn và độ phản xạ ánh sáng.
  2. Lý thuyết tối ưu hóa giải thuật số nguyên: Chuyển đổi các bài toán tính toán số thực trên phương trình liên tục sang tính toán gia số chỉ sử dụng phép cộng, trừ và dịch bit trên trường số nguyên (như biểu thức quyết định $P_i$ trong thuật toán Bresenham và MidPoint), giảm thiểu chi phí chu kỳ xung nhịp của bộ xử lý (ALU).
  3. Cơ chế lưu trữ và ánh xạ bộ nhớ đồ họa: Nguyên lý quản lý ngữ cảnh thiết bị (Device Context - DC), tổ chức bộ đệm khung (Frame Buffer), cấu trúc dữ liệu ảnh Bitmap không phụ thuộc thiết bị (DIB) và cơ chế đánh địa chỉ ô nhớ video.

Kỹ năng phát triển

Thông qua nội dung học phần, người học được rèn luyện các kỹ năng cụ thể:

  • Kỹ năng kỹ thuật (Technical skills): Cài đặt thuật toán đồ họa bằng ngôn ngữ C++; làm việc với các lớp đối tượng giao diện của thư viện MFC; thao tác trực tiếp với con trỏ bộ nhớ ảnh để tăng tốc độ xử lý điểm ảnh; kiểm soát luồng hiển thị đồ họa hai lớp (Double Buffering / Off-screen Rendering).
  • Kỹ năng phân tích (Analytical skills): Phân tích các trường hợp biên của hình học (như hệ số góc đường thẳng $|a| > 1$, đa giác tự cắt, hiện tượng đa giác đan xen nhau trong bài toán khử mặt khuất); so sánh định lượng chi phí lệnh máy giữa các phương pháp xử lý.
  • Năng lực thực nghiệm (Practical competencies): Xây dựng các ứng dụng hoàn chỉnh có khả năng đọc dữ liệu số hóa 3D từ tệp mô tả (như mô hình hình cầu, mô hình khủng long Dinosaur, trực thăng Hughes 500), cho phép người dùng tương tác xoay, thu phóng và kết xuất bề mặt chiếu sáng theo thời gian thực.

Phương pháp giảng dạy và học tập

Giáo trình triển khai phương pháp sư phạm tích hợp chặt chẽ giữa diễn giải lý thuyết toán học và thực nghiệm lập trình. Quy trình tiếp cận mỗi chủ đề luôn tuân thủ 4 bước chuẩn mực:

[1. Phát biểu bài toán toán học]
               │
               ▼
[2. Rút gọn giải thuật về dạng tính toán số nguyên]
               │
               ▼
[3. Cài đặt mã nguồn chi tiết trên Visual C++/MFC]
               │
               ▼
[4. Thực nghiệm, đo lường chi phí thời gian & Đánh giá sai số]

Bài tập và các ca thực nghiệm điển hình

Hệ thống bài tập cuối mỗi chương được thiết kế đa dạng từ tính toán lý thuyết đến lập trình ứng dụng:

  • Bài toán xén hình và tô màu: Tính toán các bước xén đoạn thẳng theo mã vùng của thuật toán Cohen-Sutherland; xử lý lỗi của thuật toán Sutherland-Hodgman khi xén các đa giác lõm; phân tích bài toán "mê cung" khi tô màu đa giác bằng giải thuật Scan-line.
  • Bài toán biến đổi ma trận: Xác định ma trận tổng hợp chuyển đổi đối tượng qua nhiều phép tịnh tiến và quay liên tiếp quanh một điểm bất kỳ trong không gian $Oxyz$.
  • Hệ thống 7 bài thực nghiệm: Cung cấp mã nguồn chi tiết từ việc khởi tạo project LineDemo (Bài 1), tối ưu hàm tô màu MyBestFloodFill (Bài 2), đến xây dựng ứng dụng WireFrameDemo (Bài 3) và hoàn thiện phần mềm kết xuất 3D 3DViewer với giải thuật Z-Buffer và tô bóng Phong (Bài 4 đến Bài 7).

Hướng dẫn tự học và đánh giá

Giáo trình phân định rõ các tiêu chí đánh giá kết quả học tập thông qua:

  1. Khả năng tính toán chính xác tọa độ điểm ảnh và ma trận biến đổi trên giấy.
  2. Hiệu quả thực thi của chương trình cài đặt (đo lường bằng thời gian mili-giây và mức độ tiêu thụ bộ nhớ).
  3. Khả năng mở rộng mã nguồn để giải quyết các trường hợp tổng quát (ví dụ: mở rộng giải thuật Bresenham cho mọi góc dốc hoặc cải tiến giải thuật khử mặt khuất khi các mặt phẳng cắt nhau).

Điểm nổi bật và cập nhật

Nội dung giáo trình phản ánh các nguyên lý cốt lõi của khoa học đồ họa máy tính với các điểm nhấn kỹ thuật:

  • Phân tích sâu cơ chế phần cứng và lệnh máy: Giáo trình không tiếp cận đồ họa dưới góc nhìn của các thư viện cấp cao đóng gói sẵn mà đi sâu vào số lệnh máy của vi xử lý. Sách so sánh chi tiết số lượng phép toán dấu phẩy động và số nguyên của kiến trúc vi xử lý (từ thời kỳ Intel 8086 ALU đến các bộ xử lý hiện đại) để luận giải lý do ra đời của các giải thuật số nguyên như Bresenham hay MidPoint.
  • Phương pháp tối ưu hóa hiệu năng truy xuất bộ nhớ: Giáo trình chỉ rõ sự chênh lệch hiệu năng giữa việc gọi hàm API hệ điều hành (SetPixel, GetPixel trên Device Context) với việc truy cập trực tiếp vào vùng đệm bộ nhớ DIB thông qua con trỏ mảng byte, giải quyết bài toán nghẽn cổ chai trong quá trình xử lý raster.
  • Tính hệ thống trong xử lý đồ họa 3D: Khái quát hóa toàn bộ đường ống đồ họa (Graphics Pipeline) từ khâu số hóa dữ liệu, biến đổi Affine, thiết lập camera quan sát, chiếu phối cảnh, khử mặt khuất bằng vùng đệm độ sâu $Z$, cho đến mô hình chiếu sáng và nội suy vector pháp tuyến theo mô hình Phong.
  • Minh họa bằng tập dữ liệu thực tế: Sử dụng các mô hình dữ liệu thực nghiệm phong phú như đối tượng chiếc ghế, mô hình hình cầu 450 mặt, mô hình nhân vật game, mô hình khủng long và mô hình máy bay trực thăng Hughes 500.

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

  • Sinh viên đại học: Giáo trình được biên soạn chuyên biệt cho sinh viên năm thứ 2 hoặc năm thứ 3 thuộc các ngành: Công nghệ Thông tin, Khoa học Máy tính, Kỹ thuật Phần mềm và Hệ thống Thông tin.
  • Yêu cầu kiến thức tiên quyết: Người học cần hoàn thành các học phần:
    • Toán cao cấp và Đại số tuyến tính: Nắm vững phép toán ma trận, định thức, hệ phương trình và hình học giải tích vector.
    • Kỹ thuật lập trình và Lập trình hướng đối tượng: Thành thạo ngôn ngữ C++, con trỏ bộ nhớ, cấu trúc dữ liệu mảng/danh sách liên kết và mô hình hướng đối tượng.
  • Giảng viên: Sử dụng làm đề cương bài giảng và tài liệu chuẩn để thiết kế chương trình học 3 tín chỉ; khai thác hệ thống hình vẽ, bảng ma trận và 7 bài thực nghiệm để xây dựng các đề tài bài tập lớn, thực hành phòng máy.
  • Kỹ sư phần mềm và người tự học: Phục vụ các lập trình viên muốn nghiên cứu nguyên lý vận hành của các công cụ đồ họa, hệ thống CAD/CAM, hoặc phát triển game engine từ mức độ thuật toán nền tảng.

Câu hỏi thường gặp

1. Giáo trình này phù hợp với đối tượng nào?

Giáo trình được thiết kế cho sinh viên đại học ngành Công nghệ Thông tin học phần Đồ họa Máy tính (3 tín chỉ), cùng các lập trình viên cần nắm vững cơ chế dựng hình và xử lý điểm ảnh từ tầng thuật toán cơ sở.

2. Cần chuẩn bị những kiến thức nền tảng nào trước khi học?

Người học cần có kiến thức vững về ngôn ngữ lập trình C/C++, kỹ năng lập trình hướng đối tượng, cấu trúc dữ liệu và giải thuật, cùng các kiến thức đại số tuyến tính như phép tính ma trận và tích vector.

3. Điểm khác biệt cốt lõi của giáo trình so với các tài liệu khác là gì?

Giáo trình tập trung vào việc tự xây dựng thuật toán từ đầu (From scratch) trên nền tảng Visual C++ và MFC, kết hợp phân tích chi phí phần cứng và tối ưu bộ nhớ DIB, thay vì chỉ hướng dẫn sử dụng các hàm API có sẵn của các thư viện đồ họa thương mại.

4. Phương pháp tự học giáo trình như thế nào để đạt hiệu quả cao?

Người học nên kết hợp đọc lý thuyết toán học, giải các bài tập ma trận cuối chương, sau đó mở máy tính làm tuần tự từ Bài thực nghiệm số 1 đến Bài thực nghiệm số 7 trên môi trường Microsoft Visual Studio để kiểm chứng kết quả chạy thực tế của các giải thuật.

5. Giáo trình có cung cấp các nội dung nâng cao không?

Có. Phần Phụ lục 1 và Phụ lục 2 cung cấp các chủ đề nâng cao gồm phương pháp nội suy đường cong/mặt cong Bézier, giải thuật De Casteljau, B-Spline và mô hình tính toán bóng sáng Phong (Phong Shading).


Kết luận

Giáo trình Đồ họa Máy tính của TS. Nguyễn Hữu Tài là tài liệu học thuật hoàn chỉnh, cung cấp hệ thống lý thuyết chuẩn xác cùng giải pháp thực nghiệm chi tiết cho lĩnh vực đồ họa máy tính 2D và 3D.

Lộ trình học tập đề xuất cho người học là đi tuần tự từ việc làm chủ các giải thuật raster hóa cơ bản ở Chương 1-3, nắm vững không gian biến đổi hình học ở Chương 4, trước khi triển khai các ứng dụng mô hình hóa và kết xuất không gian 3 chiều phức tạp ở Chương 5-6 và các phần Phụ lục. Tài liệu là nguồn tham khảo học thuật giá trị, đóng góp tích cực vào công tác đào tạo cử nhân Công nghệ Thông tin tại Đại học Huế.