I have the following code:
#include <irrlicht.h>
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
int main(int argc, char** argv)
{
IrrlichtDevice *device =
createDevice(EDT_SOFTWARE, dimension2d<unsigned int>(640, 480), 16,
false, false, false, 0);
device->setWindowCaption(L"Train Simulator Demo");
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IGUIEnvironment* guienv = device->getGUIEnvironment();
IAnimatedMesh* mesh1 = smgr->getMesh("media/simple_engine.b3d");
IAnimatedMesh* mesh2 = smgr->getMesh("media/simple_track.b3d");
IAnimatedMeshSceneNode* node1 = smgr->addAnimatedMeshSceneNode( mesh1 );
IAnimatedMeshSceneNode* node2 = smgr->addAnimatedMeshSceneNode( mesh2 );
if (node1)
node1->setMaterialFlag(EMF_LIGHTING, false);
if (node2)
{
node2->setMaterialFlag(EMF_LIGHTING, false);
node2->setMaterialTexture( 0, driver->getTexture("media/grass.jpg") );
}
ICameraSceneNode * pCamera = smgr->addCameraSceneNode(0, vector3df(5,0,5), vector3df(0,0,0));
pCamera->setNearValue(0.5f);
pCamera->setFarValue(40.0f);
while(device->run())
{
driver->beginScene(true, true, SColor(0,0,0,0));
u32 cur_time = device->getTimer()->getTime();
float f_time = (float)cur_time / 1000.0f;
// Change the camera
pCamera->setPosition(vector3df(sinf(f_time) * 8.0f ,3.0f ,cosf(f_time) * 8.0f));
smgr->drawAll();
guienv->drawAll();
driver->endScene();
}
device->drop();
return 0;
}
...which when run produces the following:
...which is fine except that the grass is supposed to be a grid of 16x16 squares and it looks like some of the triangles are being clipped for some reason. It also appears that this has something to do with the triangles being only partially displayed on the screen as only the triangles that are completely within the window's viewport are being displayed. How can I fix this?
Additional:
OS: Ubuntu 10.04 64-bit
Irrlicht version: 1.7 beta
Turns out that the problem was that I was using the software renderer instead of the OpenGL renderer.
So line 13:
IrrlichtDevice *device =
createDevice(EDT_SOFTWARE, dimension2d<unsigned int>(640, 480), 16,
false, false, false, 0);
Becomes:
IrrlichtDevice *device =
createDevice(EDT_OPENGL, dimension2d<unsigned int>(640, 480), 16,
false, false, false, 0);