Page 1 of 1

Mesh disappearing from scene ?

Posted: Mon Aug 14, 2006 4:29 pm
by fireblade
I working on meshes that should represent city blocks, you know the ground with streets , sidewalks etc. whre the buildings and houses are placed.
Because of that I'm using meshes instead of terrain.
The problem is that mesh disappears often when I move/rotate the camera while walking on it so it looks like camera hangs on thin air.
I don't know what's cousing the problem , camera settings , mesh design
or something else.

For illustration this is a code with earth.x from irrlicht sdk as a mesh to see the problem.

bobi

#include <irrlicht.h>

using namespace irr;

#pragma comment(lib, "Irrlicht.lib")
// please change to you media path
int main()
{ // setup device
IrrlichtDevice *device =
createDevice( video::EDT_OPENGL, core::dimension2d<s32>(800, 600), 16,
false, false, false, 0);

video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();

scene::IAnimatedMesh* q3levelmesh = smgr->getMesh("D:\\irrlicht-1.1\\media\\earth.x");
scene::IAnimatedMeshSceneNode* q3node = smgr->addAnimatedMeshSceneNode(q3levelmesh);
scene::ITriangleSelector* selector = 0;
if (q3node )
{ // scale earth to something more like plane
q3node->setScale(core::vector3df(500,1,500));
q3node->setMaterialTexture(0,driver->getTexture("D:\\irrlicht-1.1\\media\\earth.bmp") );
selector = smgr->createOctTreeTriangleSelector(q3levelmesh->getMesh(0), q3node, 128);
q3node->setTriangleSelector(selector);
selector->drop();
q3node->setMaterialFlag(video::EMF_LIGHTING, false);
}
// hide cursor
device->getCursorControl()->setVisible(false);
// add camera
scene::ICameraSceneNode* camera =
smgr->addCameraSceneNodeFPS(0, 50.0f, 100.0f, -1, 0, 0, false);
camera->setPosition(core::vector3df(0,300,0));
// attach collision response animator to camera
scene::ISceneNodeAnimator* anim =
smgr->createCollisionResponseAnimator(
selector, camera, core::vector3df(30,50,30),
core::vector3df(0,-3,0),
core::vector3df(0,15,0));
camera->addAnimator(anim);
anim->drop();
while(device->run())
{
driver->beginScene(true, true, 0);
smgr->drawAll();
driver->endScene();
}
device->drop();
return 0;
}