Why are triangles being clipped in this mesh?

393 Views Asked by At

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:

alt text

...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

1

There are 1 best solutions below

0
On BEST ANSWER

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