Irrlicht-创建三维平面/立方体网格 我对Irrlicht来说是相当新的,但是我对C++不是新的。在过去的几周里,我做了大量的谷歌搜索,阅读了irlichtapi文档,等等。出于某种原因,我似乎无法创建三维平面网格

Irrlicht-创建三维平面/立方体网格 我对Irrlicht来说是相当新的,但是我对C++不是新的。在过去的几周里,我做了大量的谷歌搜索,阅读了irlichtapi文档,等等。出于某种原因,我似乎无法创建三维平面网格,c++,3d,irrlicht,C++,3d,Irrlicht,这是我到目前为止得到的 irr::scene::ISceneNode* ground = sceneManager->addMeshSceneNode(plane); ground->setPosition(irr::core::vector3df(0, 0, 10)); irr::scene::ICameraSceneNode* cam = sceneManager->addCameraSceneNode(); cam->setTarget(ground->ge

这是我到目前为止得到的

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);
我还尝试使用此方法创建三维立方体网格

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::IMesh*plane=geomentryCreator->createPlaneMesh(irr::core::dimension2d(100100),irr::core::dimension2d(100100));
irr::scenenode::ISceneNode*cube=sceneManager->addCubeSceneNode(20);
立方体->渲染();

由于某些原因,屏幕保持黑色,没有任何渲染。似乎什么都不管用。有什么建议吗?

您的问题是相机和飞机都有相同的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();
}
irr::IrrlichtDevice*device=irr::createDevice(irr::video::EDT\u OPENGL);
irr::video::IVideoDriver*驱动程序=设备->获取视频驱动程序();
irr::sceneManager*sceneManager=device->getSceneManager();
常量irr::场景::IGometryCreator*GeometryCreator=sceneManager->getGeometryCreator();
irr::scene::IMesh*plane=geomentryCreator->createPlaneMesh(irr::core::dimension2d(100100),irr::core::dimension2d(100100));
irr::scenenode::ISceneNode*cube=sceneManager->addCubeSceneNode(20);
立方体->渲染();
irr::SceneNode*ground=sceneManager->addMeshSceneNode(平面);
地面->设置位置(irr::core::vector3df(0,0,10));
平面->setMaterialFlag(irr::video::EMF\U照明,错误)//这很重要
irr::scene::ICameraSceneNode*cam=sceneManager->addCameraSceneNode();
cam->设置位置(irr::core::vector3df(0,50,0))//这也很重要
cam->setTarget(地面->获取位置());
场景管理器->添加网格场景节点(平面);
同时(设备->运行(){
driver->beginScene(true,true,irr::video::SColor(255,255,255,255));//背景为白色很重要
场景管理器->drawAll();
驱动程序->结束场景();
}

您的问题是相机和平面都具有相同的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();
}
irr::IrrlichtDevice*device=irr::createDevice(irr::video::EDT\u OPENGL);
irr::video::IVideoDriver*驱动程序=设备->获取视频驱动程序();
irr::sceneManager*sceneManager=device->getSceneManager();
常量irr::场景::IGometryCreator*GeometryCreator=sceneManager->getGeometryCreator();
irr::scene::IMesh*plane=geomentryCreator->createPlaneMesh(irr::core::dimension2d(100100),irr::core::dimension2d(100100));
irr::scenenode::ISceneNode*cube=sceneManager->addCubeSceneNode(20);
立方体->渲染();
irr::SceneNode*ground=sceneManager->addMeshSceneNode(平面);
地面->设置位置(irr::core::vector3df(0,0,10));
平面->setMaterialFlag(irr::video::EMF\U照明,错误)//这很重要
irr::scene::ICameraSceneNode*cam=sceneManager->addCameraSceneNode();
cam->设置位置(irr::core::vector3df(0,50,0))//这也很重要
cam->setTarget(地面->获取位置());
场景管理器->添加网格场景节点(平面);
同时(设备->运行(){
driver->beginScene(true,true,irr::video::SColor(255,255,255,255));//背景为白色很重要
场景管理器->drawAll();
驱动程序->结束场景();
}

我的Irrlicht有点生锈,但我有几个问题:你的相机放在哪里?确保它不在截锥剔除距离之外。另外,你的场景中有灯光吗?嗯,摄影机被放置在0,0,0,请不要提供灯光。很难看到你的
main
是什么样子,包括你的渲染循环。我的Irrlicht有点生锈,但我有几个问题:你的相机放在哪里?确保它不在截锥剔除距离之外。另外,你的场景中有灯光吗?嗯,摄影机被放置在0,0,0,请不要提供灯光。很难看到您的
main
是什么样子,包括渲染循环。