2010-11-22 4 views
5

Tengo el siguiente código:¿Por qué se recortan triángulos en esta malla?

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

... que cuando el funcionamiento produce lo siguiente:

alt text

... lo cual está bien, excepto que la hierba se supone que es una cuadrícula de 16x16 cuadrados y parece que algunos de los triángulos están siendo recortados por alguna razón. También parece que esto tiene algo que ver con que los triángulos solo se muestren parcialmente en la pantalla, ya que solo se muestran los triángulos que están completamente dentro de la ventana de la ventana. ¿Cómo puedo arreglar esto?

adicional:

OS: Ubuntu 10.04 64 bits
Irrlicht Versión: 1.7 beta

Respuesta

3

Resulta que el problema era que yo estaba usando el software de render en lugar de la Renderizador OpenGL.

Así que la línea 13:

IrrlichtDevice *device = 
    createDevice(EDT_SOFTWARE, dimension2d<unsigned int>(640, 480), 16, 
     false, false, false, 0); 

se convierte en:

IrrlichtDevice *device = 
    createDevice(EDT_OPENGL, dimension2d<unsigned int>(640, 480), 16, 
     false, false, false, 0); 
+1

hmm buena cosa para recordar. – RolandiXor

Cuestiones relacionadas