Geometry 为什么要在此网格中剪裁三角形?

Geometry 为什么要在此网格中剪裁三角形?,geometry,irrlicht,clipped,Geometry,Irrlicht,Clipped,我有以下代码: #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 = createDevi

我有以下代码:

#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;
}
#包括
使用内部收益率;
使用名称空间核心;
使用名称空间场景;
使用名称空间视频;
使用名称空间io;
使用名称空间gui;
int main(int argc,字符**argv)
{
IrrlichtDevice*设备=
createDevice(EDT_软件,尺寸2D(640480),16,
假,假,假,0);
设备->设置窗口标题(L“列车模拟器演示”);
IVideoDriver*驱动程序=设备->获取视频驱动程序();
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);
如果(节点1)
节点1->setMaterialFlag(EMF_照明,错误);
if(node2)
{
节点2->setMaterialFlag(EMF_照明,错误);
node2->setMaterialTexture(0,驱动程序->getTexture(“media/grass.jpg”);
}
ICameraSceneNode*pCamera=smgr->addCameraSceneNode(0,vector3df(5,0,5),vector3df(0,0,0));
pCamera->setNearValue(0.5f);
pCamera->设定值(40.0f);
同时(设备->运行()
{
driver->beginScene(真,真,SColor(0,0,0,0));
u32 cur_time=device->getTimer()->getTime();
浮动f_时间=(浮动)当前时间/1000.0f;
//换相机
pCamera->设置位置(矢量3df(sinf(f_时间)*8.0f,3.0f,cosf(f_时间)*8.0f));
smgr->drawAll();
guienv->drawAll();
驱动程序->结束场景();
}
设备->下降();
返回0;
}
…运行时会产生以下结果:

…这很好,只是草应该是由16x16个正方形组成的网格,看起来有些三角形因为某种原因被修剪了。这似乎还与屏幕上仅部分显示的三角形有关,因为仅显示完全位于窗口视口内的三角形。我怎样才能解决这个问题

其他:

操作系统:Ubuntu 10.04 64位

Irrlicht版本:1.7 beta版

证明问题在于我使用的是软件渲染器,而不是OpenGL渲染器

因此,第13行:

IrrlichtDevice *device =
    createDevice(EDT_SOFTWARE, dimension2d<unsigned int>(640, 480), 16,
        false, false, false, 0);
IrrlichtDevice*设备=
createDevice(EDT_软件,尺寸2D(640480),16,
假,假,假,0);
变成:

IrrlichtDevice *device =
    createDevice(EDT_OPENGL, dimension2d<unsigned int>(640, 480), 16,
        false, false, false, 0);
IrrlichtDevice*设备=
createDevice(EDT_OPENGL,尺寸2D(640480),16,
假,假,假,0);