Bài giảng Lập trình nâng cao - Chương 7+8: Graphics (Đồ họa với SDL)
lượt xem 1
download
Bài giảng Lập trình nâng cao - Chương 7+8: Graphics (Đồ họa với SDL). Chương này cung cấp cho sinh viên những nội dung gồm: thư viện SDL; cài đặt SDL với CodeBlocks-MinGW; xây dựng API vẽ; vẽ hình bằng bút vẽ; vẽ hình fractal; kỹ thuật đệ quy;... Mời các bạn cùng tham khảo chi tiết nội dung bài giảng!
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+8: Graphics (Đồ họa với SDL)
- 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 int SCREEN_HEIGHT = trường bình thường ở nhà thông thường chạy với môi 600; renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | Painter"; const string WINDOW_TITLE = "An Implementation of Code.org 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