繁体   English   中英

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

[英]Irrlicht - Creating 3D plane/cube mesh

我对Irrlicht相当陌生,但对C ++并不陌生。 在过去的几周中,我进行了大量谷歌搜索,阅读了Irrlicht API文档等。由于某种原因,我似乎无法创建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);

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

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

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

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

在此处输入图片说明

这就是为什么您什么都看不到的原因。 要看东西,您必须将相机向上放置。 点(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();
}

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM