2 Lời Mở Đầu Đồ họa máy tính là một lĩnh vực của khoa học máy tính nghiên cứu về cơ sở toán học, các thuật toán cũng như các kĩ thuật để cho phép tạo, hiển thị và điều khiển hình ảnh trê
Trang 1Đại Học Bách Khoa Hà Nội Khoa Toán Ứng Dụn và Tin Họcg
BÁO CÁO BÀI TẬP LỚN Môn học: Kỹ Thuật Lập Trình Chủ đề : Đồ Họa Trong Lập Trình CGiáo viên hướng dẫn: Nguyễn Thị Thanh Huyền Sinh viên thực hiện: Hoàng Thái Duy
Mã sinh viên: 20227224
Hà Nội, ngày 5/16/2024
Trang 22
Lời Mở Đầu
Đồ họa máy tính là một lĩnh vực của khoa học máy tính nghiên cứu về cơ sở toán học, các thuật toán cũng như các kĩ thuật để cho phép tạo, hiển thị và điều khiển hình ảnh trên màn hình máy tính Về bản chất: đó là một quá trình xây dựng và phát triển các công cụ trên cả hai lĩnh vực phần cứng và phần mềm hỗ trợ cho các lập trình viên thiết kế các chương trình có khả năng đồ họa cao Việc mô tả dữ liệu thông qua các hình ảnh
và màu sắc đa dạng của nó, các chương trình đồ họa thường thu hút người sử dụng bởi tính thân thiện, dễ dùng,… kích thích khả năng sáng tạo và nâng cao năng suất làm việc Do vậy, đồ họa máy tính được ứng dụng trong nhiều lĩnh vực: giáo dục, thương mại… Là sinh viên được tìm hiểu và làm quen với một
số kĩ thuật đồ họa trên máy tính thông qua tài liệu, bài giảng do
cô Nguyễn Thị Thanh Huyền giáo viên giảng dạy Với những - kiến thức đã học em đã quyết định chọn đề tài: Đồ Họa Trong Lập Trình C
Trang 33
Mục Lục
Phần I: Giới Thiệu 4
I.1 Mục Đích và Ý Nghĩa Của Báo Cáo 4
I.2 Tầm Quan Trọng Của Đồ Họa Trong Lập Trình C 4
I.3 Ngôn Ngữ C và Đồ Họa 5
I.4 Kết Luận 5
Phần II: Tổng Quan Đồ Họa Máy Tính 6
II.1 Khái Niệm và Phân loại Đồ Họa Máy Tính 6
II.2 Đồ Họa 2D (Two-Dimensional Graphics): 6
II.3 Đồ Họa 3D (Three-Dimensional Graphics): 6
II.4 Các Thành Phần Cơ Bản Của Hệ Thống Đồ Họa Máy Tính 6
II.5 Các Kỹ Thuật và Công Nghệ Đồ Họa 7
Phần III: Các Thư Viện Đồ Họa Trong C 9
III.1 Thư viện ‘graphics.h’ 9
III.2 OpenGL 12
Phần IV: So Sánh Các Thư Viện Đồ Họa Graphic.h và OpenGL 17
IV.1 Mức Độ Phức Tạp 17
IV.2 Khả Năng Tương Thích 17
IV.3 Hiệu Suất 18
IV.4 Tính Linh Hoạt và Khả Năng Mở Rộng 19
Phần V: Ứng Dụng Của Đồ Họa Trong C 20
V.1 Phát Triển Trò Chơi 20
V.2 Ứng Dụng Khoa Học và Kỹ Thuật 20
V.3 Hệ Thống Học Tập và Giảng Dạy 21
V.4 Thiết Kế Đồ Họa và Mỹ Thuật 22
Kết Luận 23
Tài Liệu Tham Khảo 24
Trang 44
Phần I: Giới Thiệu
Đồ họa máy tính đã trở thành một phần không thể thiếu trong nhiều lĩnh vực khác nhau như giải trí, giáo dục, y tế, thiết kế và khoa học kỹ thuật Khả năng tạo ra các hình ảnh đẹp mắt và trực quan không chỉ giúp cải thiện trải nghiệm người dùng mà còn đóng vai trò quan trọng trong việc truyền đạt thông tin một cách hiệu quả Ngôn ngữ lập trình C, mặc dù được ra đời
từ những năm 1970, vẫn là một trong những ngôn ngữ phổ biến và mạnh
mẽ nhất nhờ vào tính đơn giản, hiệu suất cao và khả năng tiếp cận trực tiếp với phần cứng
I.1 Mục Đích và Ý Nghĩa Của Báo Cáo
• Báo cáo này nhằm cung cấp một cái nhìn tổng quan về việc sử dụng đồ họa trong ngôn ngữ lập trình C, giới thiệu các thư viện
đồ họa phổ biến, so sánh chúng và đánh giá ứng dụng của chúng trong các lĩnh vực khác nhau Qua đó, giúp người đọc hiểu rõ hơn
về các công cụ và kỹ thuật hiện có, cũng như cách lựa chọn thư viện phù hợp cho từng loại dự án
I.2 Tầm Quan Trọng Của Đồ Họa Trong Lập Trình C
• Phát Triển Game: Đồ họa là một yếu tố không thể thiếu trong phát
triển game Các trò chơi từ đơn giản đến phức tạp đều yêu cầu các hình ảnh, hiệu ứng và giao diện đồ họa để thu hút người chơi và mang lại trải nghiệm tốt nhất
• Mô Phỏng và Mô Hình Hóa: Trong các ngành công nghiệp như kỹ
thuật, y học và khoa học, đồ họa được sử dụng để tạo ra các mô phỏng
và mô hình hóa phức tạp, giúp các nhà nghiên cứu và kỹ sư hiểu rõ hơn về các hiện tượng và quy trình
• Thiết kế và Sáng Tạo: Các ứng dụng đồ họa như thiết kế đồ họa, tạo
hình ảnh 2D/3D, và thiết kế giao diện người dùng đều cần đến các thư viện đồ họa mạnh mẽ và linh hoạt
Trang 55
• Giáo Dục và Học Tập: Đồ họa giúp các học viên và sinh viên dễ dàng
hình dung và hiểu các khái niệm phức tạp thông qua các hình ảnh minh họa, biểu đồ và mô phỏng trực quan
• Giáo Dục và Học Tập: Đồ họa giúp các học viên và sinh viên dễ dàng
hình dung và hiểu các khái niệm phức tạp thông qua các hình ảnh minh họa, biểu đồ và mô phỏng trực quan
I.3 Ngôn Ngữ C và Đồ Họa
• Ngôn ngữ C nổi bật với hiệu suất cao và khả năng tiếp cận gần với phần cứng, là sự lựa chọn lý tưởng cho các ứng dụng yêu cầu hiệu suất cao như đồ họa Tuy nhiên, việc lập trình đồ họa trực tiếp bằng C không phải lúc nào cũng dễ dàng, do đó các thư viện đồ họa đã ra đời
để giúp đơn giản hóa quá trình này
• Báo cáo này sẽ xem xét một số thư viện đồ họa nổi bật cho ngôn ngữ
C, bao gồm graphics.h, SDL, OpenGL, Allegro, Cairo và SFML Mỗi thư viện sẽ được giới thiệu về các tính năng, ưu điểm, nhược điểm và các ứng dụng thực tế, giúp người đọc có cái nhìn tổng quan và lựa chọn công cụ phù hợp nhất cho dự án của mình
Trang 66
II.1 Khái Niệm và Phân loại Đồ Họa Máy Tính
Đồ họa máy tính là lĩnh vực nghiên cứu và phát triển liên quan đến việc tạo ra, xử lý và thao tác các hình ảnh bằng máy tính Đồ họa máy tính có thể được phân loại thành hai lĩnh vực chính: đồ họa 2D và đồ họa 3D
II.2 Đồ Họa 2D (Two -Dimensional Graphics):
• Khái niệm: Đồ họa 2D bao gồm các hình ảnh và hình vẽ nằm trên
một mặt phẳng hai chiều Các đối tượng trong đồ họa 2D thường được biểu diễn bằng các điểm, đường thẳng, hình chữ nhật, hình tròn, và các hình dạng đa giác khác
• Ứng dụng: Đồ họa 2D được sử dụng rộng rãi trong thiết kế giao
diện người dùng, trình chiếu, biểu đồ, hoạt hình 2D và các trò chơi điện tử 2D
II.3 Đồ Họa 3D (Three -Dimensional Graphics):
• Khái niệm: Đồ họa 3D liên quan đến việc tạo ra các hình ảnh có
chiều sâu, giúp mô phỏng không gian ba chiều thực tế Các đối tượng trong đồ họa 3D được biểu diễn bằng các mô hình đa giác (polygons) và các kỹ thuật chiếu sáng, đổ bóng để tạo ra hiệu ứng chân thực
• Ứng dụng: Đồ họa 3D được sử dụng trong các lĩnh vực như thiết
kế kiến trúc, kỹ thuật, mô phỏng y khoa, hoạt hình 3D, và các trò chơi điện tử 3D
II.4 Các Thành Phần Cơ Bản Của Hệ Thống Đồ Họa Máy
Tính
a Phần Cứng Đồ Họa (Graphics Hardware):
• GPU (Graphics Processing Unit): GPU là bộ xử lý chuyên dụng được tối ưu hóa cho việc thực hiện các phép tính đồ họa phức tạp
Nó giúp tăng tốc quá trình xử lý hình ảnh, video và mô phỏng 3D
Trang 77
• Màn Hình (Monitor): Màn hình là thiết bị đầu ra hiển thị hình ảnh
đồ họa Các loại màn hình phổ biến bao gồm LCD, LED, và OLED
b Phần Mềm Đồ Họa (Graphics Software):
• Thư Viện Đồ Họa (Graphics Libraries): Các thư viện đồ họa
cung cấp các hàm và công cụ để lập trình viên có thể dễ dàng tạo
ra các hình ảnh đồ họa Các thư viện phổ biến bao gồm OpenGL, DirectX, SDL, và ‘graphics.h’
• Ứng Dụng Đồ Họa (Graphics Applications): Các phần mềm như
Adobe Photoshop, Autodesk Maya, Blender, và Unity cho phép người dùng tạo và chỉnh sửa các hình ảnh đồ họa phức tạp
II.5 Các Kỹ Thuật và Công Nghệ Đồ Họa
a Raster Graphics và Vector Graphics:
• Raster Graphics: Còn được gọi là đồ họa điểm ảnh (bitmap graphics), bao gồm các hình ảnh được tạo thành từ lưới các điểm ảnh (pixels) Mỗi điểm ảnh có một màu sắc xác định, và toàn bộ hình ảnh được lưu trữ dưới dạng mảng các điểm ảnh
• Vector Graphics: Đồ họa vector sử dụng các đối tượng hình học như đường thẳng, đường cong, và hình đa giác để biểu diễn hình ảnh Đồ họa vector có thể được phóng to hoặc thu nhỏ mà không làm mất chất lượng
b Kỹ Thuật Chiếu Sáng và Đổ Bóng
(Lighting and Shading Techniques)
• Phong Shading: Một kỹ thuật đổ bóng giúp tạo ra các hiệu ứng ánh sáng mượt mà trên bề mặt của đối tượng 3D
• Gouraud Shading: Kỹ thuật này tính toán ánh sáng tại các đỉnh của đa giác và sau đó nội suy giá trị ánh sáng cho các điểm trong nội bộ đa giác
c Mô Hình Hóa 3D (3D Modeling)
Trang 88
• Mesh Modeling: Sử dụng lưới các đa giác (polygons) để tạo ra
mô hình 3D của các đối tượng
• NURBS Modeling: Sử dụng các đường cong và bề mặt được xác định bởi các hàm toán học để tạo ra các mô hình 3D mượt mà và chính xác
d Kỹ Thuật Kết Xuất (Rendering Techniques)
• Ray Tracing: Tạo ra các hiệu ứng ánh sáng và bóng
• Rasterization: Chuyển đổi các đối tượng hình học 3D thành các điểm ảnh 2D
Trang 99
Phần III: Các Thư Viện Đồ Họa Trong C
III.1 Thư viện ‘graphics.h’
• Tính Năng Chính:
Thư viện graphics.h cung cấp một số hàm cơ bản để tạo ra các hình ảnh đồ họa 2D Dưới đây là một số tính năng chính của thư viện này:
o Vẽ các hình dạng cơ bản: graphics.h hỗ trợ các hàm để vẽ các hình dạng cơ bản như đường thẳng, hình chữ nhật, hình tròn, hình ellipse và đa giác
o Màu sắc: Cho phép thiết lập và sử dụng các màu sắc khác
nhau để vẽ các đối tượng đồ họa
• Chữ viết: Hỗ trợ các hàm để vẽ văn bản trên màn hình đồ họa với
các phông chữ và kích thước khác nhau
• Các hàm tiện ích: Cung cấp các hàm để khởi tạo và đóng chế độ
đồ họa, cũng như quản lý các sự kiện đầu vào đơn giản
• Các Hàm Cơ bản trong thư viện graphics:
o Khởi Tạo và Đóng Đồ Họa:
▪ Initgraph: Khởi tạo chế độ đồ họa
▪ Closegraph: Đóng chế độ đồ họa
o Vẽ Các Hình Dạng Cơ Bản:
▪ line: Vẽ một đường thẳng giữa hai điểm
▪ rectangle: Vẽ một hình chữ nhật
Trang 1010
▪ circle: Vẽ một hình tròn
▪ ellipse: Vẽ một hình ellipse
o Thao Tác Với Màu Sắc:
▪ setcolor: Đặt màu cho các hình vẽ
▪ setbkcolor: Đặt màu nền cho màn hình đồ họa
▪ setfillstyle: Đặt kiểu và màu để tô đầy các hình dạng
o Hiển Thị Văn Bản:
▪ outtext: Hiển thị một chuỗi văn bản tại vị trí hiện tại
▪ outtextxy: Hiển thị một chuỗi văn bản tại vị trí cụ thể
o Thao Tác Với Hình Ảnh:
▪ putpixel: Đặt một điểm ảnh tại vị trí cụ thể
▪ getimage: Lấy hình ảnh từ màn hình đồ họa
▪ putimage: Đặt hình ảnh lên màn hình đồ họa
o Thao Tác Với Ảnh Bitmap:
▪ readimagefile: Đọc một tệp hình ảnh và hiển thị nó trên màn hình
▪ putimage: Đặt hình ảnh đã lưu trữ trước đó lên màn hình
o Thao Tác Với Pixel:
▪ getpixel: Lấy màu của một điểm ảnh tại vị trí cụ thể
o Thao Tác Khác:
▪ delay: Tạm dừng chương trình trong khoảng thời gian xác định (mili giây)
Trang 11o Tài liệu và nguồn tài nguyên phong phú: Vì đã tồn tại từ
lâu, graphics.h có rất nhiều tài liệu và ví dụ trực tuyến,
giúp người học dễ dàng tiếp cận và tìm hiểu
• Nhược Điểm:
o Tương thích hạn chế: graphics.h được thiết kế cho hệ điều
hành DOS và trình biên dịch Turbo C/C++ Điều này làm cho nó khó sử dụng trên các hệ điều hành hiện đại như
Windows, macOS, và Linux
o Hiệu suất và tính năng hạn chế: So với các thư viện đồ họa
hiện đại như SDL OpenGL, , hoặc SFML, graphics.h có hiệu suất thấp hơn và thiếu nhiều tính năng nâng cao
o Phụ thuộc vào môi trường cũ: Để sử dụng graphics.h trên
các hệ điều hành hiện đại, người dùng thường phải sử dụng
Trang 1212
các môi trường giả lập như DOSBox hoặc các phiên bản cập nhật của thư viện như WinBGIm
• Cài Đặt và Sử Dụng graphics.h Trên Hệ Điều Hành Hiện Đại:
(Text editor: Visual Studio Code)
o Download tệp zip của WinBGIm
o Giải nén các tệp ‘winbgim.h’ ‘graphics.h’, , và ‘libbgi.a’ vào thư mục thích hợp
o Chạy chương trình thêm các tham số “lbgi lgdi32
-lcomdlg32 -luuid -loleaut32 -lole32” giúp trình biên dịch tìm
thấy các định nghĩa hàm trong các tệp thư viện tương ứng
• Kết Luận
Thư viện ‘graphics.h’ tuy đã lỗi thời nhưng vẫn là một công cụ
hữu ích cho việc học lập trình đồ họa cơ bản Đối với các dự án đồ họa phức tạp hơn hoặc yêu cầu hiệu suất cao trên các hệ điều hành hiện đại, lập trình viên nên xem xét các thư viện đồ họa tiên tiến hơn như SDL OpenGL, , hoặc SFML Tuy nhiên, graphics.h vẫn là một điểm khởi đầu tốt cho những ai mới làm quen với lập trình đồ họa
III.2 OpenGL
• Giới thiệu
o OpenGL (Open Graphics Library) là một API tiêu chuẩn và phổ biến để lập trình đồ họa 2D và 3D Được phát triển vào đầu những năm 1990, OpenGL đã trở thành nền tảng cho nhiều ứng dụng đồ họa chuyên nghiệp, từ trò chơi điện tử đến phần mềm mô phỏng và thiết kế kỹ thuật OpenGL là một API độc lập với nền tảng, hỗ trợ trên nhiều hệ điều hành bao gồm Windows, macOS, Linux và các hệ điều hành di động
• Tính Năng Chính
OpenGL cung cấp một loạt các tính năng mạnh mẽ cho lập trình đồ họa:
Trang 1313
o Đồ họa 3D: Cung cấp các hàm để tạo và quản lý các đối tượng
3D phức tạp, bao gồm các phép biến hình, chiếu sáng, và kết cấu
o Đồ họa 2D: Mặc dù mạnh mẽ với đồ họa 3D, OpenGL cũng
hỗ trợ đầy đủ các hàm để vẽ các hình ảnh 2D
o Khả năng mở rộng: Hỗ trợ các tiện ích mở rộng cho phép các
nhà phát triển sử dụng các tính năng mới nhất của phần cứng
đồ họa
o Tương thích với nhiều ngôn ngữ lập trình: Có thể được sử
dụng với C, C++, Python, Java, và nhiều ngôn ngữ lập trình khác thông qua các binding (liên kết)
o Hỗ trợ bởi phần cứng: Tận dụng tối đa sức mạnh của GPU để
tăng hiệu suất đồ họa
• Các Hàm Cơ Bản Trong Thư Viện GLEW (OpenGL Extension
Wrangler Library) và GLFW (Graphics Library Framework)
o Khởi Tạo và Thiết Lập
▪ glfwInit: Khởi tạo thư viện GLFW
▪ glfwCreateWindow: Tạo một cửa sổ hiển thị
▪ glewInit: Khởi tạo GLEW sau khi tạo ngữ cảnh
OpenGL
o Vẽ Các Hình Dạng Cơ Bản
▪ glBegin và glEnd: Bắt đầu và kết thúc vẽ các hình dạng
▪ glVertex2f và glVertex3f: Chỉ định tọa độ các đỉnh
o Thiết Lập Màu Sắc
▪ glColor3f: Đặt màu sắc cho các đỉnh
▪ glClearColor: Đặt màu nền cho cửa sổ
o Thiết Lập Bộ Đệm Khung (Frame Buffer)
▪ glfwSwapBuffers: Hoán đổi bộ đệm khung, cập nhật màn hình với những gì đã vẽ
Trang 1414
▪ glfwPollEvents: Kiểm tra và xử lý các sự kiện
o Sử Dụng Shader
Shader là các chương trình chạy trên GPU, sử dụng để
xử lý các khía cạnh khác nhau của đồ họa Để sử dụng shader, cần có các hàm như:
▪ glCreateShader: Tạo một shader mới
▪ glShaderSource: Nạp mã nguồn cho shader
▪ glCompileShader: Biên dịch shader
▪ glCreateProgram: Tạo một chương trình shader
▪ glAttachShader: Gắn shader vào chương trình
▪ glLinkProgram: Liên kết chương trình shader
▪ glUseProgram: Sử dụng chương trình shader
• Ví Dụ Cơ Bản trong Thư viện glew&glfw
(Tạo Hình Tam giác)
Trang 1515
• Ưu Điểm
o Hiệu suất cao: OpenGL tận dụng tối đa sức mạnh của GPU,
cho phép thực hiện các phép toán đồ họa phức tạp một cách nhanh chóng và hiệu quả
o Đa nền tảng: Hỗ trợ trên nhiều hệ điều hành và nền tảng phần
cứng
Trang 1616
o Cộng đồng lớn và hỗ trợ tốt: Với một cộng đồng lớn các nhà
phát triển và tài liệu phong phú, dễ dàng tìm kiếm sự hỗ trợ và các tài nguyên học tập
o Mở rộng và tương thích ngược: Các phiên bản mới của
OpenGL thường giữ tính tương thích ngược, giúp các ứng dụng cũ vẫn có thể hoạt động trên phần cứng mới
• Nhược Điểm
o Độ phức tạp cao: Đối với những người mới bắt đầu, OpenGL
có thể khá phức tạp và khó học do số lượng lớn các hàm và khái niệm liên quan
o Không hỗ trợ các tính năng cấp cao: OpenGL cung cấp các
công cụ ở mức độ thấp, nghĩa là bạn cần tự xây dựng nhiều tính năng cao cấp như quản lý tài nguyên, tải mô hình, và xử
lý ánh sáng phức tạp
o Sự phân mảnh: Mặc dù OpenGL là tiêu chuẩn, sự khác biệt
trong việc triển khai giữa các nhà cung cấp phần cứng đôi khi dẫn đến các vấn đề tương thích và hiệu suất không đồng nhất
• Kết Luận
OpenGL là một công cụ mạnh mẽ và linh hoạt cho việc phát triển đồ họa máy tính, đặc biệt là đồ họa 3D Mặc dù yêu cầu kiến thức và kỹ năng lập trình đồ họa cao, OpenGL cung cấp hiệu suất và khả năng tùy biến mạnh mẽ, là lựa chọn hàng đầu cho các ứng dụng đòi hỏi đồ họa phức tạp và chất lượng cao Bằng cách sử dụng kết hợp với các thư viện hỗ trợ như GLUT, GLFW, hoặc SDL, các nhà phát triển có thể tạo ra các ứng dụng đồ họa mạnh mẽ và đa nền tảng