Bài giảng Lập trình nâng cao: Đồ hoạ với SDL - Trần Quốc Long

93 127 0
Bài giảng Lập trình nâng cao: Đồ hoạ với SDL - Trần Quốc Long

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng Lập trình nâng cao: Đồ hoạ với SDL cung cấp cho người học các kiến thức: 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.

Graphics 7&8 - Đồ 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út vẽ ○ Đường thẳng, hình vng, tam giác … ○ Phối hợp tạo thành 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 phát triển trị chơi chun nghiệp SDL dễ dàng kết nối với CodeBlocks SDL chạy nhiều tảng (Windows, Linux, Android, iOS …) / 15 Lựa chọn thư viện ● Phát triển phần mềm thực tế ○ Thường cần thư viện (bên thứ - third party library) ngồi tính ngơn ngữ thư viện chuẩn C++ ○ Lựa chọn thư viện cho dự án: cần thiết quan trọng ● Trong khóa học này, dùng SDL ○ Chỉ dùng tính đồ họa đơn giản ○ Đa tảng (cross-platform) - dễ cho sinh viên ● Để phát triển game thực thụ ○ Thường dùng Game Engine ○ https://en.wikipedia.org/wiki/List_of_game_engines Các tính 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 https://www.libsdl.org/release/SDL2-devel-2.0.5-mingw.tar.gz ● Giải nén vào thư mục đó, có thư mục ○ Bản 32bit: i686-w64-mingw32 ○ Bản 64bit: x86_64-w64-mingw32 ● Ở ta dùng 32 bit (vì CodeBlock dùng mingw32), thư mục có thư mục bin, include, lib, share ● Thư mục bin chứa SDL2.dll (liên kết chạy, copy file vào thư mục mã nguồn project) ● Thư mục include chứa file h (như stdio.h) khai báo hàm SDL ● Thư mục lib chứa thư viện (mã đối tượng) để liên kết chương trình / 15 Cấu hình CodeBlocks Settings / Compiler / 15 Cấu hình CodeBlocks Liên kết thư viện: ● Linker settings: -lmingw32 -lSDL2main -lSDL2 / 15 Cấu hình CodeBlocks Vị trí thư mục include lib: Search directories | Compilers Đường dẫn đến thư mục chứa SDL / 15 Cấu hình CodeBlocks Vị trí thư mục include lib: Search directories | Linker 10 / 15 Bảng màu http://stackoverflow.com/questions/16500656/which-color-gradient-is-used-to-color-mandel brot-in-wikipedia st SD L_C olor PALLETTE[] = { SD L_Color({66,30, 15}), SD L_Color({25 , 7,26}), SD L_Color({9, 1, 47}),SD L_C olor({4,4,73}), SD L_Color({0, 7, 00 }), SD L_Color({12,44, 138 }), SD L_Color({24,8 2, 177}), SD L_Color({5 7, 125 ,209}), SD L_Color({134, 181 ,229}), SD L_Color({21 1, 236, 248}), SD L_Color({241, 233, 191}), SD L_Color({248 ,201, 95 }), SD L_Color({25 , 170 ,0 }), SD L_Color({204,1 28, 0}), SD L_Color({15 3, 87, 0}), SD L_C olor({1 06, 52,3}) }; st in t PALETTE_CO U N T = sizeof(PALLETTE) / sizeof(SD L_Color); https://github.com/tqlong/advprogram/archive/9d8e1a0d5aed0f94 e1095d89813cf0b2ee99bb21.zip Zoom in (0, 0, 2*0.5, 1.5*0.5) (2*0.17, 1.5*0.17, 2*0.25,1.5*0.25) Fractal đệ quy ● Khái niệm đệ quy tốn học / lập trình ○ Một đối tượng (có tham số) định nghĩa thơng qua với tham số khác (thường nhỏ hơn) ○ Tổng số tự nhiên từ đến n: s(n) = n + s(n-1) ○ Giai thừa: factorial(n) = n * factorial(n-1) ○ Fibonaci: fibo(n) = fibo(n-1) + fibo(n-2) ● Hình fractal đệ quy ○ http://natureofcode.com/book/chapter-8-fractals/ ○ Self-similarity: each part is a “reduced-size copy of the whole.” (Mandelbrot) Tính giai thừa in t factorial(in t n) { if (n = = ) { retu rn 1; } else { retu rn n * factorial(n-1 ); } } Điều kiện dừng đệ quy Vẽ hình trịn lồng void d raw R ecu rsiveC ircle(Painter& painter, f l o at radius = 40 ); case 8: painter.jum pBackw ard(40 ); draw RecursiveCircle(painter, 40 ); b reak; void draw RecursiveC ircle(Painter& painter, f l o at radius) { Điều kiện đệ painter.createCircle(radius); quy (bán kính if(radius > 2) { lớn 2) painter.jum pForw ard(radius*0 25 f); draw RecursiveCircle(painter, radius*0.75f); painter.jum pBackw ard(radius*0.25f); } } Vẽ hình trịn bên trái, phải void d raw R ecu rsiveC ircle2(Painter& painter, f l o at radius) { painter.createCircle(radius); if(radius > 2) { painter.jum pBackw ard(radius / 2); draw RecursiveCircle2(painter, radius / 2); painter.jum pForw ard(radius * 2); draw RecursiveCircle2(painter, radius / 2); painter.jum pBackw ard(radius*3/2); } } Thêm hình trịn trên, void d raw R ecu rsiveC ircle4 (Painter& painter, f l o at radius) { painter.createCircle(radius); if(radius > ) { fl o at x = painter.getX(), y = painter.getY(); painter.setPosition(x-radius/2,y); draw RecursiveCircle4(painter, radius / 2); painter.setPosition(x+ radius/2,y-radius); draw RecursiveCircle4(painter, radius / 2); painter.setPosition(x+ radius*3/2,y); draw RecursiveCircle4(painter, radius / 2); painter.setPosition(x+ radius/2,y+ radius); draw RecursiveCircle4(painter, radius / 2); painter.setPosition(x,y); } } Đường Koch void d raw K och (Painter& painter, f l o at len, in t levels) { if (levels = = 1) { painter.m oveForw ard(len); } else { draw Koch(painter, len/3, levels-1); painter.turnLeft(60); draw Koch(painter, len/3, levels-1); painter.turnRight(120 ); draw Koch(painter, len/3, levels-1); painter.turnLeft(60); draw Koch(painter, len/3, levels-1); } } https://github.com /tqlong/advprogram /archive/ bf6e82b1c9465dc78b3c2a9bdcdf2d79b83a584c.zip Bài tập ● Viết thêm hàm Painter ○ Vẽ hình chữ nhật ○ Vẽ bánh (trong khí) ● Vẽ tập hợp Julia ○ https://en.wikipedia.org/wiki/Julia_set ● Tìm kiếm vẽ loại fractal đệ quy ● Tìm hiểu cách ghi ảnh thành tệp JPG, PNG ● Thử sức: phát triển phần mềm quản lý ảnh máy: xem ảnh, slideshow, thumbnails ... đặt SDL với CodeBlocks-MinGW ● Tải https://www.libsdl.org/release /SDL2 -devel-2.0.5-mingw.tar.gz ● Giải nén vào thư mục đó, có thư mục ○ Bản 32bit: i686-w64-mingw32 ○ Bản 64bit: x86_64-w64-mingw32... thuật đệ quy Đồ họa với SDL ● https://www.libsdl.org/ ● ● ● ● Hướng dẫn: http://wiki.libsdl.org/FrontPage SDL 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 nhiều... LO R; Nên đặt đoạn mã đâu ? http://stackoverflow com/questions/23870 83/where-should-youput-global-constants -in-a-c-program Lớp Painter: Hàm khởi tạo Painter::Painter(SD L_W indow * w indow ,SD

Ngày đăng: 08/05/2021, 12:19

Từ khóa liên quan

Mục lục

  • Slide 1

  • Nội dung

  • Đồ họa với SDL

  • Lựa chọn thư viện

  • Các tính năng của SDL

  • Cài đặt SDL với CodeBlocks-MinGW

  • Cấu hình CodeBlocks

  • Cấu hình CodeBlocks

  • Cấu hình CodeBlocks

  • Cấu hình CodeBlocks

  • Sử dụng SDL

  • Khởi tạo SDL

  • Báo lỗi SDL

  • Khởi tạo SDL

  • Khởi tạo SDL

  • Giải phóng SDL

  • Đợi 1 phím để thoát

  • Hàm main()

  • Slide 19

  • Nội dung

Tài liệu cùng người dùng

Tài liệu liên quan