Đồ 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ề ở 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í
Trang 1BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO HỌC PHẦN
ĐỒ HỌA MÁY TÍNH
Đề tài: CHƯƠNG TRÌNH ĐỒ HỌA
VẼ TRANH BẤT KỲ
Sinh viên thực hiện
MSSV
: ĐẶNG TÙNG LÂM : 18810310662 Giảng viên hướng dẫn : NGÔ NGỌC THÀNH
Hà Nội, tháng 5 năm 2024
Trang 2Sinh viên thực hiện Chữ ký Ghi chú ĐẶNG TÙNG LÂM
MSSV: 18810310662
Giảng viên 1:
Giảng viên 2:
Trang 3MỤC LỤC
LỜI MỞ ĐẦU 3
CHƯƠNG 1: GIỚI THIỆU NHỮNG NÉT VỀ ĐỒ HỌA MÁY TÍNH 4
1.1 Lịch sử phát triển 4
1.2 Khái niệm đồ họa máy tính và các kỹ thuật đồ họa 5
1.3 Phân loại của đồ họa máy tính 6
CHƯƠNG 2 PHÂN TÍCH YÊU CẦU 8
2.1 Cách thêm thư viện đồ họa trên DevC++ 8
2.2 Hướng dẫn sử dụng 8
CHƯƠNG 3: GIẢI QUYẾT BÀI TOÁN 10
2.1 Phát biểu bài toán 10
2.2 Các bước cài đặt 10
2.3 Cài đặt thuật toán 10
KẾT LUẬN 15
TÀI LIỆU THAM KHẢO 16
Trang 4LỜI MỞ ĐẦU
Trong thời đại mà cuộc cách mạng công nghiệp 4.0 bùng nổ như hiện nay với tập trung vào sự phát triển của công nghệ, không thể không nhắc đến đồ họa máy tính
Đồ họa máy tính là phương pháp và công nghệ dùng trong việc chuyển đổi qua lại giữa dữ liệu và hình ảnh bằng máy tính Đồ 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ề ở 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
Đồ họa máy tính có liên quan ít nhiều đến một số lĩnh vực như toán học: ví dụ đại
số, hình học giải tích, hình học họa hình, quang học, và kĩ thuật máy tính, đặc biệt là chế tạo thiết bị phần cứng (như các loại màn hình, các thiết bị xuất, nhập, các vỉ mạch dùng cho đồ họa )
Theo nghĩa rộng hơn, đồ họa máy tính là phương pháp và công nghệ dùng trong việc chuyển đổi qua lại giữa dữ liệu và hình ảnh trên màn hình bằng máy tính Đồ họa máy tính hay kĩ thuật đồ họa máy tính còn được hiểu dưới dạng phương pháp
và kĩ thuật tạo hình ảnh từ các mô hình toán học mô tả các đối tượng hay dữ liệu lấy được từ các đối tượng trong thực tế
Nhận thấy được tầm quan trọng đó của đồ họa máy tính, nhóm em đã lựa chọn đề tài “Thiết kế chương trình đồ họa vẽ tranh bất kỳ”
Trang 5CHƯƠNG 1: GIỚI THIỆU NHỮNG NÉT VỀ ĐỒ HỌA MÁY TÍNH
1.1 Lịch sử phát triển
Sự ra đời của đồ họa máy tính có thể bắt nguồn từ đầu những năm 1960 khi những hình ảnh do máy tính lần đầu tiên được tạo ra Lúc này, đó chỉ là những đồ hoạ đơn giản và thô sơ Tuy nhiên, khi công nghệ ngày càng phát triển, độ phức tạp và tính chân thực của những đồ họa này cũng tăng theo
Lịch sử của đồ họa máy tính vào thập niên 1960 còn được đánh dấu bởi dự án SketchPad được phát triển tại Học viện Công nghệ Massachusetts (MIT) bởi Ivan Sutherland Các thành tựu thu được đã được báo cáo tại hội nghị Fall Joint Computer và đây cũng chính là sự kiện lần đầu tiên người ta có thể tạo mới, hiển thị và thay đổi được dữ liệu hình ảnh trực tiếp trên màn hình máy tính trong thời gian thực Hệ thống Sketchpad này được dùng để thiết kế hệ thống mạch điện và bao gồm những thành phần sau:
- CRT màn hình
- Bút sáng và một bàn phím bao gồm các phím chức năng
- Máy tính chứa chương trình xử lý các thông tin
Với hệ thống này, người sử dụng có thể vẽ trực tiếp các sơ đồ mạch điện lên màn hình thông qua bút sáng, chương trình sẽ phân tích và tính toán các thông số cần thiết của mạch điện do người dùng vẽ nên
Kỹ thuật đồ họa được liên tục hoàn thiện vào thập niên 1970 với sự xuất hiện của các chuẩn đồ họa làm tăng cường khả năng giao tiếp và tái sử dụng của phần mềm cũng như các thư viện đồ họa
Sự phát triển vượt bậc của công nghệ vi điện tử và phần cứng máy tính vào thập niên 1980 làm xuất hiện hàng loạt các vỉ mạch hỗ trợ cho việc truy xuất đồ họa đi cùng với sự giảm giá đáng kể của máy tính cá nhân làm đồ họa ngày càng đi sâu vào cuộc sống thực tế
Đến những năm 1990, phim bắt đầu kết hợp nhiều hình ảnh do máy tính tạo ra (CGI), dẫn đến những bộ phim có hình ảnh ấn tượng mà chúng ta thấy ngày nay
Sự phát triển này được thúc đẩy bởi cả tiến bộ công nghệ và khả năng sáng tạo vô tận của các chuyên gia trong lĩnh vực này
1.2 Khái niệm đồ họa máy tính và các kỹ thuật đồ họa
1.2.1 Đồ họa máy tính là gì ?
Trang 6- Đồ họa máy tính là một ngành khoa học Tin học chuyên nghiên cứu về các phương pháp và kỹ thuật để có thể mô tả và thao tác trên các đối tượng của thế giới thực bằng 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
- Với việc mô tả dữ liệu thông qua các hình ảnh và màu sắc đa dạng, 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
1.2.2 Các kỹ thuật đồ họa
1.2.2.1 Kỹ thuật đồ họa điểm
- Các mô hình, hình ảnh của các đối tượng được hiển thị thông qua từng pixel (từng mẫu rời rạc)
- Đặc điểm: Có thể thay đổi thuộc tính
+ Xoá đi từng pixel của mô hình và hình ảnh các đối tượng
+ Các mô hình hình ảnh được hiển thị như một lưới điểm (grid) các pixel rời rạc + Từng pixel đều có vị trí xác định, được hiển thị với một giá trị rời rạc (số nguyên)
+ Các thông số hiển thị (màu sắc hoặc độ sáng)
+ Tập hợp tất cả các pixel của grid cho chúng ta mô hình, hình ảnh đối tượng mà chúng ta muốn hiển thị
- Phương pháp để tạo ra các pixel:
+ Phương pháp dùng phần mềm để vẽ trực tiếp từng pixel một
+ Dựa trên các lý thuyết mô phỏng (lý thuyết Fractal, v.v) để xây dựng nên hình ảnh mô phỏng của sự vật
+ Phương pháp rời rạc hoá (số hoá) hình ảnh thực của đối tượng
+ Có thể sửa đổi (image editing) hoặc xử lý (image processing) mảng các pixel thu được theo những phương pháp khác nhau để thu được hình ảnh đặc trưng của đối tượng
Trang 71.2.2.2 Kỹ thuật đồ họa Vector
- Xây dựng mô hình hình học cho hình ảnh đối tượng, xác định các thuộc tính của mô hình hình học, sau đó dựa trên mô hình này để thực hiện quá trình tô trát để hiển thị từng điểm của mô hình, hình ảnh của đối tượng
- Kỹ thuật này chỉ lưu trữ mô hình toán học của các thành phần trong mô hình hình học cùng với các thuộc tính tương ứng mà không cần lưu lại toàn bộ tất cả các pixel của hình ảnh đối tượng
- Sự khác biệt giữa Đồ họa điểm và Đồ họa Vector như sau:
Đồ họa điểm:
- Hình ảnh và mô hình của các vật thể được biểu diễn bởi tập hợp các điểm của lưới (grid)
- Thay đổi thuộc tính của các pixel => thay đổi từng phần và từng vùng của hình ảnh
- Copy được các pixel từ một hình ảnh này sang hình ảnh khác
Đồ họa Vector:
- Không thay đổi thuộc tính của từng điểm trực tiếp
- Xử lý với từng thành phần hình học cơ sở của nó và thực hiện quá trình tô trát và hiển thị lại
- Quan sát hình ảnh và mô hình của hình ảnh và sự vật ở nhiều góc độ khác nhau bằng cách thay đổi điểm nhìn và góc nhìn
1.3 Phân loại của đồ họa máy tính
1.3.1 Phân loại theo các lĩnh vực của đồ họa máy tính
* Kỹ thuật đồ họa:
- Kiến tạo đồ họa gồm:
+ Các hệ CAD/CAM (Computer Aided Design/Computer Aided Manufacture System): kỹthuật đồ hoạ tập hợp các công cụ, các kỹ thuật trợ giúp cho thiết kế các chi tiết và các hệ thống khác nhau: hệ thống cơ, hệ thống điện, hệ thống điện tử… + Đồ hoạ minh hoạ (Presentation Graphics): gồm các công cụ giúp hiển thị các số liệu thí nghiệm một cách trực quan, dựa trên các mẫu đồ thị hoặc các thuật toán có sẵn
Trang 8+ Đồ hoạ hoạt hình và nghệ thuật: bao gồm các công cụ giúp cho các hoạ sĩ, các nhà thiết kế phim hoạt hình chuyên nghiệp làm các kỹ xảo hoạt hình, vẽ tranh Ví dụ: phần mềm 3D Studio, 3D Animation, 3D Studio Max
- Xử lý đồ họa gồm:
+ Kỹ thuật xử lý ảnh (Computer Imaging): sau quá trình xử lý ảnh cho ta ảnh số của đối tượng Trong quá trình xử lý ảnh sử dụng rất nhiều các kỹ thuật phức tạp:
kỹ thuật khôi phục ảnh, kỹ thuật làm nổi ảnh, kỹ thuật xác định biên ảnh
+ Kỹ thuật nhận dạng (Pattern Recognition): từ những ảnh mẫu có sẵn ta phân loại theo cấu trúc, hoặc theo các tiêu trí được xác định từ trước và bằng các thuật toán chọn lọc để có thể phân tích hay tổng hợp ảnh đã cho thành một tập hợp các ảnh gốc, các ảnh gốc này được lưu trong một thư viện và căn cứ vào thư viện này ta xây dựng được các thuật giải phân tích và tổ hợp ảnh
+ Kỹ thuật tổng hợp ảnh (Image Synthesis): là lĩnh vực xây dựng mô hình và hình ảnh của các vật thể dựa trên các đối tượng và mối quan hệ giữa chúng
1.3.2 Phân loại theo hệ tọa độ
- Kỹ thuật đồ họa:
+ Kỹ thuật đồ họa 2 chiều (2D): là kỹ thuật đồ hoạ máy tính sử dụng hệ toạ độ hai chiều (hệ toạ độ phẳng), sử dụng rất nhiều trong kỹ thuật xử lý bản đồ, đồ thị + Kỹ thuật đồ họa 3 chiều (3D): là kỹ thuật đồ hoạ máy tính sử dụng hệ toạ độ ba chiều, đòi hỏi rất nhiều tính toán và phức tạp hơn nhiều so với kỹ thuật đồ hoạ hai chiều
Trang 9CHƯƠNG 2 PHÂN TÍCH YÊU CẦU
2.1 Cách thêm thư viện đồ họa trên DevC++
Đường dẫn (Path):
+ Với Windows 32 bit: Path=”C:\Program Files\Dev-Cpp”
+ Với Windows 64 bit: Path=”C:\Program Files (x86)\Dev-Cpp”
– Hướng dẫn cài đặt:
+ Đối với Dev C++ 32 bit:
Bước 1: Copy 2 file “graphics.h” và “winbgim.h” vào thư mục
(Path)\MinGV32\include”
Bước 2: Copy file “libbgi.a” vào thư mục “(Path)\MinGV32\lib”
Bước 3: Copy 2 file “6-ConsoleAppGraphics.template” và
“ConsoleApp_cpp_graph.txt” vào thư mục “(Path)\Templates”
+ Đối với Dev C++ 64 bit:
Bước 1: Copy 2 file “graphics.h” và “winbgim.h” vào thư mục
“(Path)\MinGW64\
x86_64-w64-mingw32\include”
Bước 2: Copy file “libbgi.a” vào thư mục “(Path)\MinGW64\x86_64-w64-mingw32\lib”
Bước 3: Copy 2 file “6-ConsoleAppGraphics.template” và
“ConsoleApp_cpp_graph.txt” vào thư mục “(Path)\Templates”
2.2 Hướng dẫn sử dụng
Sau khi cài đặt theo các bước như hướng dẫn ở trên, ta mở Dev C++ lên
- Bước 1: Nếu bạn cài Dev C++ 32 bit thì bỏ qua bước này, còn nếu là 64 bit thì các bạn cần chọn trình biên dịch là TDM-GCC 32 bit ứng với phiên bản Dev C++ ta đã cài đặt (Đây là bước bắt buộc và phải làm từ đầu, nếu không thì sẽ không chạy được đồ họa)
Trang 10Trong bài do sử dụng DevC++ 5.11 (phát hành tháng 4/2015, đây cũng là bản cập nhật cuối cùng của ứng dụng), do đó trình biên dịch tương ứng sẽ là TDM-GCC 4.9.2 32-bit
- Bước 2: Tạo một Project mới bằng cách chọn File -> New -> Project…+ chọ mụcn Console Graphics Application + Tick vào ô C++ Project + đặt tên cho Project tại ô Name + chọn OK và vị trí lưu (hình bên dưới)
Trang 11CHƯƠNG 3: GIẢI QUYẾT BÀI TOÁN
2.1 Phát biểu bài toán
- Sau khi tìm hiểu về thư viện Graphics.h, em đã quyết định thực hiện vẽ một bức tranh dạng 2D bất kỳ từ những kiến thức đã học
2.2 Các bước cài đặt
- Bước 1: Khai báo thư viện Graphics.h
- Bước 2: Khởi tạo cửa sổ, trong khuôn khổ báo cáo này chọn cửa sổ có kích thước 720x480
- Bước 3: Khai báo các biến cần sử dụng
- Bước 4: Sử dụng vòng lặp for để thực hiện chuyển động của bức tranh
- Bước 5: Gọi hàm closegraph(); để đóng cửa sổ đồ họa
2.3 Cài đặt thuật toán:
#include<iostream>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
int main()
{
initwindow(720,480);
//a,b,c,d are used for Translation int a=200, b=-190;
int c=200, d=-190;
//x,y,m,n are used for Scaling float x=0.5, y=0.5;
float m=0.5, n=0.5; for(int i=0;i<=700;i++)
{
setcolor(15); setfillstyle(SOLID_FILL,15);
circle(150,35,25);
Trang 12floodfill(149,29,15);
setcolor(WHITE);
//================================= 1 CLOUDS
===============================//
//================================= LEFT CLOUD
=============================//
ellipse(40+200-i,30,60,240,10,15);
ellipse(65+200-i,20,345,165,20,15);
ellipse(105+200-i,27,340,160,20,15);
ellipse(109+200-i,42,230,50,20,10);
ellipse(66+200-i,46,163,340,31,17);
//================================= 2 TREES
==============================//
//================================= 1ST TREE
==============================//
//TREE 1 CROWN
setcolor(WHITE); setfillstyle(SOLID_FILL,GREEN); line(240-i,420,275-i,420); line(240-i,420,245-i,405);
line(275-i,420,270-i,405);
line(245-i,405,240-i,405);
line(270-i,405,275-i,405);
line(240-i,405,245-i,390);
line(275-i,405,270-i,390);
line(245-i,390,240-i,390);
Trang 13line(240-i,390,258-i,370);
line(275-i,390,257-i,370);
floodfill(259-i,375,WHITE);
//TREE 1 TRUNK
setcolor(WHITE); setfillstyle(SOLID_FILL,BROWN); line(250-i,460,250-i,420); line(265-i,460,265-i,420);
line(250-i,460,265-i,460);
line(250-i,420,265-i,420);
floodfill(255-i,441,WHITE);
//================================= 2ND TREE
===============================//
/* THIS TREE IS TRANSFORMATION OF 1ST
TREE */
//TREE 2 CROWN
setcolor(WHITE); setfillstyle(SOLID_FILL,GREEN); line(240+c-i,420+d,275+c-i,420+d);
line(240+c-i,420+d,245+c-i,405+d);
line(275+c-i,420+d,270+c-i,405+d);
line(245+c-i,405+d,240+c-i,405+d);
line(270+c-i,405+d,275+c-i,405+d);
line(240+c-i,405+d,245+c-i,390+d);
line(275+c-i,405+d,270+c-i,390+d);
line(245+c-i,390+d,240+c-i,390+d);
line(270+c-i,390+d,275+c-i,390+d);
Trang 14line(240+c-i,390+d,258+c-i,370+d);
line(275+c-i,390+d,257+c-i,370+d);
floodfill(259+c-i,375+d,WHITE);
//TREE 2 TRUNK
setcolor(WHITE); setfillstyle(SOLID_FILL,BROWN);
line(250+c-i,460+d,250+c-i,420+d);
line(265+c-i,460+d,265+c-i,420+d);
line(250+c-i,460+d,265+c-i,460+d);
line(250+c-i,420+d,265+c-i,420+d);
floodfill(255+c-i,441+d,WHITE);
//================================= 1 HOUSES
===============================//
//================================= 1ST HOUSE
==============================//
//TRIANGLE OF HOUSE 1
setcolor(WHITE); setfillstyle(SOLID_FILL,BROWN); line(88-i,400,163-i,400); line(100-i,370,88-i,400);
line(100-i,370,112-i,400);
line(100-i,370,150-i,370);
line(150-i,370,163-i,400);
floodfill(100-i,375,WHITE); setcolor(WHITE);
setfillstyle(SOLID_FILL,BROWN); line(88-i,400,163-i,400);
line(100-i,370,112-i,400);
line(100-i,370,112-i,400);
line(100-i,370,150-i,370);
Trang 15floodfill(105-i,375,WHITE); setcolor(WHITE); setfillstyle(SOLID_FILL,5); line(112-i,400,112-i,440);
line(88-i,440,112-i,440);
line(88-i,400,88-i,440);
line(112-i,440,163-i,440);
floodfill(90-i,402,WHITE); setcolor(WHITE); setfillstyle(SOLID_FILL,5); line(163-i,400,163-i,440);
line(112-i,440,163-i,440);
line(112-i,400,112-i,440);
line(88-i,400,163-i,400);
floodfill(115-i,405,WHITE);
//1ST HOUSE DOOR
setcolor(WHITE); setfillstyle(SOLID_FILL,RED); line(94-i,440,94-i,420); line(106-i,440,106-i,420);
line(94-i,420,106-i,420);
floodfill(97-i,435,WHITE);
}
getch();
closegraph();
}
Trang 16KẾT LUẬN
Qua thời gian học tập và vận dụng những kiến thức đã được trang bị, em đã thực hiện chương trình đồ họa vẽ tranh bất kỳ bằng DevC++, từ đó làm cơ sở để em có thể phát triển những chương trình đồ họa với chất lượng tốt hơn trong tương lai
Em cũng xin chân thành cảm ơn tới thầy Ngô Ngọc Thành – giảng viên bộ môn đã dành sự quan tâm và có những chỉ dẫn trong suốt quá trình em thực hiện báo cáo này Mặc dù có sự hoàn thiện nhất định, tuy nhiên do thời gian và khả năng của em
có hạn nên trong quá trình thực hiện không thể tránh khỏi những thiếu sót, vì vậy
em rất mong nhận được những góp ý hữu ích để giúp em hoàn thiện được tốt hơn
Trang 17TÀI LIỆU THAM KHẢO
[1] Ngô Quốc Tạo, Nguyễn Hữu Quỳnh, Đồ họa máy tính, Đại học Bách khoa Hà Nội, 2015
[2] Giáo trình Ngôn ngữ lập trình C/C++ / Nguyễn Ngọc Cương, NXB Thông tin
và Truyền thông, 2011