Irrlicht - 创建3D平面/立方体网格

时间:2016-12-02 19:43:16

标签: c++ 3d irrlicht

我对Irrlicht相当新,但我不是C ++的新手。在过去的几周里,我做了很多谷歌搜索,阅读Irrlicht API文档等。出于某种原因,我似乎无法创建一个3D平面网格。

这是我到目前为止所得到的。

CONCAT

我也尝试使用此方法创建3D立方体网格

irr::scene::ISceneNode* ground = sceneManager->addMeshSceneNode(plane);
ground->setPosition(irr::core::vector3df(0, 0, 10));

irr::scene::ICameraSceneNode* cam = sceneManager->addCameraSceneNode();
cam->setTarget(ground->getPosition());
sceneManager->addMeshSceneNode(plane);

出于某种原因,屏幕保持黑色,没有任何渲染。似乎没什么用。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

您的问题是相机和平面都具有相同的Y坐标。你从未为相机指定任何位置,因此它位于点(0,0,0),因此它的Y坐标为0.你还指定了平面的坐标为(0,0,10),所以它Y坐标也是0.由于Y坐标在Irrlicht中是向上的,这意味着您正在从切片中查看平面,如下图所示:

enter image description here

这就是你什么也看不见的原因。要查看某些内容,您必须将相机放得更高。点(0,50,0)将起作用。

此外,如果场景中没有任何灯光,则该平面将像背景一样变黑,因为它默认对光线敏感。要更改此设置,您需要使用以下代码使平面对光照不敏感:

plane->setMaterialFlag(irr::video::EMF_LIGHTING, false);

如果飞机的颜色为黑色(默认情况下为黑色),则黑色背景上会出现黑色平面,因此您将看不到任何内容。因此,我建议您将背景设置为白色,方法是将其用作主循环中的beginScene方法:

driver->beginScene(true, true, irr::video::SColor(255, 255, 255, 255));

通常使用此代码,您应该能够看到以下屏幕截图:

irr::IrrlichtDevice *device = irr::createDevice(irr::video::EDT_OPENGL);
irr::video::IVideoDriver *driver = device->getVideoDriver();
irr::scene::ISceneManager *sceneManager = device->getSceneManager();
const irr::scene::IGeometryCreator *geomentryCreator = sceneManager->getGeometryCreator();

irr::scene::IMesh* plane = geomentryCreator->createPlaneMesh(irr::core::dimension2d<irr::f32>(100, 100), irr::core::dimension2d<irr::u32>(100, 100));
irr::scene::ISceneNode* cube = sceneManager->addCubeSceneNode(20);
cube->render();

irr::scene::ISceneNode* ground = sceneManager->addMeshSceneNode(plane);
ground->setPosition(irr::core::vector3df(0, 0, 10));
plane->setMaterialFlag(irr::video::EMF_LIGHTING, false);    //This is important

irr::scene::ICameraSceneNode* cam = sceneManager->addCameraSceneNode();
cam->setPosition(irr::core::vector3df(0, 50, 0));    //This is also important
cam->setTarget(ground->getPosition());
sceneManager->addMeshSceneNode(plane);

while(device->run()){
    driver->beginScene(true, true, irr::video::SColor(255, 255, 255, 255));    //Important for the background to be white
    sceneManager->drawAll();
    driver->endScene();
}

enter image description here

相关问题