2010-11-22 7 views
5

Ich habe den folgenden Code:Warum werden Dreiecke in diesem Netz abgeschnitten?

#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; 
} 

..., die bei der Ausführung der folgenden erzeugt:

alt text

..., die außer in Ordnung ist, dass das Gras soll ein Raster sein von 16x16 Quadraten und es sieht so aus, als ob einige der Dreiecke aus irgendeinem Grund abgeschnitten werden. Es scheint auch, dass dies etwas damit zu tun hat, dass die Dreiecke nur teilweise auf dem Bildschirm angezeigt werden, da nur die Dreiecke angezeigt werden, die vollständig innerhalb des Sichtfensters des Fensters liegen. Wie kann ich das beheben?

Zusätzlich:

OS: Ubuntu 10.04 64-Bit-
Irrlicht Version: 1.7 beta

Antwort

3

stellt sich heraus, dass das Problem war, dass ich die Software-Renderer statt der wurde mit OpenGL-Renderer.

So Linie 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); 
+1

hmm gute Sache zu erinnern. – RolandiXor