【问题标题】:Irrlicht a floor plane with createHillPlaneMeshIrrlicht 使用 createHillPlaneMesh 生成平面
【发布时间】:2018-05-25 23:13:49
【问题描述】:

您好,我有一个关于 Irrlicht 库的问题

我想用我使用createHillPlaneMesh 的楼层制作地图。

我实际上正在学习 Irrlicht,我实际上有一个相机和立方体。

这是我启动它的时间:

while (_device.get_device()->run()) {
        _device.get_driver()->beginScene(true, true, color);
        _scene.get_sceneManager()->drawAll();
        _device.get_driver()->endScene();
    }

我调用 addMapBlock 并且它的工作很棒:

void Eo::Scene::addMapBlock(irr::f32 x, irr::f32 y, irr::f32 z)
{
    irr::f32 unitSize = 10.0f;
    irr::core::vector3df pos;
    pos.X = x;
    pos.Y = y;
    pos.Z = z;
    irr::scene::IMeshSceneNode *cube = _sceneManager->addCubeSceneNode(
        unitSize, nullptr, -1, pos);
    cube->setMaterialFlag(irr::video::EMF_LIGHTING, false);
    cube->setMaterialTexture(0,
        _device.get_driver()->getTexture("../assets/img/texture.jpg"));
    _map.push(cube);
}

这是我创建地板但没有任何反应的时候:

void Eo::Scene::addMapFloor()
{
    irr::core::dimension2d<irr::f32> tileSize(100.0,100.0);
    irr::core::dimension2d<irr::u32> tileCount(50,50);
    auto material = new irr::video::SMaterial();
    irr::f32 hillHeight = 0;
    irr::core::dimension2d<irr::f32> countHills(20.0,20.0);
    irr::core::dimension2d<irr::f32> textureRepeatCount(1.0,1.0);
    irr::scene::IMesh *cube =
    _sceneManager->getGeometryCreator()->createHillPlaneMesh(
        tileSize,
        tileCount,
        material,
        hillHeight,
        countHills,
        textureRepeatCount);
    material->ColorMaterial = irr::video::E_COLOR_PLANE::ECP_BLUE;
    cube->setMaterialFlag(irr::video::EMF_WIREFRAME, true);
}

可能是我错过了什么,但我尝试阅读和复制文档。

【问题讨论】:

    标签: c++ irrlicht


    【解决方案1】:

    当你这样做时:

    _sceneManager->getGeometryCreator()->createHillPlaneMesh(/* args */);
    

    您只需创建一个网格(对象的几何描述)。然后,您必须创建一个场景节点以在场景中的某处显示您的网格:

    IMesh* mesh = _sceneManager->getGeometryCreator()->createHillPlaneMesh(/* args */);
    IMeshSceneNode* node = _sceneManager->addMeshSceneNode(mesh /*, optional args*/);
    // Once you don't need the mesh variable anymore, drop it.
    mesh->drop();
    

    旁注:很容易忘记删除某些内容(尤其是在部分代码可能引发异常的情况下),从而导致内存泄漏。我建议您将这些指针包装在某种智能指针中(例如,std::unique_ptr 使用自定义删除器)。

    【讨论】:

      猜你喜欢
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      相关资源
      最近更新 更多