Irrlicht HelloWorld

  • Tổng số bài viết: 53
  • Số lần được cảm ơn: 17

Irrlicht HelloWorld Tác giả: manh

Trong bài này chúng ta sẽ viết những dòng code đầu tiên với Irrlicht để hiển thị một cảnh 3D như sau.



Cảnh 3D này có tên là Sponza, mình sử dụng phiên bản của Crytek.

Trước khi bắt đầu, hãy chắc chắn là bạn đã cài đặt thư viện Irrlicht cho IDE đang dùng.
(trỏ đến folder include của Irrlicht và thư viện mà bạn đã build theo hướng dẫn ).
Mình sẽ hướng dẫn sử dụng lệnh biên dịch thay vì IDE.

// 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;
}

Bạn biên dịch chương trình này bằng Linux Terminal hoặc MinGW64 shell của MSYS2 trên Windows.
g++ -o hello hello.cpp đường_dẫn_đến_file_libIrrlicht.a  -Iđường_dẫn_đến_folder_include_của_Irrlicht 

Chú ý:
- Windows: copy Irrlicht.dll vào thư mục của exe nếu bạn dùng thư viện liên kết động
- Linux: copy và đổi tên file libIrrlicht.so thành libIrrlicht.so.1.8 vào thư mục của file thực thi đã biên dịch.
Mỗi lần thực thi trên Linux, gõ lệnh export LD_LIBRARY_PATH=$PWD sau đó gọi ./hello

Toàn bộ code và file đồ họa của hướng dẫn này được lưu trữ trên GitHub
Sửa lần cuối: 5 năm 8 tháng trước bởi manh.
5 năm 8 tháng trước #1

Vui lòng Đăng nhập hoặc Tạo tài khoản để tham gia cuộc hội thoại.

Thời gian tải trang: 0.238 giây
©2024 GameDevSpot. All Rights Reserved.

Công cụ