Bài giảng Lập trình nâng cao - Chương 7+8: Graphics (Đồ họa với SDL)
Số trang: 97
Loại file: pdf
Dung lượng: 4.17 MB
Lượt xem: 11
Lượt tải: 0
Xem trước 10 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
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!
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình nâng cao - Chương 7+8: Graphics (Đồ họa với SDL)Graphics7 - Đồ hoạ với SDLhttps://github.com/tqlong/advprogramNộ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 / 15Lự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_enginesCác tính năng của SDLhttps://wiki.libsdl.org/Introduction● Video (2D, 3D) ● Threads● Input events ● CPU Detection● Force Feedback ● Timer● Audio ● Endian independence● File I/O ● Power Management● Shared objectsCà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 / 15Cấu hình CodeBlocksSettings / Compiler ... 7 / 15Cấu hình CodeBlocksLiên kết thư viện:● Linker settings: -lmingw32 -lSDL2main -lSDL2 8 / 15Cấu hình CodeBlocksVị trí thư mục include và lib: Search directories | CompilersĐường dẫn đến thưmục chứa SDL 9 / 15Cấu hình CodeBlocksVị trí thư mục include và lib: Search directories | Linker 10 / 15Sử 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átvoid 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 m ...
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình nâng cao - Chương 7+8: Graphics (Đồ họa với SDL)Graphics7 - Đồ hoạ với SDLhttps://github.com/tqlong/advprogramNộ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 / 15Lự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_enginesCác tính năng của SDLhttps://wiki.libsdl.org/Introduction● Video (2D, 3D) ● Threads● Input events ● CPU Detection● Force Feedback ● Timer● Audio ● Endian independence● File I/O ● Power Management● Shared objectsCà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 / 15Cấu hình CodeBlocksSettings / Compiler ... 7 / 15Cấu hình CodeBlocksLiên kết thư viện:● Linker settings: -lmingw32 -lSDL2main -lSDL2 8 / 15Cấu hình CodeBlocksVị trí thư mục include và lib: Search directories | CompilersĐường dẫn đến thưmục chứa SDL 9 / 15Cấu hình CodeBlocksVị trí thư mục include và lib: Search directories | Linker 10 / 15Sử 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átvoid 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 m ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Lập trình nâng cao Lập trình nâng cao Đồ họa với SDL Thư viện SDL Cài đặt SDL Xây dựng API vẽ Vẽ hình fractalGợi ý tài liệu liên quan:
-
142 trang 130 0 0
-
Giáo trình Lập trình nâng cao (Nghề Lập trình máy tính): Phần 2 - Tổng cục dạy nghề
169 trang 87 0 0 -
Đề thi kết thúc học phần Lập trình nâng cao - Học viện Nông nghiệp Việt Nam
1 trang 80 0 0 -
Giáo trình Lập trình nâng cao: Phần 2 - Nguyễn Văn Vinh
153 trang 43 0 0 -
Lập trình tự động hóa PLC S7-300 với TIA Portal: Phần 2
233 trang 35 0 0 -
Bài giảng Lập trình nâng cao: Bài 10+11+12 - Trương Xuân Nam
44 trang 33 0 0 -
Giáo trình Lập trình nâng cao: Phần 1 - Nguyễn Văn Vinh
126 trang 31 0 0 -
Bài giảng Lập trình nâng cao (Advanced Programming) - Chương 7: Con trỏ
56 trang 30 0 0 -
64 trang 26 0 0
-
Bài giảng Lập trình nâng cao (Advanced Programming) - Chương 9: Kiểu dữ liệu tệp
18 trang 26 0 0