2016-12-02 7 views
0

저는 Irrlicht를 처음 접했지만 C++을 처음 사용하지는 않았습니다. 지난 몇 주간 나는 인터넷 검색을 많이하고 Irrlicht API 문서를 읽었습니다. 몇 가지 이유로 3D 평면 메쉬를 만들 수없는 것 같습니다.Irrlicht - 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(); 

를 사용하여 메쉬를 만들어보십시오. 아무것도 작동하는 것 같습니다. 어떤 제안?

+0

내 Irrlicht는 약간 녹슬었지만 몇 가지 질문이 있습니다. 카메라는 어디에 배치되어 있습니까? 그것이 절두체 컬링 거리의 바깥에 있지 않은지 확인하십시오. 또한 장면에 조명이 있습니까? – AndyG

+0

음, 카메라가 0,0,0에 있고 – Kurieita

+0

이 아닙니다 [mcve]를 입력하십시오. 렌더링 루프를 포함하여'main'이 어떻게 보이는지 알기가 어렵습니다. – AndyG

답변

3

문제는 카메라와 비행기가 모두 같은 Y 좌표를 사용한다는 것입니다. 카메라의 위치를 ​​지정하지 않았으므로 점 (0, 0, 0)에 있으므로 Y 좌표는 0입니다. 평면의 좌표도 (0, 0, 10)으로 지정 했으므로

enter image description here

당신은 아무것도 표시되지 않는 이유는 다음 Y 좌표가으로 Irrlicht에 있기 때문에 Y 좌표는 0이다, 이것은 당신이이 그림에서처럼 조각에서 비행기에서 찾고있는 것을 의미한다 . 뭔가를 보려면 카메라를 위로 올려야합니다. 포인트 (0, 50, 0)가 작동합니다.

또한 장면에 조명이없는 경우 기본적으로 조명에 민감하기 때문에 비행기는 배경처럼 검은 색이됩니다. 이 설정을 변경하려면 다음 코드를 사용하여 조명에 비행기를 구분해야 : 비행기의 색상이 기본적으로 인 블랙 인 경우

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

, 그렇게, 검은 배경에 검은 색면이있을 것이다 너는 아무 것도 볼 수 없을 것이다. 그래서 난 당신이 메인 루프에서 beginScene 방법으로이를 이용하여 대신 흰색 배경을 제안한다

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

: 일반적으로이 코드

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

, 다음과 같은 화면을 볼 수 있어야합니다 enter image description here