// Thêm thư viện Irrlicht
#include <irrlicht.h>
// Áp dụng các namespace để code ngắn gọn hơn
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
int main() {
// Khởi tạo IrrlichtDevice, nếu trên nền tảng khác ví dụ như Windows, Android, ...
// hãy thay đổi các tham số khi gọi hàm createDevice, tham khảo hàm này tại
// http://irrlicht.sourceforge.net/docu/namespaceirr.html#abaf4d8719cc26b0d30813abf85e47c76
auto device = createDevice(video::EDT_OPENGL, dimension2d<u32>(800, 600), 32, false, false, false, 0);
// Kiểm tra lỗi khởi tạo
if (!device) {
return 1;
}
// Đặt tiêu đề cửa sổ 3D
device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");
// Tìm đến các hệ thống phụ để thao tác
auto driver = device->getVideoDriver();
auto smgr = device->getSceneManager();
// Khởi tạo mesh từ file
auto mesh = smgr->getMesh("./sponza.obj");
// Irrlicht sử dụng reference counting (tương tự với smart pointers của C++11)
// Hãy gọi drop sau khi sử dụng các tài nguyên thay vì delete các con trỏ đó
if (!mesh) {
device->drop(); // Hủy device và thoát chương trình nếu không thể khởi tạo mesh
return 1;
}
// Khởi tạo scene node từ mesh
auto node = smgr->addMeshSceneNode(mesh);
if (node) {
// Cài đặt vật liệu cho node. Do chưa sử dụng ánh sáng nên chúng ta cần phải tắt thuộc tính này của node
// Bỏ dòng này đi thì vật thể sẽ hiển thị màu đen
node->setMaterialFlag(EMF_LIGHTING, false);
} else {
device->drop();
return 1;
}
// Cài đặt camera, tham số đầu tiên là parent
// dùng khi muốn hủy nhiều đối tượng liên quan, nếu parent bị drop cho đến khi hủy thực sự
// thì object được tạo bằng tham số parent cũng sẽ bị hủy khỏi bộ nhớ
// Tham số thứ 2 là tốc độ xoay
// Tham số thứ 3 là tốc độ di chuyển của camera
smgr->addCameraSceneNodeFPS(nullptr, 100.f, 1.f);
while (device->run()) {
// hai tham số đầu tiên yêu cầu xóa backbuffer và z buffer trước mỗi lần vẽ lên cửa sổ
// hữu ích trong việc hạn chế dữ liệu của lần vẽ trước vẫn còn mặc dù cảnh 3D đã thay đổi
// tham số SColor là màu nền của màn hình
driver->beginScene(true, true, SColor(255,100,101,140));
smgr->drawAll();
driver->endScene();
}
device->drop();
return 0;
}
g++ -o hello hello.cpp đường_dẫn_đến_file_libIrrlicht.a -Iđường_dẫn_đến_folder_include_của_Irrlicht
Vui lòng Đăng nhập hoặc Tạo tài khoản để tham gia cuộc hội thoại.