2010-11-22 40 views
5

Tôi có đoạn mã sau:Tại sao tam giác bị cắt trong lưới này?

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

... mà khi chạy sản xuất như sau:

alt text

... đó là tốt ngoại trừ việc cỏ được coi là một mạng lưới 16x16 hình vuông và có vẻ như một số hình tam giác đang được cắt bớt vì một lý do nào đó. Nó cũng xuất hiện rằng điều này có một cái gì đó để làm với các hình tam giác được chỉ hiển thị một phần trên màn hình như là chỉ có hình tam giác đó là hoàn toàn trong khung nhìn của cửa sổ đang được hiển thị. Làm thế nào tôi có thể sửa lỗi này?

bổ sung:

OS: Ubuntu 10.04 64-bit
Irrlicht phiên bản: 1.7 beta

Trả lời

3

Hóa ra rằng vấn đề là tôi đã sử dụng các renderer phần mềm thay vì Trình kết xuất OpenGL.

Vì vậy, dòng 13:

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

trở thành:

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

hmm điều tốt để nhớ. – RolandiXor

Các vấn đề liên quan