GPBasics 00: Mở đầu về Lập trình Game

Chào các bạn, đây là bài đầu tiên trong mục Nhập môn Lập trình Game của DevNT.org. Mình sẽ dành thời gian viết bài và đăng tải những vấn đề cơ bản trong lập trình game 3D. Irrlicht là một engine đồ họa đủ tốt và dễ sử dụng dành cho người mới học, nên mình quyết định lấy nó ra làm nền tảng thực hành, cốt yếu là người dùng sẽ nắm được cơ bản và tổng quan về lập trình game, còn về việc làm game thì có rất nhiều lựa chọn. Vậy nên mình sẽ không tranh cãi về việc tại sao lại là Irrlicht mà không phải là Unreal hay Unity, Cocos-2DX,…

Mục tiêu của những bài viết là tạo ra nền tảng thực hành cho người học lập trình và lập trình game, giúp bạn có được các kiến thức về việc sử dụng đồ họa trong lập trình, về ứng dụng của nó, có thể là lập trình game, cũng có thể là các chương trình mô phỏng, hoặc bất kỳ chương trình nào sử dụng đồ họa 3D, 2D.

Chúng ta cùng bắt đầu từ phần giới thiệu Irrlicht.

Irrlicht là gì?

Irrlicht là một 3D engine được viết bằng C++, đa nền tảng và hiệu quả cao. Nó cung cấp API (Application Programming Interface) để tạo ra các chương trình 3D và 2D như là games hoặc là các mô phỏng cho khoa học. Irrlicht cung cấp tài liệu rất chi tiết và tích hợp các tính năng mới về hình ảnh, bao gồm: Dynamic Shadows, Particle Systems, Character Animation (cử động nhân vật), Indoor và Outdoor (các hiệu ứng đi kèm để phù hợp cho môi trường trong (nhà, phòng, hang động,….) và môi trường ngoài trời, Collision Detection (kiểm tra va chạm giữa các vật thể). Tất cả những điều này có thể được sử dụng thông qua một API được thiết kế tốt, dễ dàng sử dụng. Irrlicht hoàn toàn miễn phí và mã nguồn mở.

Một số đặc điểm nổi bật:

– Render 3D thời gian thực sử dụng Direct3D và OpenGL với hiệu quả cao.

– Không phụ thuộc nền tảng: chạy trên Windows, Linux, Mac OS X, iOS, Android…

– Thư viện vật liệu (material) có sẵn đa dạng, hỗ trợ vertex, pixel, và geometry shader.

– Dễ dàng kết hợp khung cảnh ngoài trời và bên trong qua hệ quản lý scene tùy biến cao.

– Cử động nhân vật với khung xương hoặc morph target (Skeletal Animations và Mesh animations).

– Particle effects, billboards, light maps, environment mapping, stencil buffer shadows, và các hiệu ứng khác…

– Có thêm một số thư viện gắn kết cho các ngôn ngữ khác sử dụng: C#, VB, Delphi, Java,…

– Có thêm 2 software renderer (chạy hoàn toàn trên CPU) để thích hợp mọi nền tảng.

– Hệ thống giao diện 2D: Buttons, List (dropdown), Edit box (text),….

– Các chức năng đồ họa 2D như: alpha blending (alpha compositing – xếp chồng các ảnh dựa theo thuộc tính alpha của các pixel vào thành một), color key (chọn một color nào làm key thì lúc render tất cả các pixel có màu đó sẽ thành trong suốt, nó cũng chính là chroma key để tách phông xanh ra khỏi video ứng dụng trong điện ảnh), hiển thị Font, và các chức năng kết hợp giữa 3D và 2D.

– Thư viện tài liệu dễ tra cứu cùng nhiều ví dụ minh họa.

– Viết bằng C++ thuần túy và hoàn toàn hướng đối tượng.

– Hỗ trợ các định dạng đồ họa: Maya (.obj), 3DStudio (.3ds), COLLADA (.dae), Blitz3D (.b3d), Milkshape (.ms3d), Quake 3 levels (.bsp), Quake2 models (.md2), Microsoft DirectX (.X),….

– Đọc được các file texture: Windows Bitmap (.bmp), Portable Network Graphics (.png), Adobe Photoshop (.psd), JPEG File Interchange Format (.jpg), Truevision Targa (.tga), ZSoft Painbrush (.pcx) ,…

– Kiểm tra va chạm các vật thể nhanh và dễ sử dụng.

– Các phép toán 3D thông dụng cùng với template library cho container (Irrlicht tự viết container riêng chứ không sử dụng vector, list,….từ C++ STL).

– Đọc từ các định dạng file nén: (.zip, .pak, .pk3, .npk)

– Có sẵn XML parser.

– Hỗ trợ Unicode (để hiển thị cho các ngôn ngữ như tiếng Việt,….)

Download Irrlicht

Comments

Related Posts

GPBasics 06: Thực hành điều khiển nhân vật

Chào các bạn, hôm nay chúng ta sẽ cùng thực hành về điều khiển nhân vật, kết quả của bài này các bạn có thể xem tại video: Đầu tiên các bạn tạo một class mới như sau: #ifndef NINJA_H #define NINJA_H   #include <irrlicht.h>   // liệt kê các trạng thái của nhân vật […]

Read More

GPBasics 05: Căn bản về điều khiển nhân vật

Chào các bạn, trong tutorial này chúng ta sẽ làm việc với một số vấn đề trong điều khiển nhân vật. Chúng ta sẽ làm quen với khái niệm mới: Framerate independent movement. Trước khi đọc bài này thì chúng ta phải sử dụng các kiến thức về game loop (tài liệu về phần này […]

Read More