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: 17
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 fractalTài liệu có liên quan:
-
142 trang 134 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 95 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 88 0 0 -
Giáo trình Lập trình nâng cao: Phần 2 - Nguyễn Văn Vinh
153 trang 50 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 41 0 0 -
Lập trình tự động hóa PLC S7-300 với TIA Portal: Phần 2
233 trang 41 0 0 -
Bài giảng Lập trình nâng cao (Advanced Programming) - Chương 7: Con trỏ
56 trang 39 0 0 -
Giáo trình Lập trình nâng cao: Phần 1 - Nguyễn Văn Vinh
126 trang 36 0 0 -
64 trang 32 0 0
-
Ngôn ngữ Pascal - Lập trình nâng cao: Phần 1
109 trang 32 0 0