Bài giảng Lập trình nâng cao - Chương 7: Graphics
lượt xem 3
download
Bài giảng "Lập trình nâng cao - Chương 7: Graphics" cung cấp cho người học các kiến thức về "Đồ hoạ với SDL" bao gồm: Thư viện SDL, xây dựng API vẽ, vẽ hình bằng bút vẽ, vẽ hình fractal. Mời các bạn cùng tham khảo nội dung chi tiết.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Lập trình nâng cao - Chương 7: Graphics
- Graphics 7 - Đồ hoạ với SDL https://github.com/tqlong/advprogram
- Nội dung ● Thư viện SDL ○ Cài đặt, khởi tạo, sử dụng, giải phóng ● Xây dựng API vẽ ○ Lớp Painter ● Vẽ hình bằng bút vẽ ○ Đường thẳng, hình vuông, tam giác … ○ Phối hợp tạo thành các hình tuyệt đẹp ○ Vẽ ảnh JPG, PNG ● Vẽ hình fractal ○ Kỹ thuật đệ quy
- Đồ họa với SDL ● https://www.libsdl.org/ ● Hướng dẫn: http://wiki.libsdl.org/FrontPage ● SDL có thể phát triển trò chơi chuyên nghiệp ● SDL dễ dàng kết nối với CodeBlocks ● SDL chạy trên nhiều nền tảng (Windows, Linux, Android, iOS …) 3 / 15
- Lựa chọn thư viện ● Phát triển phần mềm trên thực tế ○ Thường cần thư viện (bên thứ 3 - third party library) ngoài tính năng của ngôn ngữ và thư viện chuẩn của C++ ○ Lựa chọn thư viện cho dự án: cần thiết và quan trọng ● Trong khóa học này, dùng SDL bởi ○ Chỉ dùng các tính năng đồ họa đơn giản ○ Đa nền tảng (cross-platform) - dễ cho sinh viên ● Để phát triển game thực thụ ○ Thường dùng các Game Engine ○ https://en.wikipedia.org/wiki/List_of_game_engines
- Các tính năng của SDL https://wiki.libsdl.org/Introduction ● Video (2D, 3D) ● Threads ● Input events ● CPU Detection ● Force Feedback ● Timer ● Audio ● Endian independence ● File I/O ● Power Management ● Shared objects
- Cài đặt SDL với CodeBlocks-MinGW ● Tải về https://www.libsdl.org/release/SDL2-devel-2.0.5-mingw.tar.gz ● Giải nén vào một thư mục nào đó, trong đó có 2 thư mục ○ Bản 32bit: i686-w64-mingw32 ○ Bản 64bit: x86_64-w64-mingw32 ● Ở đây ta dùng bản 32 bit (vì CodeBlock đang dùng mingw32), trong thư mục này có 4 thư mục bin, include, lib, share ● Thư mục bin chứa SDL2.dll (liên kết khi chạy, copy file này vào thư mục mã nguồn project) ● Thư mục include chứa các file .h (như stdio.h) khai báo các hàm của SDL ● Thư mục lib chứa các thư viện (mã đối tượng) để liên kết chương trình 6 / 15
- Cấu hình CodeBlocks Settings / Compiler ... 7 / 15
- Cấu hình CodeBlocks Liên kết thư viện: ● Linker settings: -lmingw32 -lSDL2main -lSDL2 8 / 15
- Cấu hình CodeBlocks Vị trí thư mục include và lib: Search directories | Compilers Đường dẫn đến thư mục chứa SDL 9 / 15
- Cấu hình CodeBlocks Vị trí thư mục include và lib: Search directories | Linker 10 / 15
- Sử dụng SDL (0,0) ● Khởi tạo ○ SDL_Init() (x,y) ○ Mở cửa sổ để vẽ ○ Lấy bút vẽ của cửa sổ ● Vẽ hình ● Giải phóng SDL (width, height) ○ Giải phóng bút vẽ, cửa sổ ○ SDL_Quit()
- Khởi tạo SDL #include #include sử dụng thư viện SDL2 using namespace std; int main(int argc, char* argv[]) { return 0; }
- Báo lỗi SDL void logSDLError(std::ostream& os, const std::string &msg, bool fatal = false); void logSDLError(std::ostream& os, const std::string &msg, bool fatal) { os
- Khởi tạo SDL const int SCREEN_WIDTH = 800; const int SCREEN_HEIGHT = 600; const string WINDOW_TITLE = "An Implementation of Code.org Painter"; void initSDL(SDL_Window* &window, SDL_Renderer* &renderer); Đại diện cho cửa sổ vẽ Đại diện cho bút vẽ
- void initSDL(SDL_Window* &window, SDL_Renderer* &renderer) Mở cửa sổ vẽ { theo kích thước Khởi tạo SDL if (SDL_Init(SDL_INIT_EVERYTHING) != 0) logSDLError(std::cout, "SDL_Init", true); đã chọn window = SDL_CreateWindow(WINDOW_TITLE.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); //window = SDL_CreateWindow(WINDOW_TITLE.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_FULLSCREEN_DESKTOP); if (window == nullptr) logSDLError(std::cout, "CreateWindow", true); const int SCREEN_WIDTH = 800; //Khi const thông int thường chạy với môi= trường SCREEN_HEIGHT 600; bình thường ở nhà renderer = SDL_CreateRenderer(window, const string WINDOW_TITLE = "An-1, SDL_RENDERER_ACCELERATED Implementation of Code.org| Painter"; SDL_RENDERER_PRESENTVSYNC); Lấy bút vẽ //Khi chạy ở máy thực hành WinXP ở trường (máy ảo) void initSDL(SDL_Window* &window, SDL_Renderer* &renderer); //renderer = SDL_CreateSoftwareRenderer(SDL_GetWindowSurface(window)); if (renderer == nullptr) logSDLError(std::cout, "CreateRenderer", true); SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear"); SDL_RenderSetLogicalSize(renderer, SCREEN_WIDTH, SCREEN_HEIGHT); }
- Giải phóng SDL void quitSDL(SDL_Window* window, SDL_Renderer* renderer); void quitSDL(SDL_Window* window, SDL_Renderer* renderer) { SDL_DestroyRenderer(renderer); Giải phóng bộ nhớ quản SDL_DestroyWindow(window); lý cửa sổ và SDL_Quit(); bút vẽ }
- Đợi 1 phím để thoát void waitUntilKeyPressed(); void waitUntilKeyPressed() { SDL_Event e; while (true) { if ( SDL_WaitEvent(&e) != 0 && Xác định sự (e.type == SDL_KEYDOWN || e.type == SDL_QUIT) ) kiện bàn phím return; SDL_Delay(100); } }
- Hàm main() int main(int argc, char* argv[]) https://github.com/tqlong/advprogram/ra { w/6f01f8f6f96afe0aa9e107d65dcde1780 SDL_Window* window; 2f1e1e3/lec10-sdl/main.cpp SDL_Renderer* renderer; initSDL(window, renderer); // Your drawing code here // use SDL_RenderPresent(renderer) to show it waitUntilKeyPressed(); quitSDL(window, renderer); return 0; }
- Cửa sổ trắng, ấn 1 phím bất kỳ để thoát
- Các hàm vẽ cơ bản // xóa màn hình int SDL_RenderClear(SDL_Renderer* renderer) // đặt màu vẽ r: red, g: green, b: blue, a: alpha opaque (255: mầu đặc nhất) int SDL_SetRenderDrawColor(SDL_Renderer* renderer, Uint8 r, Uint8 g, Uint8 b, Uint8 a) // vẽ điểm int SDL_RenderDrawPoint(SDL_Renderer* renderer, int x, int y) // vẽ đoạn thẳng int SDL_RenderDrawLine(SDL_Renderer* renderer, int x1, int y1, int x2, int y2) // vẽ hình chữ nhật rỗng int SDL_RenderDrawRect(SDL_Renderer* renderer, const SDL_Rect* rect) // vẽ hình chữ nhật đặc int SDL_RenderFillRect(SDL_Renderer* renderer, const SDL_Rect* rect)
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình nâng cao với Java
170 p | 99 | 14
-
Bài giảng Lập trình nâng cao: Giới thiệu môn học - Trần Quốc Long
16 p | 74 | 7
-
Bài giảng Lập trình nâng cao: Hàm - Trần Quốc Long
34 p | 63 | 6
-
Bài giảng Lập trình nâng cao: Phát triển chương trình - Trần Quốc Long
38 p | 78 | 6
-
Bài giảng Lập trình nâng cao: Hoạt hình, tách file - Trần Quốc Long
28 p | 66 | 6
-
Bài giảng Lập trình nâng cao: Hướng đối tượng - Nguyễn Thị Tú Mi
117 p | 65 | 5
-
Bài giảng Lập trình nâng cao: Bài 7 - Lý Anh Tuấn
33 p | 67 | 5
-
Bài giảng Lập trình nâng cao: Tìm kiếm và đếm - Trần Quốc Long
54 p | 70 | 5
-
Bài giảng Lập trình nâng cao - Chương 0: Giới thiệu môn học
6 p | 80 | 4
-
Bài giảng Lập trình nâng cao: Bài 6 - Lý Anh Tuấn
28 p | 48 | 4
-
Bài giảng Lập trình nâng cao: Bài 4+5+6 - Trương Xuân Nam
25 p | 34 | 4
-
Bài giảng Lập trình nâng cao: Bài 0 - Hoàng Thị Điệp
7 p | 83 | 3
-
Bài giảng Lập trình nâng cao: Chương 5 - Lý Anh Tuấn
54 p | 27 | 2
-
Bài giảng Lập trình nâng cao: Chương 1 - Lý Anh Tuấn
26 p | 35 | 2
-
Bài giảng Lập trình nâng cao - Chương 0: Giới thiệu môn học, Warm up Game over
16 p | 5 | 1
-
Bài giảng Lập trình nâng cao - Chương 1: Simple Calculator (Ôn tập)
18 p | 5 | 1
-
Bài giảng Lập trình nâng cao - Chương 2: Game Guess it (Hàm)
34 p | 4 | 1
-
Bài giảng Lập trình nâng cao - Chương 3: Game Hangman (Phát triển chương trình)
38 p | 8 | 1
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn