使用createHillPlaneMesh清除地板平面

时间:2018-05-25 23:13:50

标签: c++ irrlicht

你好,我对Irrlicht库有疑问

我想用我使用createHillPlaneMesh的地板做地图。

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

这是我发布它的时候:

^a(\w\d)b(\d)cd$

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

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

这是我创造发言权但没有发生的事情:

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

我可能会错过一些东西,但我会尝试阅读并复制文档。

1 个答案:

答案 0 :(得分:2)

当你这样做时:

_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带有自定义删除器)。