使用 createHillPlaneMesh Irrlicht 平面
Irrlicht a floor plane with createHillPlaneMesh
您好,我对 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);
}
可能是我遗漏了什么,但我尝试阅读并复制文档。
当你这样做时:
_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
使用自定义删除器)。
您好,我对 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);
}
可能是我遗漏了什么,但我尝试阅读并复制文档。
当你这样做时:
_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
使用自定义删除器)。